我正在尝试设置一个 cron 作业以便每天备份我的数据库。这是我在 crontab 文件中写的内容:
25 18 * * * root mysqldump -u root -p myPassWord --all-databases | gzip > /var/backup/database_`date '+%m-%d-%Y'`.sql.gz
由于 18:25 没有发生任何事情,我查看了我的/var/log/syslog
文件(服务器在 Debian 下),发现以下内容:
Jan 24 18:25:01 ns311475 /USR/SBIN/CRON[16252]: (root) CMD (/usr/local/ispconfig/server/server.sh 2>&1 > /dev/null | while read line; do echo `/bin/date` "$line" >> /var/log/ispconfig/cron.log; done)
Jan 24 18:25:01 ns311475 /USR/SBIN/CRON[16253]: (getmail) CMD (/usr/local/bin/run-getmail.sh > /dev/null 2>> /dev/null)
Jan 24 18:25:01 ns311475 dovecot: imap-login: Disconnected (no auth attempts in 0 secs): user=<>, rip=127.0.0.1, lip=127.0.0.1, secured, session=<3xFlL2kNAAB/AAAB>
Jan 24 18:25:01 ns311475 dovecot: pop3-login: Disconnected (no auth attempts in 0 secs): user=<>, rip=127.0.0.1, lip=127.0.0.1, secured, session=<rhRlL2kNvwB/AAAB>
Jan 24 18:25:01 ns311475 postfix/smtpd[16279]: connect from localhost.localdomain[127.0.0.1]
Jan 24 18:25:01 ns311475 postfix/smtpd[16279]: lost connection after CONNECT from localhost.localdomain[127.0.0.1]
Jan 24 18:25:01 ns311475 postfix/smtpd[16279]: disconnect from localhost.localdomain[127.0.0.1]
我不明白第一行,我认为其余的正在尝试通过电子邮件发送问题,但我什么也没得到。
答案1
阅读精美的手册:man 5 crontab
:在那里你会看到“%”对于 cron 有特殊的含义。
这会破坏你的预期命令。
除此之外,这是启动 mySQL 备份的非常糟糕的方法:
- 您的 root-DB-密码将出现在每个本地用户或每个具有 snmp 读取访问权限的用户均可查看的进程列表中
- 如果没有明显的原因,您不应在 shell 中启动子 shell。请改用“$(命令)”。
- gzip 将仅使用一个 CPU。所以这部分会减慢你的整个备份速度
你应该:
- 将您的根数据库密码放入根文件夹中的文件(.mysql - 我不记得该文件的确切语法和名称)中,只能由 root 访问。这将启用使用 mySQL 密码的自动 root 登录
- 将您正在执行的操作放入 /usr/local/sbin 上自己的脚本中(可能也仅对 root 和受信任的组可读)
- 通过 cron 调用该脚本。
- 使用该脚本中所有命令的完整路径。 Cron 可能无法在设置了所有“常用”路径的环境中执行
- 使用
pgzip
或者如果有可用空间,请在备份完成后进行压缩
答案2
Debian 有一个软件包可以帮助您处理 MySQL 数据的转储、压缩和旋转。您可以使用以下命令安装它:
$ sudo apt-get install automysqlbackup
在此之后,每天、每周和每月的转储将被放置在/var/lib/automysqlbackup