我有一个脚本,它执行一些控制并根据结果更新 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