我想使用cron作业自动备份数据库,并且要使用指示备份日期的动态文件名。
flow strict
但是似乎不起作用。我检查它显示的cron日志。
* * * * * mysqldump -udbuser -pdbpassword mydb > /backups/mydb.`date +"%Y-%m-%d"`.sql
该命令似乎没有完全执行。我该如何解决?
答案 0 :(得分:1)
Cronjobs无法理解这些变量。 以下是对我有用多年的php脚本备份。它以sql备份并直接压缩。
$dbFile = '/data/Backup/backup-'.date('Ymd').'.sql.gz';
$dbHost = 'localhost'; // Database Host
$dbUser = 'username'; // Database Username
$dbPass = 'password'; // Database Password
exec( 'mysqldump --host="'.$dbHost.'" --user="'.$dbUser.'" --password="'.$dbPass.'" --add-drop-table "databasename" | gzip > "'.$dbFile.'"' );
下面是cronjob
* * * * * /usr/bin/php /path_to_backup_script/backup.php
答案 1 :(得分:0)
很抱歉没有为您的问题提供摘录答案,但是您可以尝试以下方法:
-将此命令粘贴到bash文件中(例如:/tmp/backup.sh):
#!/bin/bash
export TIME=$(date +'%Y%m%d')
export DATABASEHOST=192.168.100.10
export SCHEMA="db01 db02"
export DBPORT="3306"
export DBPS=$(echo 'password')
export BACKUPDIR=$(echo '/backup')
ERR=0
backup()
{
for i in $SCHEMA;
do
echo $TIME >> /tmp/db_tar_backup_err.log
cd $BACKUPDIR
mysqldump -ubackup -p$DBPS -h $DATABASEHOST -P $DBPORT --single-transaction --routines --triggers $i > db_${i}_$TIME.sql
tar -czPf db_${i}_$TIME.tar.gz db_${i}_$TIME.sql 2>> /tmp/db_tar_backup_err.log || ERR=1
find db_${i}_$TIME.sql -delete
done
}
backup()
-创建crontab条目:
0 20 * * * /bin/sh /tmp/backup.sh
说明: 您的脚本将按照SCHEMA变量的顺序备份数据库db01,db02,并使用tar在20:00对其进行压缩