原理:MySQL 資料庫 = 資料目錄下的同名子目錄。停止服務或 FLUSH TABLES WITH READ LOCK 後,直接複製目錄即可完成備份/遷移。
# 來源主機
mysqladmin -u root -p flush-tables-with-read-lock
tar czf /backup/db_backup.tar.gz /var/lib/mysql/mydb
mysqladmin -u root -p unlock-tables
# 目標主機
tar xzf db_backup.tar.gz -C /var/lib/mysql/
chown -R mysql:mysql /var/lib/mysql/mydb
chmod 700 /var/lib/mysql/mydb
ibdata*、ib_logfile*。# 完整備份
mysqldump -h host -u root -p --single-transaction --routines --triggers --events db_name > backup.sql
# 僅結構
mysqldump -u root -p -d db_name > schema.sql
# 僅資料
mysqldump -u root -p -t db_name > data.sql
# 純文字資料(每表 .sql + .txt)
mysqldump -T /tmp/export_dir db_name
| 參數 | 作用 |
|---|---|
| --single-transaction | InnoDB 一致性備份(不鎖表) |
| --lock-tables | MyISAM 鎖表備份(預設) |
| --routines/--triggers/--events | 包含存儲過程/觸發器/事件 |
| --quick | 逐行讀取不緩衝,大表必加 |
| --extended-insert | 多值 INSERT,備份檔更小、還原更快 |
| --master-data=2 | 記錄 Binlog 位置,支援時間點恢復 |
| --compress | 客戶端-伺服器傳輸壓縮 |
mysqladmin -h host -u root -p create db_name
mysql -h host -u root -p db_name < backup.sql
# 大檔優化
mysql -h host -u root -p --init-command="SET autocommit=0; SET unique_checks=0; SET foreign_key_checks=0;" db_name < backup.sql
「最簡便」取決於場景。物理複製極快但有相容性限制;myshldump 通用標準、支援熱備與時間點恢復。生產環境建議:主庫採用 XtraBackup 物理熱備 + Binlog 增量,從庫定期 mysqldump 邏輯備份異地存儲,構建多層次備份體系。