mysqldump 在 crontab 中不起作用

问题描述 投票:0回答:9

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

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

(其他 cronjobs 效果很好)

这是定时任务:

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

可能是什么问题?

mysql cron
9个回答
117
投票

您需要使用 \ 来转义 % 字符

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

9
投票

我也尝试过同样的操作,但我发现转储是用 0KB 创建的。因此,我了解了节省我时间的解决方案。

命令:

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

注释

  1. 您可以根据您的要求更改时间设置。我已经在上面的命令中设置了每一天。

  2. 确保在单引号 (') 内输入您的用户名、密码和数据库。

  3. 在 Crontab 中写下上面的命令。


6
投票

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

grep CRON /var/log/syslog

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

/var/mail/用户名

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

[电子邮件受保护]


4
投票

或者,您可以创建自定义命令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

希望对您有所帮助。


1
投票

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

在您的情况下,您可以将该 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

1
投票

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

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

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


0
投票

创建一个新文件并执行其中的代码以转储到文件位置并将其压缩。通过 cron 运行该脚本


0
投票

我在 Ubuntu 上使用 Percona Server(MySQL 分支)。该软件包(也很可能是常规 MySQL 软件包)附带一个名为

debian-sys-maint
的维护帐户。为了使用此帐户,在安装软件包时会创建凭据;它们存储在
/etc/mysql/debian.cnf

现在令人惊讶的是:指向

/root/.my.cnf
的符号链接
/etc/mysql/debian.cnf
也被安装了。

此文件是选项文件,使用

mysql
mysqldump
时自动读取。因此,基本上,您会在该文件中和命令行中获得两次登录凭据。这就是我遇到的问题。

因此,避免这种情况的一种解决方案是对 --no-defaults

 使用 
mysqldump
 选项。选项文件将不会被读取。但是,您通过命令行提供凭据,因此任何可以发出 
ps
的人都可以在备份运行后实际看到密码。因此,最好使用用户名和密码创建一个自己的选项文件,并通过
mysqldump
 将其传递给 
--defaults-file

您可以使用

mysql_config_editor
或简单地在任何编辑器中创建选项文件。

从命令行通过

mysqldump
运行
sudo
,就像
root
一样有效,只是因为
sudo
通常不会改变
$HOME
,所以此时找不到
.my.cnf
。当作为 cronjob 运行时,确实如此。


-5
投票

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

service cron restart

/etc/init.d/cron restart
© www.soinside.com 2019 - 2024. All rights reserved.