DROP TABLE、DELETE 無 WHERE)。| 維度 | mysqldump (邏輯備份) | 直接複製檔案 (實體備份) |
|---|---|---|
| 原理 | 透過 Server 導出 SQL | OS 層面複製 datadir |
| 跨版本/平台 | 支援 | 僅限相同版本、相同架構、MyISAM 表 |
| 線上熱備份 | 支援 (--single-transaction) | 需鎖表或停機,否則資料不一致 |
| 速度 | 較慢 | 極快 (受限磁碟 I/O) |
| 檔案可攜性 | 純文字 SQL,極佳 | 二進位檔,受限 |
MyISAM 表 在 MySQL 3.23+ 採用機器無關格式,實體複製可跨平台;InnoDB 需同版本且注意 ibdata 共享表空間。
還原全量備份 → 重放二進位日誌 → 恢復至崩潰前時間點dbname_YYYY-MM-DD.sql.gz,避免 backup1、backup2 這類無資訊名稱。gzip 壓縮,設定過期刪除(如保留 7 天全量 + 30 天增量)。mysqldump --opt --single-transaction --flush-logs --master-data=2 db_name | gzip > db_$(date +%F).sql.gzmysqldump db_name table1 table2 > subset.sqlmysqldump --add-drop-table --opt db_name | mysql -h slave_host db_name--quick:逐行輸出,防 OOM。--compress:跨網路傳輸壓縮。--delayed-insert:還原時用 INSERT DELAYED 減少對線上查詢衝擊。FLUSH TABLES WITH READ LOCK;datadir 目標資料庫目錄:cp -r /var/lib/mysql/db_name /backup/UNLOCK TABLES;my.cnf 相容、innodb_data_file_path 相同。mysql 系統庫,啟動加 --skip-grant-tables。mysql db_name < backup.sql 或直接複製檔案回 datadir。mysqlbinlog binlog.000001 | mysql --one-database db_namemysqladmin flush-privileges 重載權限。sed/awk 或 MySQL_find_rows)。SELECT ... INTO OUTFILE 導出單表,複製回主庫。MySQL 3.23+ 引入 Replication(主從同步),可作為即時備份與讀寫分離基礎。但複製不等於備份:主庫 DROP TABLE 會同步到從庫,仍需定期全量備份配合二進位日誌實現 PITR。