使用 cron 进行数据库备份

使用 cron 进行数据库备份

我正在尝试设置一个 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

相关内容