安全MySQL备份cron作业 - my.cnf未被阅读

时间:2009-03-02 11:27:19

标签: mysql security cron freebsd

我曾尝试在运行FreeBSD的网络服务器上创建备份cron作业。目前它看起来像这样:

  

/usr/local/bin/mysqldump --opt --single-transaction --comments --dump-date --no-autocommit --all-databases --result-file=/var/backups/mysql/all.sql

当我以root用户身份运行它时工作正常(因为root有一个.my.cnf,其中包含用于连接的用户名和密码,但是当作业由cron运行时,my.cnf文件未被读取

有没有办法解决这个问题而不必将用户名和密码放入命令本身(因为那有点不安全)?

奇怪的是,我对PostgreSQL和.pgpass文件有相同的设置,这就像魅力一样。

4 个答案:

答案 0 :(得分:18)

使用--defaults-extra-file选项告诉它在哪里找到.my.cnf文件(假设任何正在运行的用户mysqldump都可以读取它。

答案 1 :(得分:2)

实际上,cron应该阅读.my.cnf。你如何在/ etc / crontab或crontab -e中运行cronjob?你可以尝试使用AutoMySQLBackup这是一个使用mysqldump的小shell脚本。

答案 2 :(得分:2)

我也遇到了这个问题。

似乎MySQL是硬编码来寻找'〜/ .my.cnf',而不是'$ HOME / .my.cnf'。

在FreeBSD上,从/ etc / crontab调用的cronjobs会忽略波形符'〜'字符,因此会忽略像〜/ .my.cnf

这样的值

事实上,以下内容对我来说根本不起作用:

mysql --defaults-extra-file =〜/ .my.cnf

但是,使用$ HOME变量确实有效:

HOME = /家/管理 mysql --defaults-extra-file = $ HOME / .my.cnf

作为替代方案,如果我将它从/ etc / crontab移动到/ var / cron / tabs / root(以root身份使用'crontab -e'),我的cronjob将会工作。

答案 3 :(得分:0)

在FreeBSD上,您可以添加以下内容:

security.bsd.see_other_uids=0

到/etc/sysctl.conf并重启,或使用

sysctl security.bsd.see_other_uids=0

设置sysctl值。

现在,除root之外的用户只能查看自己的进程。因此,将密码放在命令行中风险较小。

另外,如何运行crontab?您是使用crontab -e -u root将其添加到root用户crontab,还是将其添加到/ etc / crontab?

验证是否在.my.cnf上设置了正确的权限以及crontab设置的环境变量,因为这可能导致它查找与您的主目录不同的位置(对于FreeBSD上的root用户是/ root) )。