【问题标题】:MySQL dump CronJobMySQL 转储 CronJob
【发布时间】:2014-01-13 07:15:54
【问题描述】:

我正在尝试创建一个每天备份我的 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 中运行。

固定: 我使用了这个链接中的脚本:mysqldump doesn't work in crontab

【问题讨论】:

  • “sudo /home/dev/backup.sh”是否有效?这不是可访问性问题吗?
  • 你可以使用@daily 来代替。将此行放入您的 crontab:“@daily /home/dev/backup.sh”
  • /home/dev/backup.sh 有效。并在 crontab 中输入这一行:@daily /home/dev/backup.sh ?怎么查?
  • 是的,就这么说吧。不知道什么时候触发。

标签: mysql cron


【解决方案1】:

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

例子:

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

【讨论】:

    【解决方案2】:

    我遇到了同样的问题。

    我发现您不能在非交互式脚本中使用命令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

    【讨论】:

    • 它不起作用我得到:su: unrecognized option '--session-command=mysql -u root -p'XXX' -e 'STOP SLAVE SQL_THREAD;'' 用法:su [options] [登录]
    • 哦,它适用于 CentOS linux,你可能有不同的。这肯定会起作用,但脚本需要您的root 密码echo "root_password_goes_here" | sudo -S mysql -u root -p'xxxxx' -e 'STOP SLAVE SQL_THREAD;' 该线程有更多答案askubuntu.com/questions/173924/…
    【解决方案3】:

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

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

    使用这个测试仪的好处是它非常简单,更有可能给你一些结果。它不依赖于您当前的工作目录,这有时可能不是您所期望的。

    【讨论】:

    • 我用了 '42 17 * * * /bin/mail -s "test subject" "mymail@gmail.com"
    • 嗯,这不是我的想法,但很有趣。我在想把它放在一个简单的三行文件中,然后将 cron 指向那个文件。
    • (对不起,因为它以前不工作,我的 unix 有点生锈了。)当我第一次遇到这个问题时,我花了几天时间让它工作。希望这对您有所帮助。
    • 我编辑了我的答案。请再看一遍。我知道我还没有完全解决你的问题,只是给了你一个小工具来帮助你自己。圣诞快乐。
    【解决方案4】:

    让我们从脚本中的傻事开始。

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

    如果您以 root 身份调用脚本,则在没有指定用户(即以 root 身份运行)的情况下使用 sudo 为脚本中的命令添加前缀没有任何用处。

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

    您没有指定备份文件的路径 - 也许它正在将它写入您预期之外的地方?

    (同样,您应该检查是否有任何可执行文件位于 crontab 执行环境的 $PATH 之外的位置)。

    但它不起作用

    ....不是错误消息。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-05
      • 2016-01-09
      • 2014-09-28
      • 2014-04-02
      • 1970-01-01
      • 2011-08-06
      • 2021-10-10
      • 2015-12-13
      相关资源
      最近更新 更多