mysqldump在crontab中不起作用

时间:2013-11-01 16:36:35

标签: mysql cron mysqldump crontab

我正在尝试在crontab(ubuntu服务器)中添加一个备份mysql数据库的cronjob。

以root身份在终端中执行脚本效果很好,但是在crontab中插入没有任何反应。我尝试每分钟运行一次,但文件夹/ var / db_backups中没有文件。

(其他cronjobs运作良好)

这是cronjob:

  

* * * * * mysqldump -u root -pHERE有我的密码   --all-databases | gzip> / var / db_backups / database_`date +%d%m%y`.sql.gz

可能是什么问题?

9 个答案:

答案 0 :(得分:63)

您需要使用\

转义%字符
mysqldump -u 'username' -p'password' DBNAME > /home/eric/db_backup/liveDB_`date +\%Y\%m\%d_\%H\%M`.sql

答案 1 :(得分:5)

检查cron日志(应该在/ var / log / syslog中)你可以使用grep来过滤它们。

  

grep CRON / var / log / syslog

您也可以查看当地的邮箱,看看是否有任何cron邮件

  

/ var / mail / username

您还可以在crontab文件中设置其他接收邮件

  

MAILTO=your@mail.com

答案 2 :(得分:2)

或者,您可以创建自定义命令 mycommand 。您可以添加更多选项。您必须授予执行权限。

最好有一个文件夹,用于存储所有备份,在这种情况下使用可写文件夹“backup”,例如首先在“你的家”中创建。

“usr / local / bin / mycommand”中的

我的命令

#!/bin/bash
MY_USER="your_user"
MY_PASSWORD="your_pass"
MY_HOME="your_home"
case $1 in 
"backupall")
    cd $MY_HOME/backup
    mysqldump --opt --password=$MY_PASSWORD --user=$MY_USER  --all-databases > bckp_all_$(date +%d%m%y).sql
    tar -zcvf bckp_all_$(date +%d%m%y).tgz bckp_all_$(date +%d%m%y).sql
    rm bckp_all_$(date +%d%m%y).sql;;
*)  echo "Others";;
esac

Cron:每个月的第一天运行。

0 0 1 * * /usr/local/bin/mycommand backupall

我希望它有所帮助。

答案 3 :(得分:2)

我正在尝试相同但我发现转储是用0KB创建的。因此,我了解了节省时间的解决方案。

命令:

0 0 * * * mysqldump -u 'USERNAME' -p'PASSWORD' DATEBASE > /root/liveDB_`date +\%Y\%m\%d_\%H\%M\%S`.sql

注意: 1)您可以根据您的要求更改时间设置。我每天都在上面指挥。

2)确保在单引号(')中输入您的USERNAME,PASSWORD和DATABASE。

3)在Crontab中记下上面的命令。

我希望这有助于某人。

答案 4 :(得分:0)

好的,我遇到了类似的问题,并且能够解决问题。

在您的情况下,您可以将mysqldump命令插入脚本 然后获取正在执行mysqldump命令的用户的配置文件 例如:

. /home/bla/.bash_profile

然后使用mysqldump命令的绝对路径

/usr/local/mysql/bin/mysqldump -u root -pHERE THERE IS MY PASSWORD --all-databases | gzip > /var/db_backups/database_`date +%d%m%y`.sql.gz

答案 5 :(得分:0)

创建一个新文件并在那里执行代码转储到文件位置并压缩它。通过cron运行该脚本

答案 6 :(得分:0)

我在Ubuntu上使用Percona Server(一个MySQL分支)。该软件包(很可能是普通的MySQL软件包)附带一个名为debian-sys-maint的维护帐户。为了使用此帐户,在安装包时会创建凭据;它们存储在/etc/mysql/debian.cnf

现在出人意料:指向/root/.my.cnf的符号链接/etc/mysql/debian.cnf也已安装。

使用mysqlmysqldump时,此文件会自动an option file读取。所以基本上你有两次登录凭证 - 在该文件和命令行。这就是我遇到的问题。

因此,避免这种情况的一种解决方案是对mysqldump使用--no-defaults选项。然后,选项文件将无法读取。但是,您通过命令行提供凭据,因此任何可以发出ps的人都可以在备份运行后实际看到密码。因此,如果您使用用户名和密码创建自己的选项文件并通过--defaults-file将其传递给mysqldump,那么效果最佳。

您可以使用mysql_config_editor或仅在任何编辑器中创建选项文件。

mysqldump通过sudo从命令行root运行,只是因为sudo通常不会更改$HOME,所以.my.cnf然后找不到。当作为cronjob运行时,它是。

答案 7 :(得分:0)

本地主机mysql备份: 0 1 * * * / usr / local / mysql / bin / mysqldump -uroot -ppassword --opt数据库> / path / to /目录/文件名.sql

(-p和密码或-u和用户名之间没有空格-用正确的数据库用户名替换root。)

对我有用。 -p和密码或-u和用户名之间没有空格

答案 8 :(得分:-2)

您可能还需要重新启动服务才能加载任何更改。

service cron restart

/etc/init.d/cron restart