利用系統 crontab 定時觸發備份腳本,以日期命名封存檔,實現零人工干預的每日備份。
mkdir -p /MySQLdata
/usr/sbin/bakMySQL:
#!/bin/bash
rq=$(date +%Y%m%d)
# 方案 A:物理備份(需停庫或鎖表)
tar zcvf /MySQLdata/mysql$rq.tar.gz /var/lib/mysql
# 方案 B:邏輯備份(線上可用,建議)
mysqldump --all-databases -u root -p'StrongPassword' > /MySQLdata/MySQL$rq.sql
gzip /MySQLdata/MySQL$rq.sql
注意:/var/lib/mysql 為預設資料目錄,實際路徑請用 mysqladmin variables 確認。
chmod +x /usr/sbin/bakMySQL
vi /etc/crontab
# 每天 03:01 執行
01 3 * * * root /usr/sbin/bakMySQL
/etc/rc.d/init.d/crond restart
MySQL20240619.tar.gz / MySQL20240619.sql.gz。find /MySQLdata -mtime +30 -delete 定期清理舊備份。rsync/scp 推送至遠端存儲。物理備份(tar)必須在資料庫靜止狀態下進行(停服務或 FLUSH TABLES WITH READ LOCK),否則還原時會遭遇資料不一致甚至損壞。生產環境強烈建議使用 mysqldump --single-transaction --master-data=2 實現線上熱備份。