MySQL 備份恢復是 DBA 核心技能。本文對比 **邏輯備份 (mysqldump 類)** 與 **物理備份 (文件複製/快照/xtrabackup 類)** 兩大技術路線,剖析原理、優劣勢、適用場景、實戰代碼架構與遷移建議,助你根據業務規模選型最優方案。
CREATE TABLE,數據導出為 INSERT 語句(或 CSV/制表符格式)。max_allowed_packet、net_read_timeout 限制。--single-transaction 可熱備但仍有快照開銷)。<?php
// 核心流程:遍歷表 → mysqldump 單表 → 壓縮存儲 → 記錄元數據
function backup_database($db, $tables = '*') {
$cmd = "mysqldump -h$host -u$user -p$pass --single-transaction --routines --triggers --events";
if ($tables !== '*') $cmd .= " $db " . implode(' ', $tables);
else $cmd .= " $db";
$cmd .= " | gzip > $backup_dir/$db_" . date('Ymd_His') . ".sql.gz";
exec($cmd, $output, $ret);
return $ret === 0;
}
// 恢復:解壓 → source 導入
function restore_database($sql_gz_file, $target_db) {
$cmd = "zcat $sql_gz_file | mysql -h$host -u$user -p$pass $target_db";
exec($cmd, $output, $ret);
return $ret === 0;
}
?>
.ibd、.frm、.MYD、.MYI、redo log、undo log 等)。| 工具 | 類型 | 熱備支援 | 增量備份 | 壓縮 | 適用引擎 | 備註 |
|---|---|---|---|---|---|---|
| cp/tar/rsync | 冷備 | ❌ 需停庫 | ❌ | ❌ | 全引擎 | 最簡陋,僅適用停機維護窗口 |
| LVM/ZFS 快照 | 準熱備 | ⚠️ 需全局鎖瞬間 | ❌ | ✅ (快照固有) | 全引擎 | 鎖表毫秒級,需文件系統支援 |
| MySQL Enterprise Backup | 商業熱備 | ✅ InnoDB 熱備 | ✅ | ✅ | InnoDB 為主 | 官方商業工具,功能最全 |
| Percona XtraBackup | 開源熱備 | ✅ InnoDB/XtraDB 熱備 | ✅ (基於 LSN) | ✅ | InnoDB/XtraDB | **社區首選**,MyISAM 只能溫備 |
| Mariabackup | 開源熱備 | ✅ | ✅ | ✅ | MariaDB/InnoDB | XtraBackup 分支,支援 MariaDB 新特性 |
| 維度 | 邏輯備份 (mysqldump) | 物理備份 (XtraBackup/LVM) |
|---|---|---|
| 備份速度 | 慢 (MB/s 級) | 極快 (GB/s 級,受限於磁盤 I/O) |
| 恢復速度 | 極慢 (需重建索引) | 快 (僅複製文件+apply log) |
| 跨版本遷移 | ✅ 優秀 | ❌ 版本/配置強綁定 |
| 部分備份/恢復 | ✅ 靈活 | ❌ 僅支持庫/表級(需解析 .ibd) |
| 對業務影響 | 長時間鎖/長事務 | 毫秒級鎖 (FTWRL) 或無鎖 |
| 存儲空間 | 較大 (SQL 文本+索引重建) | 較小 (原始頁面+壓縮) |
| 適用數據量 | < 50-100 GB | > 100 GB、TB 級首選 |
SELECT, RELOAD, LOCK TABLES, REPLICATION CLIENT, PROCESS。**邏輯備份重「通用、靈活」,物理備份重「速度、大規模」**。現代 MySQL 架構中,**XtraBackup 為主、mysqldump 為輔(結構導出/小表遷移/跨版本)** 是最佳組合。建立分級備份策略、堅持恢復演練、接入監控體系,才是數據安全的終極保障。