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

MySQL 備份原理深度解析:邏輯備份 vs 物理備份、mysqldump/mydumper/xtrabackup 架構圖解

     編輯:MySQL 綜合教學

MySQL 備份原理深度解析:從冷備份到熱備份的演進

備份是資料安全最後防線,衡量指標:RPO(恢復點目標,能恢復到幾點)、RTO(恢復時間目標,花多久恢復)。本文系統剖析四大備份流派原理、優缺點與生產避坑。

一、冷備份

停庫 → 拷貝 datadir → 啟庫。簡單但**生產環境不可用**(需停服)。

二、快照備份

利用 LVM copy-on-write 對整個邏輯卷建立瞬間一致性視圖(類似 InnoDB MVCC 但層面在檔案系統)。

  • 優點:秒級建立、不阻塞寫入、適合防誤操作快速回滾。
  • 缺點:僅本地有效,磁碟損壞則快照也損;需結合 Binlog 做時間點恢復(PITR)。

LVM 快照原理

三、邏輯備份

透過 SQL 查詢導出資料(INSERT 語句),跨版本、跨平台相容性佳。

1. mysqldump(官方單執行緒)

關鍵參數:

  • --single-transaction:啟動事務快照讀(僅 InnoDB 有效),獲取一致性視圖。
  • --master-data=2:輸出 Binlog 位點註釋,便於 PITR/主從搭建。

執行流程:

  1. FLUSH TABLES WITH READ LOCK (FTWRL) → 全域讀鎖
  2. 啟動快照讀(InnoDB MVCC)
  3. 備份非 InnoDB 表(.frm/.MYD/.MYI)
  4. 釋放 FTWRL
  5. 逐表備份 InnoDB 表(利用快照讀,不阻塞寫入)
  6. 完成

mysqldump 流程

痛點: 單執行緒慢;FTWRL 持有時間取決於非 InnoDB 表大小(含 mysql 系統表),大表時阻塞寫入久。

2. mydumper(社區多執行緒增強版)

  • 多執行緒並行導出(表級/行級並發)。
  • 一致性保障:同樣依賴 FTWRL 獲取全域位點,非 InnoDB 表在鎖釋放前備份完;InnoDB 表各執行緒共享同一快照位點。

mydumper 流程

四、物理備份

直接拷貝資料檔 + Redo Log,速度最快,適合大數據量。

xtrabackup / innobackupex(Percona 開源神器)

核心流程:

  1. 啟動 Redo Log 拷貝執行緒(從最新 checkpoint 開始循序拷貝)
  2. 並行拷貝 .ibd 檔案(InnoDB 表資料)
  3. .ibd 拷貝結束 → FLUSH TABLES WITH READ LOCK 獲取一致性位點
  4. 備份非 InnoDB 表(系統表、.frm)
  5. 等待 Redo Log 拷貝追上最新(此時無新事務提交)
  6. 記錄 Binlog 位點 → 釋放鎖 → 備份結束

xtrabackup 流程

優勢: InnoDB 表幾乎無阻塞;鎖表時間極短(僅備份系統表期間)。

五、Backup Lock(Percona 改進,解決 FTWRL 長時間阻塞)

MySQL Server 層引入兩把輕量鎖:

  • LOCK TABLES FOR BACKUP:阻塞非 InnoDB 表更新 + 所有表 DDL,**不阻塞 InnoDB 讀寫**,不被大查詢阻塞。
  • LOCK BINLOG FOR BACKUP:僅阻塞 Binlog 位點推進,允許 DDL/更新直到寫 Binlog 為止。

配合 --backup-locks 參數,xtrabackup 2.4+ / MySQL 5.7+ 可大幅縮短鎖表窗口,業務零感知備份成為可能。

六、選型建議

場景推薦工具理由
小數據量、跨版本遷移、邏輯審計mysqldump標準 SQL 輸出,相容性最好
中大數據量、全 InnoDB、追求速度mydumper / mysqlpump (5.7+)多執行緒並行,邏輯備份加速
大數據量(>500GB)、極低 RTO、InnoDB 為主xtrabackup (innobackupex)物理拷貝最快,InnoDB 近零阻塞
雲盤/存儲支援快照LVM/ZFS/EBS 快照秒級建立,適合頻繁備份、測試克隆

參考資源

  • MySQL 官方手冊:Backup and Recovery
  • Percona 部落格:Backup Locks 介紹
  • 淘寶 MySQL 月報 2016-03
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved