首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Linux 下 MySQL 每日全備與增量備份腳本實作

     編輯:MySQL 資料庫相關知識

策略設計

  • 每 7 天一次完整備份(全量)。
  • 每天一次增量備份(二進制日誌)。
  • 資料量小可改為每日全備,省去增量複雜度。

前置條件:啟用二進制日誌

[mysqld]
log-bin

重啟服務生效。FLUSH LOGS 會切換新日誌檔,舊檔歸檔,配合 --delete-master-logs 可自動清理已備份日誌。

完整備份腳本 mysql_full_backup.sh

#!/bin/sh
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
GZDumpFile=$DATE.sql.tgz

# --quick 逐行輸出 --all-databases 全庫 --flush-logs 切換日誌 --delete-master-logs 刪除已備份日誌 --lock-all-tables 全域鎖表
mysqldump --quick --all-databases --flush-logs --delete-master-logs --lock-all-tables > $DumpFile
echo "Dump Done" >> $LogFile

tar czvf $GZDumpFile $DumpFile >> $LogFile 2>&1
echo "[$GZDumpFile] Backup Success!" >> $LogFile
rm -f $DumpFile

# 清理增量備份目錄(全備後增量歸零)
cd $BakDir/daily
rm -f *

echo "Backup Done! Please check $BakDir"
ls -al $BakDir

增量備份腳本 mysql_inc_backup.sh

#!/bin/sh
mysqladmin flush-logs

DATADIR=/var/lib/mysql
BAKDIR=/backup/mysql/daily
HOSTNAME=$(uname -n)

cd $DATADIR
FILELIST=$(cat $HOSTNAME-bin.index)

# 計算日誌檔總數
COUNTER=0
for f in $FILELIST; do COUNTER=$((COUNTER+1)); done

# 複製除最新檔外的所有舊日誌
NextNum=0
for f in $FILELIST; do
    NextNum=$((NextNum+1))
    if [ $NextNum -eq $COUNTER ]; then
        echo "skip latest $f"
    else
        dest=$BAKDIR/$(basename $f)
        if [ -e $dest ]; then
            echo "skip exist $f"
        else
            cp $f $dest
            echo "copied $f"
        fi
    fi
done
echo "backup mysql binlog ok"

自動化部署

  1. 建立 /root/.my.cnf 存放帳密(chmod 600):
    [mysqladmin]
    user=root
    password=你的密碼
    [mysqldump]
    user=root
    password=你的密碼
  2. 加入 crontab:
    完整備份:每週日 03:00 → 0 3 * * 0 /path/mysql_full_backup.sh
    增量備份:週一至六 03:00 → 0 3 * * 1-6 /path/mysql_inc_backup.sh

遙控傳輸與保留策略

腳本未含遠端傳輸(scp/rsync/FTP)與舊備份刪除邏輯,請依實際需求自行擴充。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved