![在 init.d 脚本中以 root 用户身份运行 SQL 调用?](https://linux22.com/image/58607/%E5%9C%A8%20init.d%20%E8%84%9A%E6%9C%AC%E4%B8%AD%E4%BB%A5%20root%20%E7%94%A8%E6%88%B7%E8%BA%AB%E4%BB%BD%E8%BF%90%E8%A1%8C%20SQL%20%E8%B0%83%E7%94%A8%EF%BC%9F.png)
我有一个 SQL 查询,必须在软件更新后每次启动时运行(更新随新安装的 mysql 一起提供,因此更改了 debian-sys-maint 用户的密码,我的脚本在数据库中更新了该密码)。我在 /etc/init.d 中有一个脚本,当我以 root 用户身份运行它时,它会执行以下操作:./update
。但当我启动时,它无法正常运行。我运行服务命令以使其运行整个init.d
过程,但它说:
错误 1045 (28000):用户“root”@“localhost”的访问被拒绝(使用密码:NO
我输入了明文密码,/root/.my.cnf
以避免在各种其他脚本中使用它并提高安全性。-p
当我手动调用脚本时,它可以使我的 mysql 调用(不带)完美,但当我使用服务进程而不是在启动时则不能。在另一个问题上提到,脚本的环境可能没有正确设置,但我不知道必须设置哪些环境变量才能在脚本中调用 mysql,以便它读取/root/.my.cnf
.
我已经检查过以确保该脚本由 root 拥有并具有 755 权限。我需要做什么才能让它发挥作用?
答案1
运行 init.d 脚本时,除非您在 init.d 脚本中显式获取该 .my.cnf 脚本,否则不会使用该脚本。有点像 crontab。因此,请尝试采购它,看看是否有效。
另一方面,这个脚本是否必须以 root 用户身份登录数据库?我理解为什么操作系统级别的用户需要是root,但是为什么数据库本身需要这样的特权用户呢?
答案2
事实证明,放在sudo
mysql 调用前面可以修复它,现在调用可以正确运行。我不知道:
- 为什么脚本不以 root 用户身份运行。
- 它以什么用户身份运行。
- 为什么该用户具有 sudoer 能力。