我正在尝试使用 crontab 自动备份 mysql 数据库,但当我直接在 /etc/crontab 文件中输入命令时,备份创建成功
19 16 * * * root mysqldump -u root -prootroot -h192.168.4.5 radius | gzip > /etc/freeradius/nh.sql.gz
上述命令运行良好,但是当我将此命令放入文件中并从 crontab 执行该文件时,无法创建数据库,这是 /etc/freeradius/backup.sh 的内容
mysqldump -u root -prootroot -h192.168.4.5 radius | gzip > /etc/freeradius/nh.sql.gz
这是 crontab 文件的内容
46 16 * * * root /etc/freeradius/backup.sh
但即使执行了命令,也没有任何事情发生,正如我在系统日志文件中看到的那样
答案1
创建一个文件db_dump.sh
-> 脚本,将数据库内容转储到目录“/backups/”中的单独文件中
#!/bin/bash
mysqldump -x --add-drop-table --all-databases > /backups/mysqldb-`date +%F-%I%p`.sql
/usr/bin/mysql -e 'show databases' | /usr/bin/awk '{print $1}' | /bin/grep -v "^Database$" | /usr/bin/xargs -i{} /usr/bin/mysqldump --single-transaction --opt -Q -r /backups/`date +%F-%I%p`-{}.sql {}
gzip -q /backups/*.sql
确保其db_dump.sh
是可执行的。
添加到 crontab,在我的例子中是每天晚上 10 点:
crontab -e
并添加:
0 22 * * * /db_dump.sh
如需完整备份和详细说明,请访问:https://github.com/zauberware/automated-server-backups
答案2
将其backup.sh
变成适当的 shell 脚本:
#!/bin/bash
mysqldump -u root -prootroot -h192.168.4.5 radius | | gzip > /etc/freeradius/nh.sql.gz
并且不要忘记使用以下命令使其可执行
chmod 700 /etc/freeradius/backup.sh