我有这个 cron 任务,
/usr/bin/mysqldump -u username -p'password' MyDatabase > /backup/CronBackup/MyDatabaseBackup.sql &>/backup/CronBackup/cronBackupLog.log
我浏览过这个页面: 为什么我的 crontab 不工作?我该如何排除故障?
cron运行后,cronBackupLog.log 从未出现过......
grep mysqldump cron
在目录中运行/var/log
显示:
[root@server log]# grep mysqldump cron
May 20 00:00:01 server CROND[3104]: (username) CMD (/usr/bin/mysqldump -u username -p'password' MyDatabase > /backup/CronBackup/MyDatabaseBackup.sql)
May 21 00:00:01 server CROND[15318]: (username) CMD (/usr/bin/mysqldump -u username -p'password' MyDatabase > /backup/CronBackup/MyDatabaseBackup.sql)
May 22 00:00:01 server CROND[23517]: (username) CMD (/usr/bin/mysqldump -u username -p'password' MyDatabase > /backup/CronBackup/MyDatabaseBackup.sql)
May 22 10:30:01 server CROND[17670]: (username) CMD (/usr/bin/mysqldump -u username -p'password' --single-transaction MyDatabase > /backup/CronBackup/MyDatabaseBackup.sql)
May 22 11:00:01 server CROND[18543]: (username) CMD (/usr/bin/mysqldump -u username -p'password' MyDatabase > /backup/CronBackup/MyDatabaseBackup.sql &>/backup/CronBackup/cronBackupLog.log)
所以我知道它至少必须启动。问题是,如果我在终端中运行我尝试的命令,它会执行,几分钟后它就会完成,我有一个新的数据库备份。如果我进入 phpmyadmin、cron 作业,并将其插入每 12 小时或 30 分钟运行一次,或者无论它是什么时候(通常是 12 小时,如您在上面看到的),它就不会完成任何关键任务。
我有兴趣创建一个基于时间的文件名,但可能要等我让基本文件名工作完成后才能创建。
关于如何解决此问题的任何建议都会有所帮助,我感觉我完全错过了一些东西。谢谢。
以 root 用户身份运行与以具有所有 mysql 权限的用户身份运行有什么区别吗?正如我所说,在终端中运行它可以工作,并且它使用高权限用户来运行。我只是不确定 cron 是否需要以 root 身份运行。
跑步
CentOS 6.10
MySQL Ver 14.14 Distrib 5.7.26, for Linux (x86_64) using EditLine wrapper
答案1
我个人总是在 bash 中创建一个备份脚本,然后在 crontab 中使用它,而不是使用 mysqldump 命令本身,这提供了更多的控制和更容易的调试,尽管使用 mysqldump 命令也应该有效。我想知道添加--single-transaction
到 cron 中是否有帮助。
/usr/bin/mysqldump -u username -p'password' --single-transaction MyDatabase > /backup/CronBackup/MyDatabaseBackup.sql
还要确保 cron 用户有写入该/backup/CronBackup
目录的权限。
这也是一个很好的链接https://www.linode.com/docs/databases/mysql/use-mysqldump-to-back-up-mysql-or-mariadb/