首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 備份工具全景圖:mysqldump、LVM 快照、tar、XtraBackup 選型指南

     編輯:MySQL 綜合教學

MySQL 備份工具全景圖:mysqldump、LVM 快照、tar、XtraBackup 選型指南

MySQL 備份分為邏輯備份(SQL 語句)與物理備份(資料檔)。本文對比四大主流工具在原理、速度、一致性、適用場景上的差異,幫助你根據資料量、RTO/RPO 選出最佳方案。

工具對比總表

工具類型熱備份速度空間恢復速度適用場景
mysqldump邏輯InnoDB ✅ (單事務)慢小慢<50GB、需跨版本遷移、部分導出
LVM 快照物理需鎖表(秒級)極快大極快大數據量、檔案系統支援 LVM、可容忍秒級鎖
tar/cp物理❌ 冷備份中大快離線維護窗口、簡單遷移
XtraBackup物理✅ 完全熱備快中快生產核心庫、大數據量、增量備份、PITR

1. mysqldump 官方邏輯備份

MyISAM(溫備份)

mysqldump --databases test --lock-all-tables --flush-logs \
  > /backup/test_$(date +%F_%H-%M).sql

InnoDB(熱備份)

mysqldump --databases test --single-transaction --flush-logs --master-data=2 \
  > /backup/test_$(date +%F_%H-%M).sql
  • 恢復時關閉 Binlog:SET sql_log_bin=0; SOURCE backup.sql; 避免重放寫入 Binlog 浪費空間與時間。

2. LVM 快照備份(需 LVM 卷管理)

# 1. 主庫加全域讀鎖並切 Binlog
mysql -e "FLUSH TABLES WITH READ LOCK; FLUSH LOGS;"

# 2. 建立快照卷(1G 大小,唯讀)
lvcreate -L 1G -s -n data-snap -p -r /dev/myvg/mydata

# 3. 釋放鎖
mysql -e "UNLOCK TABLES;"

# 4. 掛載快照並打包
mount -r /dev/myvg/data-snap /mnt/snap
tar -czf /backup/mysql_snap_$(date +%F).tar.gz -C /mnt/snap .

# 5. 卸載移除快照
umount /mnt/snap
lvremove -f /dev/myvg/data-snap

恢復:停服務 → 替換資料目錄 → 啟動 → 用 Binlog 推進到故障點(PITR)。

3. tar 打包冷備份(簡單粗暴)

# 窗口 1:加鎖
mysql -e "FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS;"
# 記錄 File/Position,窗口保持不退出

# 窗口 2:打包
cd /var/lib/mysql
tar -zcvf /backup/mysql_$(date +%F).tar.gz mysql

# 窗口 1:解鎖
mysql -e "UNLOCK TABLES;"

4. Percona XtraBackup 企業級物理熱備份

核心原理

  • 邊拷貝 .ibd 檔案,邊監聽 redo log 變更頁面。
  • 備份完成後 --prepare 階段重放 redo log 使資料頁一致(類似 Crash Recovery)。

常用命令

# 全量備份
xtrabackup --backup --target-dir=/backup/full_$(date +%F) --user=root --password=xxx

# 增量備份(基於上次全量)
xtrabackup --backup --target-dir=/backup/inc_$(date +%F) \
  --incremental-basedir=/backup/full_2024-01-01 --user=root --password=xxx

# 準備/合併
xtrabackup --prepare --apply-log-only --target-dir=/backup/full_2024-01-01
xtrabackup --prepare --target-dir=/backup/inc_2024-01-02 --incremental-basedir=/backup/full_2024-01-01

# 恢復
systemctl stop mysqld
xtrabackup --copy-back --target-dir=/backup/full_2024-01-01
chown -R mysql:mysql /var/lib/mysql
systemctl start mysqld

優勢

  • 完全不鎖表、支援增量、支援單表備份(需 innodb_file_per_table=ON)、壓縮/加密/流式傳輸。

選型建議

  1. < 50 GB、需邏輯可讀、跨版本遷移 → mysqldump
  2. > 100 GB、極低 RTO、生產核心庫 → XtraBackup(首選)
  3. 檔案系統已用 LVM、可接受秒級全域鎖 → LVM 快照
  4. 有明確停機窗口、極簡運維 → tar 冷備份

建議採用「全量 XtraBackup + 增量 XtraBackup + Binlog PITR」分層策略,兼顧恢復速度與資料安全。

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