MySQL转储CronJob

时间:2013-12-25 09:20:15

标签: mysql cron

我正在尝试创建一个每天备份我的MySQL奴隶的cron。 backup.sh内容:

#!/bin/bash
#
# Backup mysql from slave
#
#
sudo mysql -u root -p'xxxxx' -e 'STOP SLAVE SQL_THREAD;'
sudo mysqldump -u root -p'xxxxx' ng_player | gzip > database_`date +\%Y-\%m-\%d`.sql.gz 
sudo mysqladmin -u root -p'xxxxx'  start-slave

我通过sudo chmod +x /home/dev/backup.sh使其可执行 并通过以下方式输入crontab

sudo crontab -e

0 12 * * * /home/dev/backup.sh

但它不起作用,如果我只在命令行中运行它,但不在crontab中。

FIXED: 我使用了此链接中的脚本:mysqldump doesn't work in crontab

4 个答案:

答案 0 :(得分:1)

将问题分成两半。首先尝试只发送来自cron作业的电子邮件,看看你是否正在运行它。将上面的内容放在一个文件中,让你的cron作业指向它:

#!/bin/bash

/bin/mail -s "test subject" "yourname@yourdomain" < /dev/null

使用此测试仪的好处在于它非常简单,更有可能为您提供一些结果。它不依赖于您当前的工作目录,有时可能不符合您的预期。

答案 1 :(得分:0)

尝试使用.sh文件中的mysql bin目录的完整链接

示例:

sudo /var/lib/mysql -u root -p'xxxxx' -e 'STOP SLAVE SQL_THREAD;'

答案 2 :(得分:0)

我遇到了同样的问题。

我发现你不能在非交互式脚本中使用命令sudosudo命令会创建一个字段,您可以在其中键入帐户(root)的密码。

如果您登录ssh sudo工作的命令提示符而不输入任何密码,但当另一个程序运行sudo时,它会要求输入密码。

试试这个而不是su命令不需要任何登录,它也会做同样的事情。

su --session-command="mysql -u root -p'xxxxx' -e 'STOP SLAVE SQL_THREAD;'" root
su --session-command="mysqldump -u root -p'xxxxx' ng_player | gzip > database_`date +\%Y-\%m-\%d`.sql.gz" root
su --session-command="mysqladmin -u root -p'xxxxx'  start-slave" root

用你的linux用户名替换root。

修改 查看此主题以获得不同的答案。 https://askubuntu.com/questions/173924/how-to-run-cron-job-using-sudo-command

答案 3 :(得分:0)

让我们从剧本中的愚蠢内容开始。

通过'sudo'运行的唯一命令是,非常好的, only 命令,我希望你可能需要通过sudo运行(取决于目标文件的权限。)

如果以root用户身份调用脚本,则在没有命名用户的情况下使用sudo(即以root身份运行)在脚本中加载命令不起作用。

在典型安装中,mysql,mysqladmin和gzip程序通常可由任何用户执行 - DBMS使用作为参数传递的身份验证凭据对DBMS的命令进行身份验证和授权 - 因此我不希望这里的任何操作,除了可能写入输出文件(取决于其权限)。

您没有为备份文件指定路径 - 也许它正在将其写入您预期的其他位置?

(类似地,您应该检查是否有任何可执行文件位于crontab执行环境的$ PATH中的位置。)

  

但它不起作用

....不是错误消息。

通过cron运行的任何命令的输出都会邮寄给crontab的所有者 - 请阅读你的邮件。