2009-03-02 51 views
10

我试图在运行FreeBSD的web服务器上做备份cron作业。目前,它看起来是这样的:安全MySQL备份cron作业 - my.cnf未被读取

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

当我运行它作为根(因为根有用于连接的用户名和密码.my.cnf它工作正常,但是当作业运行由cron中,my.cnf文件没有,而不必把用户名和密码,进入命令本身(因为还有点儿不安全的)读取。

有周围的什么办法?

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

回答

16

使用--defaults-extra-file选项告诉它在哪里可以找到.my.cnf文件(假设它是由哪个用户正在运行mysqldump可读

2

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

+0

嗯,实际上它不是直接从cron运行,而是通过FreeBSD的`periodic`系统运行。它实际上是一个脚本文件在/ usr/local/etc/periodic /每日 周期性的cron作业是通过`/ etc/cron`像这样运行的: >`1 3 * * * root periodic daily` – mikl 2009-03-02 12:00:43

+0

Oh,Markdown在评论中未启用。希望它的清晰无论如何:) – mikl 2009-03-02 12:01:23

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上的根目录/根)。

2

我刚刚遇到了这个问题。

看来,MySQL是硬编码来寻找'〜/ .my.cnf',而不是'$ HOME/.my.cnf'之类的东西。

在FreeBSD,cronjobs从所谓的/ etc/crontab中会忽略波浪“〜”字符,所以会忽略像〜/ .my.cnf

事实上的值,以下为不工作我在所有:

的mysql --defaults-额外文件=〜/ .my.cnf

但是,使用$ HOME变量不工作:

HOME = /家庭/管理 MySQL的 - -defaults-额外文件= $ HOME /。我的。cnf

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