2013-11-01 79 views
12

我想在备份MySQL数据库的crontab(ubuntu服务器)中添加一个cronjob。mysqldump不能在crontab中工作

作为root在终端执行脚本效果很好,但插入到crontab中没有任何反应。我试图每分钟运行一次,但没有文件出现在/ var/db_backups文件夹中。

(其他cronjobs正常工作)

这里是的cronjob:

* * * * *的mysqldump -u根-pHERE有我的密码 - 全数据库| gzip>/var/db_backups/database_`date +%d%m%y`.sql.gz

可能是什么问题?

+2

如果你使用'mysqldump'和'gzip'的完整路径怎么办? – fedorqui

+0

你打算这份工作每分钟运行一次吗? –

+1

@fedorqui我试过使用:/ usr/bin/mysqldump/usr/local/gnu/gzip,但它是一样的。 – xspecial

回答

2

检查cron日志(应在/ var/log/syslog中)您可以使用grep将其过滤掉。

grep的CRON在/ var/log/syslog的

你也可以检查你的本地邮箱,看看是否有任何的cron邮件

在/ var /邮件/用户名

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

[email protected]

+0

我尝试了grep CRON,它给了我:CMD(/ usr/bin/mysqldump -u root -pPASSWORD!--all-databases | gzip>/var/db_backups/database _...所以命令执行但不产生输出文件 – xspecial

+0

你是否为root或其他用户设置了cron?也许你的cron用户没有执行mysqldump的权限 – adam187

+0

我还没有setuppet什么东西,只是在一个空白的ubuntu服务器上使用了crontab -e 我该如何设置选项?谢谢 – xspecial

1

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

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

我的命令在 “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 

我希望能有所帮助。

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 
0

创建一个新文件并在那里执行代码以转储到文件位置并将其压缩。通过一个cron

40

你需要逃脱%字符以\

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

我想投票+10!除此之外没有其他来源(许多谷歌搜索结果,网站,论坛帖子)给了我这个结果,这对我来说是个解决方案。如果没有这个答案,我会搜索几个小时... – Basj

+1

我犯的一个错误是在-p和我的密码之间留下空格,应该没有空格,例如-pPASSWORD – Manny265

+0

@Basj:如果我搜索了几个小时直到我找到了这个答案? *头脑风暴* –

-1

您可能还需要重新启动该服务加载任何的更改运行该脚本。

service cron restart 

/etc/init.d/cron restart 
+1

当你'crontab -e'和'save'时,cron会自动安装新的crontab,不需要重新启动 – WeizhongTu

+0

重新启动'crontab'不是必须的,而且实际上对上述问题有误导性 –

0

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

现在惊喜:指向/etc/mysql/debian.cnf的符号链接/root/.my.cnf也被安装。

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

因此,避免此情况的一种解决方案是使用的--no-defaults选项。该选项文件将不会被读取。但是,您通过命令行提供凭据,因此任何能够发出ps的人都可以在备份运行后真正看到密码。因此,最好使用用户名和密码创建自己的选项文件,并通过--defaults-file将此文件传递给mysqldump

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

在命令行root工程运行通过sudomysqldump,只是因为sudo通常不改变$HOME,所以.my.cnf没有那么找到。当作为cronjob运行时,它是。

0

我正在尝试相同的,但我发现转储是用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中记下上面的命令。

我希望这可以帮助别人。