Mysqldump无法在FreeBSD中使用动态文件名与cron作业一起使用

时间:2018-10-31 04:37:06

标签: mysql cron

我想使用cron作业自动备份数据库,并且要使用指示备份日期的动态文件名。

flow strict

但是似乎不起作用。我检查它显示的cron日志。

* * * * * mysqldump -udbuser -pdbpassword mydb > /backups/mydb.`date +"%Y-%m-%d"`.sql

该命令似乎没有完全执行。我该如何解决?

2 个答案:

答案 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对其进行压缩