当 运行 根脚本包含 mysql 时,mysql 查询输出 mysql 使用信息
When running a script as root including mysql the mysql query outputs the mysql Usage info
我的 cronjob 应该执行带有 mysql 查询的脚本
如果我查看 cronjob 的日志,我会看到 mysql 帮助命令的输出
我希望从 table 中看到 2 个 table 类型为 view
的名称
- 如果我从命令行 运行 下面的脚本而不是 root 用户,它 运行 是完美的。
- 如果我运行它作为root我得到mysql帮助输出
USERNAME
、PASSWORD
和HOSTNAME
是环境变量
我的第一个问题是:root 在 echo $USERNAME
上获得的结果是否可能与其他用户不同?
#!/bin/sh
DBNAME="my_db"
# get all table names that are type of view
query="SHOW FULL TABLES IN $DBNAME WHERE TABLE_TYPE LIKE 'VIEW';"
views=$(mysql -sN -u"$USERNAME" -p"$PASSWORD" -h"$HOSTNAME" -e "$query" "$DBNAME")
echo "$views"
我得到的输出是:
mysql Copyright Oracle affiliates. owners. Usage: -?, -I, --auto-rehash 'rehash' and --disable-auto-rehash. (Defaults -A, No table mysql --auto-vertical-output Automatically result -B, (Enables --binary-as-hex --character-sets-dir=name Directory --column-type-info -c, default with -C, -#, --debug-check -T, -D, --default-character-set=name Set --delimiter=name --enable-cleartext-plugin Enable/disable -e, file.) -E, -f, -G, Enable internal named otherwise Disable disabled -i, --init-command=name Will --local-infile -b, -h, -H, -X, --line-numbers (Defaults -L, Don't -n, --column-names (Defaults -N, Don't --sigint-ignore -o, default --pager[=name] option, PAGER. etc. work option -p, Password not -P, order /etc/services, --prompt=name --protocol=name memory). -q, down history -r, --reconnect --disable-reconnect. (Defaults -s, each -S, --ssl other --ssl-ca=name --ssl). --ssl-capath=name --ssl-cert=name --ssl-cipher=name --ssl-key=name --ssl-verify-server-cert Verify hostname default. --ssl-mode=name -t, --tee=name also. --disable-tee. -u, -U, -U, -v, -V, -w, --connect-timeout=# --max-allowed-packet=# The server. --net-buffer-length=# The --select-limit=# --max-join-size=# --safe-updates. --secure-auth (pre-4.1.1) --server-arg=name --show-warnings --plugin-dir=name --default-auth=name Default /etc/mysql/my.cnf The The --print-defaults --no-defaults --defaults-file=# --defaults-extra-file=# Variables and --------------------------------- auto-rehash auto-vertical-output binary-as-hex character-sets-dir column-type-info comments compress debug-check debug-info database default-character-set delimiter enable-cleartext-plugin vertical force named-commands ignore-spaces init-command local-infile no-beep host html xml line-numbers unbuffered column-names sigint-ignore port prompt quick raw reconnect socket ssl ssl-ca ssl-capath ssl-cert ssl-cipher ssl-key ssl-verify-server-cert table user safe-updates i-am-a-dummy connect-timeout max-allowed-packet net-buffer-length select-limit max-join-size secure-auth show-warnings plugin-dir default-auth
- 我删除了标志
-sN
但没有帮助。
- 我简化了查询但没有帮助。
- 如果我 运行 在命令行上使用 sudo 命令,它就可以工作。
sudo mysql -sN -u$USERNAME -p$PASSWORD -h$HOSTNAME -e "SHOW FULL TABLES IN my_db WHERE TABLE_TYPE LIKE 'VIEW';" my_db
有人可以帮忙找出问题吗?
编辑:
我发现,如果我在脚本中使用它们并且 运行 它作为 root.
,环境变量是空的
- 如果我 运行
printenv
我可以看到它们在那里
- 如果我运行
sudo printenv
他们不在
此问题的解决方案是在脚本顶部添加以下行:
. /opt/elasticbeanstalk/support/envvars
如果您使用 AWS Elastic Beanstalk 并希望在从 /etc/cron.d/.
中的 cronjob 文件触发的脚本中提供环境变量,则这是必需的
我的 cronjob 应该执行带有 mysql 查询的脚本
如果我查看 cronjob 的日志,我会看到 mysql 帮助命令的输出 我希望从 table 中看到 2 个 table 类型为 view
的名称- 如果我从命令行 运行 下面的脚本而不是 root 用户,它 运行 是完美的。
- 如果我运行它作为root我得到mysql帮助输出
USERNAME
、PASSWORD
和HOSTNAME
是环境变量
我的第一个问题是:root 在 echo $USERNAME
上获得的结果是否可能与其他用户不同?
#!/bin/sh
DBNAME="my_db"
# get all table names that are type of view
query="SHOW FULL TABLES IN $DBNAME WHERE TABLE_TYPE LIKE 'VIEW';"
views=$(mysql -sN -u"$USERNAME" -p"$PASSWORD" -h"$HOSTNAME" -e "$query" "$DBNAME")
echo "$views"
我得到的输出是:
mysql Copyright Oracle affiliates. owners. Usage: -?, -I, --auto-rehash 'rehash' and --disable-auto-rehash. (Defaults -A, No table mysql --auto-vertical-output Automatically result -B, (Enables --binary-as-hex --character-sets-dir=name Directory --column-type-info -c, default with -C, -#, --debug-check -T, -D, --default-character-set=name Set --delimiter=name --enable-cleartext-plugin Enable/disable -e, file.) -E, -f, -G, Enable internal named otherwise Disable disabled -i, --init-command=name Will --local-infile -b, -h, -H, -X, --line-numbers (Defaults -L, Don't -n, --column-names (Defaults -N, Don't --sigint-ignore -o, default --pager[=name] option, PAGER. etc. work option -p, Password not -P, order /etc/services, --prompt=name --protocol=name memory). -q, down history -r, --reconnect --disable-reconnect. (Defaults -s, each -S, --ssl other --ssl-ca=name --ssl). --ssl-capath=name --ssl-cert=name --ssl-cipher=name --ssl-key=name --ssl-verify-server-cert Verify hostname default. --ssl-mode=name -t, --tee=name also. --disable-tee. -u, -U, -U, -v, -V, -w, --connect-timeout=# --max-allowed-packet=# The server. --net-buffer-length=# The --select-limit=# --max-join-size=# --safe-updates. --secure-auth (pre-4.1.1) --server-arg=name --show-warnings --plugin-dir=name --default-auth=name Default /etc/mysql/my.cnf The The --print-defaults --no-defaults --defaults-file=# --defaults-extra-file=# Variables and --------------------------------- auto-rehash auto-vertical-output binary-as-hex character-sets-dir column-type-info comments compress debug-check debug-info database default-character-set delimiter enable-cleartext-plugin vertical force named-commands ignore-spaces init-command local-infile no-beep host html xml line-numbers unbuffered column-names sigint-ignore port prompt quick raw reconnect socket ssl ssl-ca ssl-capath ssl-cert ssl-cipher ssl-key ssl-verify-server-cert table user safe-updates i-am-a-dummy connect-timeout max-allowed-packet net-buffer-length select-limit max-join-size secure-auth show-warnings plugin-dir default-auth
- 我删除了标志
-sN
但没有帮助。 - 我简化了查询但没有帮助。
- 如果我 运行 在命令行上使用 sudo 命令,它就可以工作。
sudo mysql -sN -u$USERNAME -p$PASSWORD -h$HOSTNAME -e "SHOW FULL TABLES IN my_db WHERE TABLE_TYPE LIKE 'VIEW';" my_db
有人可以帮忙找出问题吗?
编辑: 我发现,如果我在脚本中使用它们并且 运行 它作为 root.
,环境变量是空的- 如果我 运行
printenv
我可以看到它们在那里 - 如果我运行
sudo printenv
他们不在
此问题的解决方案是在脚本顶部添加以下行:
. /opt/elasticbeanstalk/support/envvars
如果您使用 AWS Elastic Beanstalk 并希望在从 /etc/cron.d/.
中的 cronjob 文件触发的脚本中提供环境变量,则这是必需的