Vil*_*ila 3 mysqldump my.cnf scripting password cron
我知道有很多与此类似的问题,但似乎没有一个对我的问题有明确的答案,所以这就是我发布此内容的原因......我希望在正确的地方。
问题:
我有一个脚本,/etc/cron.daily
其中执行每日数据库备份等。只要将密码硬编码到mysqldump命令的脚本中,它就可以正常工作。
#!/bin/sh
$ mysqldump -u [uname] -p[pass] db_name > db_backup.sql
Run Code Online (Sandbox Code Playgroud)
但是,不想在脚本中使用密码,我设置了~/.my.cnf
文件 (chmod 600),其中存储了我的用户密码,因此mysqldump
脚本中的命令将是无密码的。
~/.my.cnf
[mysqldump]
password="pass"
Run Code Online (Sandbox Code Playgroud)
#!/bin/sh
$ mysqldump -u [uname] db_name > db_backup.sql
Run Code Online (Sandbox Code Playgroud)
当我以 root 身份从命令行手动运行这个新脚本时,它就像一个魅力。
sudo sh /etc/cron.daily/daily-backup-script
Run Code Online (Sandbox Code Playgroud)
但是当cron
想要运行它时,它无法转储数据库,并出现以下错误:
mysqldump: Got error: 1045: Access denied for user 'user'@'localhost' (using password: NO) when trying to connect.
Run Code Online (Sandbox Code Playgroud)
所以,我认为cron
没有相应的权限才能执行密码的mysqldymp
脚本命令中,用密码放在~/.my.cnf
,但是脚本和密码的mysqldump
命令它是从完美用命令行工作sudo
。
迄今为止的努力:
sudo
中的mysqldump
命令前面尝试过。sudo -u user
中的mysqldump
命令前面尝试过。~/.my.cnf
文件更改为root:root
.cron
不知道 的路径~/.my.cnf
,因此根据MYSQL 文档,您需要指定.my.cnf
文件的路径。
mysqldump
通过触发的 shell 脚本中正确的无密码命令cron
应该是:
mysqldump --defaults-extra-file=/path/to/.my.cnf -u [uname] db_name > db_backup.sql
Run Code Online (Sandbox Code Playgroud)
奇迹般有效。
归档时间: |
|
查看次数: |
1387 次 |
最近记录: |