環境:CentOS 6.4 x64、MySQL 5.5.33。備份策略核心:**全量備份 + 二進制日誌增量備份 = 時間點恢復 (PITR)**。
mysqldump -uroot -p \
--lock-all-tables \
--master-data=2 \
--events --routines \
--all-databases > /backup/full_$(date +%F).sql
參數解析:--lock-all-tables 全域讀鎖(MyISAM 溫備)、--master-data=2 記錄 Binlog 位置(註解形式)、--events/routines 含排程/函數。
# 方法一:導出 SQL
mysqlbinlog mysql-bin.000001 > /backup/binlog_$(date +%F).sql
# 方法二:Flush logs 滾動 + 複製檔案
mysql> FLUSH LOGS;
cp /var/lib/mysql/mysql-bin.000001 /backup/
# 增量範圍導出(指定位置)
mysqlbinlog --start-position=14203 --stop-position=14527 mysql-bin.000001 > /backup/inc.sql
# 1. 停服務、清空資料目錄
service mysqld stop
rm -rf /var/lib/mysql/*
# 2. 還原全量
mysql -uroot -p < /backup/full_2024-01-15.sql
# 3. 還原增量
mysql -uroot -p < /backup/inc.sql
# 4. 啟動驗證
service mysqld start
缺點:還原慢、佔空間大、還原後索引需重建、MyISAM 僅溫備。
前提:資料目錄在 LVM 邏輯卷上、Binlog 與資料同卷、sync_binlog=1。
FLUSH TABLES WITH READ LOCK; FLUSH LOGS;SHOW MASTER STATUS; 位置lvcreate -L 100M -s -n mysql-snap /dev/vg/mysqlUNLOCK TABLES;(鎖定時間極短)mount /dev/vg/mysql-snap /mnt/snapcp -a /mnt/snap/* /backup/lvm_full/mysqlbinlog 同方案一yum install -y perl-DBD-MySQL
rpm -ivh percona-xtrabackup-2.4.x.rpm
innobackupex --user=root --password=pass /backup/xtra/
# 輸出目錄:/backup/xtra/2024-01-15_10-30-00/
關鍵檔案:xtrabackup_checkpoints(LSN範圍)、xtrabackup_binlog_info(Binlog位置)、backup-my.cnf。
innobackupex --apply-log /backup/xtra/2024-01-15_10-30-00/
# 回滾未提交事務、同步已提交事務至資料檔,達到一致狀態
# 基於上一次全量/增量
innobackupex --incremental /backup/xtra --incremental-basedir=/backup/xtra/2024-01-15_10-30-00/
# 全量 prepare (redo-only)
innobackupex --apply-log --redo-only /backup/xtra/full_dir/
# 第一次增量合併
innobackupex --apply-log --redo-only /backup/xtra/full_dir/ --incremental-dir=/backup/xtra/inc1_dir/
# 第二次增量合併
innobackupex --apply-log --redo-only /backup/xtra/full_dir/ --incremental-dir=/backup/xtra/inc2_dir/
# 最後完整 prepare(回滾未提交)
innobackupex --apply-log /backup/xtra/full_dir/
service mysqld stop
rm -rf /var/lib/mysql/*
innobackupex --copy-back /backup/xtra/full_dir/
chown -R mysql:mysql /var/lib/mysql
service mysqld start
cat /backup/xtra/inc2_dir/xtrabackup_binlog_info
# mysql-bin.000003 538898
mysqlbinlog --start-position=538898 /var/lib/mysql/mysql-bin.000003 > tail.sql
mysql -uroot -p < tail.sql
| 維度 | mysqldump | LVM 快照 | XtraBackup |
|---|---|---|---|
| 備份類型 | 邏輯 | 物理 | 物理 |
| 鎖定影響 | 全域讀鎖 | 極短全域鎖 | 無鎖(InnoDB) |
| 備份速度 | 慢 | 快 | 快 |
| 還原速度 | 慢 | 快 | 快 |
| 增量支援 | Binlog | Binlog | 原生 LSN |
| 壓縮/網傳 | 管道支援 | 需額外處理 | 內建 --stream/--compress |
| MyISAM 支援 | 完整 | 完整 | 僅溫備 |
| 適用場景 | 小庫/異構遷移 | 大庫/有 LVM | 核心業務/大庫/高可用 |
建議:核心業務首選 XtraBackup,配合 Binlog 實現 PITR;小型專案或跨版本遷移用 mysqldump;有 LVM 基礎設施可考慮快照方案。