从 /etc/rc.local 运行脚本时出现 mysql 错误 1045 (28000)

从 /etc/rc.local 运行脚本时出现 mysql 错误 1045 (28000)

我有一个脚本,它执行一些控制并根据结果更新 mysql 条目。具体来说,该脚本调用此命令

mysql --database="mydatabase" --execute="UPDATE mytable SET current_value=\"$CONTROL_RESULT\" WHERE name=\"register_name\";"

从终端手动运行时,脚本可以正常工作。

我在 /etc/rc.local 中添加了一行以在启动时运行它,在这种情况下脚本返回错误

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

更准确地说,如果我手动运行 /etc/rc.local,它就会起作用(如预期的那样;它与手动运行脚本相同);当 /etc/rc.local 在系统启动时运行时,我收到此错误。

到目前为止,我所做的就是授予 root 用户所有权限,并在 /root/.my.cnf 中添加 root 密码(如果我用mysql -u root它访问 mysql,它不会询问我任何密码)。这些是我在其他讨论中发现的主要建议,这些建议总是与访问时的错误有关mysql -u username,但在我的例子中,这些建议非常有效。

知道可能是什么问题吗?以及如何消除错误?

我在 Linux 上工作(正如你已经猜到的...)。以下是 mysql 版本信息

mysql> SHOW VARIABLES LIKE "%version%";
+-------------------------+-------------------------+
| Variable_name           | Value                   |
+-------------------------+-------------------------+
| innodb_version          | 5.5.50                  |
| protocol_version        | 10                      |
| slave_type_conversions  |                         |
| version                 | 5.5.50-0ubuntu0.14.04.1 |
| version_comment         | (Ubuntu)                |
| version_compile_machine | armv7l                  |
| version_compile_os      | debian-linux-gnu        |
+-------------------------+-------------------------+

答案1

$HOME/etc/rc.local在运行的环境中未设置,因此mysql找不到用户的.my.cnf文件。

您可以通过$HOME在运行命令之前明确设置来解决此问题......

export HOME=/root

或者明确设置要使用的配置文件--defaults-file=/root/.my.cnf

相关内容