資料表遺損、損壞、系統崩潰、甚至人為誤操作(如用文字編輯器直接修改表檔)都可能導致資料災難。完善的備份策略是最後防線。
| 維度 | mysqldump | 直接複製檔案 |
|---|---|---|
| 操作層級 | 透過 MySQL Server 協作 | 檔案系統層級,Server 外部 |
| 一致性保障 | 自動鎖表/交易保證一致 | 需自行確保無寫入操作(鎖表或停服務) |
| 速度 | 較慢 | 極快 |
| 可移植性 | 純文字 SQL,跨平台、跨架構 | 僅限 MyISAM 表跨架構;ISAM 僅同架構 |
| 適用場景 | 定期備份、遷移、跨版本升級 | 大量資料、同架構快速備份 |
MySQL 3.23+ 引入 MyISAM,機器無關格式,滿足兩條件即可跨架構直接複製:
資料庫名_YYYY-MM-DD,如 samp_db.1999-10-02mysqldump db | gzip > backup.gzmysqldump samp_db > /usr/archives/mysql/samp_db.1999-10-02
# MySQL Dump 6.0
# Host: localhost Database: samp_db
# Server version 3.23.2-alpha-log
# Table structure for table 'absence'
CREATE TABLE absence (
student_id int(10) unsigned DEFAULT '0' NOT NULL,
date date DEFAULT '0000-00-00' NOT NULL,
PRIMARY KEY (student_id,date)
);
# Dumping data for table 'absence'
INSERT INTO absence VALUES (3,'1999-09-03');
INSERT INTO absence VALUES (5,'1999-09-03');
INSERT INTO absence VALUES (10,'1999-09-08');
...
mysqldump samp_db | gzip > /usr/archives/mysql/samp_db.1999-10-02.gz
mysql samp_db < /usr/archives/mysql/samp_db.1999-10-02
# 或壓縮檔:
zcat /usr/archives/mysql/samp_db.1999-10-02.gz | mysql samp_db
FLUSH TABLES WITH READ LOCK;datadir/資料庫名/ 目錄下所有檔案UNLOCK TABLES;僅限 MyISAM 表,且需相同 MySQL 版本或支援 MyISAM 的版本。
備份技術同樣適用於跨機器遷移:備份 → 傳輸 → 還原。最常見為跨主機遷移,同機多實例遷移亦適用。