# 1. 創建目錄
mkdir -p /backup/mysqlbackup
# 2. 編寫腳本 /backup/mysqlautobackup.sh
#!/bin/bash
FILENAME=$(date +%Y%m%d)
/usr/local/mysql/bin/mysqldump --opt 數據庫名 -u用戶名 -p密碼 | gzip > /backup/mysqlbackup/db_${FILENAME}.sql.gz
# 3. 賦權並加入 crontab
chmod +x /backup/mysqlautobackup.sh
crontab -e
# 每天 01:01 執行
01 01 * * * /bin/bash /backup/mysqlautobackup.sh
# 4. 重啟 cron
/etc/init.d/crond restart
注意:-u 與用戶名、-p 與密碼之間無空格。
#!/bin/bash
# 全量備份腳本 qbk.sh
scriptsDir=/usr/sbin
user=root; userPWD="你的密碼"
database="目標庫"
bakDir=/backup/mysql
LogFile=${bakDir}/mysqlbak.log
DATE=$(date +%Y%m%d)
echo "--------------------------" >> $LogFile
echo $(date +"%y-%m-%d %H:%M:%S") >> $LogFile
cd $bakDir
DumpFile=${DATE}.sql.gz
mysqldump --flush-logs -u$user -p$userPWD --quick $database | gzip > $DumpFile
echo "Dump Done" >> $LogFile
echo "[$DumpFile] Backup Success!" >> $LogFile
# 清理 35 天前的每日備份
dailyDir=${bakDir}/daily_backup
find $dailyDir -name "daily*" -type f -mtime +35 -exec rm {} \;
#!/bin/bash
# 增量備份腳本 zbk.sh
user=root; userPWD="密碼"; database="目標庫"
mysqlBinDir=/usr/local/mysql/bin
mysqlDataDir=/usr/local/mysql/var
dailyDir=/backup/mysql/daily_backup
DATE=$(date +%Y%m%d)
logFile=${dailyDir}/mysql${DATE}.log
# 1. 刷新日志,產生新 binlog 文件
${mysqlBinDir}/mysqladmin -u$user -p$userPWD flush-logs
# 2. 刪除 3 天前的 binlog (PURGE MASTER LOGS)
TIME=$(date -d "3 day ago" +%Y%m%d%H%M%S)
mysql -u$user -p$userPWD -e "PURGE MASTER LOGS BEFORE '${TIME}'"
# 3. 讀取索引文件獲取 binlog 列表
filename=$(cat ${mysqlDataDir}/mysql-bin.index | awk -F'/' '{print $2}')
# 4. 導出 1 天前至今的增量 SQL
StartTime=$(date -d "1 day ago" +"%Y-%m-%d %H:%M:%S")
for i in $filename; do
${mysqlBinDir}/mysqlbinlog -u$user -p$userPWD -d $database --start-datetime="${StartTime}" ${mysqlDataDir}/$i | gzip >> ${dailyDir}/daily${DATE}.sql.gz
done
# 5. 清理 32 天前的增量備份
find $dailyDir -name "*.gz" -type f -mtime +32 -exec rm {} \;
mysqldump --flush-logs 確保備份一致性並產生新 binlog 切分點。ROW 格式 binlog,配合 mysqlbinlog --start-datetime 精確提取增量。gunzip < backup.sql.gz | mysql -u... -p... --force 恢復流程,驗證備份可用性。