我正在尝试在 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
可能是什么问题?
您需要使用 \ 来转义 % 字符
mysqldump -u 'username' -p'password' DBNAME > /home/eric/db_backup/liveDB_`date +\%Y\%m\%d_\%H\%M`.sql
我也尝试过同样的操作,但我发现转储是用 0KB 创建的。因此,我了解了节省我时间的解决方案。
命令:
0 0 * * * mysqldump -u 'USERNAME' -p'PASSWORD' DATEBASE > /root/liveDB_`date +\%Y\%m\%d_\%H\%M\%S`.sql
您可以根据您的要求更改时间设置。我已经在上面的命令中设置了每一天。
确保在单引号 (') 内输入您的用户名、密码和数据库。
在 Crontab 中写下上面的命令。
检查cron日志(应该在/var/log/syslog中)您可以使用grep将其过滤掉。
grep CRON /var/log/syslog
您也可以检查您本地的邮箱,看看是否有任何 cron 邮件
/var/mail/用户名
您还可以在 crontab 文件中设置其他接收邮件
或者,您可以创建自定义命令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
希望对您有所帮助。
好的,我遇到了类似的问题并且能够解决它。
在您的情况下,您可以将该 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
本地主机mysql备份: 0 1 * * * /usr/local/mysql/bin/mysqldump -uroot -ppassword --opt 数据库 > /path/to/directory/filename.sql
(-p 和密码或 -u 和用户名之间没有空格 - 将 root 替换为正确的数据库用户名。)
这对我有用。 -p 和密码或 -u 和用户名之间没有空格
创建一个新文件并执行其中的代码以转储到文件位置并将其压缩。通过 cron 运行该脚本
我在 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 运行时,确实如此。
您可能还需要重新启动服务才能加载任何更改。
service cron restart
或
/etc/init.d/cron restart