# 單庫完整備份(含結構+數據,單事務一致性視圖)
mysqldump -u backup_user -p --single-transaction --routines --triggers --events \
--master-data=2 --flush-logs --hex-blob \
phpbb_db > /backup/mysql/phpbb_db_$(date +%F).sql
# 壓縮存儲(節省 70%+ 空間)
mysqldump -u backup_user -p --single-transaction phpbb_db | gzip > /backup/mysql/phpbb_db_$(date +%F).sql.gz
# 僅備份結構
mysqldump -u backup_user -p --no-data phpbb_db > /backup/mysql/phpbb_db_struct_$(date +%F).sql
關鍵參數:
--single-transaction:InnoDB 熱備核心,利用 MVCC 獲取一致性快照,無需鎖表。--master-data=2:輸出 CHANGE MASTER TO 註釋,記錄 Binlog 位點,便於從庫搭建/增量恢復。--flush-logs:備份瞬間切換 Binlog,配合增量備份窗口劃分。--hex-blob:二進制列十六進制導出,避免字符集問題。#!/bin/bash
# restore_test.sh
DB=phpbb_db
DATE=$(date -d 'yesterday' +%F)
gunzip -c /backup/mysql/${DB}_${DATE}.sql.gz | mysql -u root -p${ROOT_PWD} test_restore_${DATE}
# 校驗行數
mysql -u root -p${ROOT_PWD} -e "SELECT TABLE_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test_restore_${DATE}';"
# 清理
mysql -u root -p${ROOT_PWD} -e "DROP DATABASE test_restore_${DATE};"
ide-scsi 模擬(Grub kernel ... hdc=ide-scsi)。| 工具 | 用途 | 安裝 |
|---|---|---|
| dvd+rw-tools | growisofs 燒錄、dvd+rw-format 格式化 | 源碼編譯或 RPM |
| cdrtools | mkisofs 製作 ISO、readcd 讀取 ISO、cdrecord 燒 CD | 源碼編譯 |
| cdrdao | DAO 模式燒錄,控制磁道間隙 | RPM |
# 1. 製作 ISO 鏡像(排除臨時文件)
mkisofs -o /tmp/backup_$(date +%Y%m).iso -V "MySQL_Backup_$(date +%Y%m)" \
-J -r -exclude-list /backup/exclude.txt /backup/mysql/
# 2. 燒錄 DVD+R/RW(growisofs 自動處理多會話)
growisofs -Z /dev/dvd=/tmp/backup_$(date +%Y%m).iso -speed=4
# 3. 驗證
md5sum /tmp/backup_$(date +%Y%m).iso
readcd dev=/dev/dvd f=/tmp/verify.iso
md5sum /tmp/verify.iso
# 兩者 MD5 一致即成功
MySQL_Backup_202401_Full、MySQL_Backup_202401_Inc_01。# 每小時增量同步到備份服務器
rsync -avz --delete --bwlimit=10000 \
-e "ssh -i /root/.ssh/backup_key" \
/backup/mysql/ backup_user@192.168.1.100:/mnt/nas/mysql_backup/
cwRsync 或 DeltaCopy (rsync GUI)。# 啟用 Binlog (my.cnf)
[mysqld]
log-bin = /var/log/mysql/mysql-bin
binlog_format = ROW
expire_logs_days = 14
max_binlog_size = 100M
# mysqlbinlog 導出增量
mysqlbinlog --start-datetime="2024-01-15 00:00:00" \
--stop-datetime="2024-01-16 00:00:00" \
/var/log/mysql/mysql-bin.000123 > /backup/binlog/inc_20240115.sql
| 層級 | 頻率 | 保留 | 介質 | RTO | RPO | 工具 |
|---|---|---|---|---|---|---|
| 本地全量 | 每日 02:00 | 14 天 | 本地磁盤 | <30 分鐘 | 24h | mysqldump + gzip |
| 本地增量 | 每小時 | 7 天 | 本地磁盤 | <15 分鐘 | 1h | mysqlbinlog |
| DVD 歸檔 | 月度 | 永久 | DVD+R | 數小時 | 1 月 | mkisofs + growisofs |
| 遠程同步 | 每小時 | 30 天 | NAS/異地服務器 | <1 小時 | 1h | rsync over SSH |
「3-2-1 原則」落地:3 份副本(本地全量+增量、遠程同步、DVD 歸檔),2 種介質(磁盤+光盤),1 份異地(遠程/異地 DVD)。中小站點無磁帶庫時,DVD+R 歸檔成本極低(單盤 <1 元,4.7GB 存數月增量),配合 rsync 遠程同步,即可構建企業級備份體系。核心動作:每日驗證 mysqldump 可恢復、每月驗證 DVD 可讀、每季驗證異地可拉取。