| 方式 | 優點 | 缺點 | 適用場景 |
|---|---|---|---|
mysqldump | 跨版本/平台遷移、可編輯 SQL、支援壓縮 | 速度慢、鎖表久 | 邏輯備份、異構遷移、小/中型庫 |
直接複製檔案 (cp/tar/scp) | 極快、物理級備份 | 需停服務或鎖表、硬體架構需一致 | 大型庫、同架構遷移、檔案系統快照配合 |
mysqlhotcopy (Perl 腳本) | 不停服務、自動鎖表/解鎖、刷新日誌 | 僅 MyISAM、需 Perl 環境 | MyISAM 為主的線上熱備份 |
BACKUP TABLE (SQL) | SQL 介面、可鎖多表 | 僅 MyISAM、不備份索引檔、多表備份間隙可能不一致 | 簡單表級備份 |
| 主從複制 + 從庫備份 | 主庫零影響、可做時間點恢復 (PITR) | 架構複雜、需額外硬體 | 高可用架構、核心業務 |
# 全庫備份 + 壓縮
mysqldump --opt db_name | gzip > /backup/db_name_$(date +%F).sql.gz
# 指定表備份
mysqldump --opt db_name tbl1,tbl2 > tables.sql
# 僅結構
mysqldump -d --add-drop-table db_name > schema.sql
# 遠端直接同步 (無中間檔)
mysqldump --opt db_name | mysql -h remote_host -u root -p db_name
# SSH 通道遠端備份
ssh remote_host "mysqldump --opt db_name" | gzip > local_backup.sql.gz
--opt 等同 --add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset。
# 停服務備份
service mysqld stop
tar czf /backup/mysql_data_$(date +%F).tar.gz /var/lib/mysql
service mysqld start
# 線上只讀鎖定備份 (需另開 session)
mysql> FLUSH TABLES WITH READ LOCK;
# 另開終端複製檔案
cp -r /var/lib/mysql/db_name /backup/
mysql> UNLOCK TABLES;
mysqlhotcopy db_name /backup/ # 自動建立 db_name 子目錄
# 參數:--user --password --host --port --method=scp 遠端複製
LOCK TABLES t1 READ, t2 READ;
BACKUP TABLE t1, t2 TO '/backup/db';
UNLOCK TABLES;
# 還原
RESTORE TABLE t1, t2 FROM '/backup/db';
不複製 .MYI 索引檔,還原時自動重建。
.frm、ibdata*、ib_logfile*、表空間配置檔mysqldump --single-transaction 獲得一致性視圖 (無需鎖表)MySQL 無 RENAME DATABASE,兩種變通:
mysqldump old_db > dump.sql; mysqladmin create new_db; mysql new_db < dump.sql; mysqladmin drop old_db (通用)mv /var/lib/mysql/old_db /var/lib/mysql/new_db (僅 MyISAM,需同步更新 mysql.db、tables_priv、columns_priv、host 表)