32

我正在尝试在备份 mysql 数据库的 crontab(ubuntu 服务器)中添加一个 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

可能是什么问题?

4

9 回答 9

101

您需要使用 \ 转义 % 字符

mysqldump -u 'username' -p'password' DBNAME > /home/eric/db_backup/liveDB_`date +\%Y\%m\%d_\%H\%M`.sql
于 2014-06-16T02:41:30.060 回答
9

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

命令 :

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

注意: 1)您可以根据需要更改时间设置。我每天都在上面的命令中设置。

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

3) 在 Crontab 中写下上述命令。

我希望这可以帮助别人。

于 2017-08-17T11:15:46.680 回答
6

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

grep CRON /var/log/syslog

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

/var/邮件/用户名

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

MAILTO=your@mail.com

于 2013-11-01T16:52:11.720 回答
3

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

我希望它有所帮助。

于 2013-11-02T17:12:41.357 回答
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
于 2014-05-07T11:28:55.993 回答
1

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

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

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

于 2019-06-20T03:51:15.960 回答
0

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

于 2014-05-13T10:44:27.113 回答
0

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

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

该文件是使用或时自动读取的选项文件。所以基本上你有两次登录凭据 - 在那个文件和命令行中。这就是我遇到的问题。mysqlmysqldump

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

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

从命令行运行mysqldumpvia可以正常工作,只是因为通常不会更改,所以找不到。当作为 cronjob 运行时,它是。sudorootsudo$HOME.my.cnf

于 2015-08-22T01:19:56.073 回答
-3

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

service cron restart

或者

/etc/init.d/cron restart
于 2015-01-19T21:05:52.913 回答