mysqldump 是 MySQL 官方邏輯備份工具,產出 SQL 文字檔,跨版本、跨平台相容性佳。
| 需求 | 指令範例 | 關鍵參數說明 |
|---|---|---|
| 整個資料庫 | mysqldump -u root -p db_name > db_backup.sql |
預設包含建表與資料 |
| 單一資料表 | mysqldump -u root -p db_name table_name > table_backup.sql |
指定表名即可 |
| 多個指定表 | mysqldump -u root -p db_name t1 t2 t3 > tables_backup.sql |
表名以空格分隔 |
| 僅匯出結構 | mysqldump -u root -p -d db_name > schema_only.sql |
-d / --no-data |
| 僅匯出資料 | mysqldump -u root -p -t db_name > data_only.sql |
-t / --no-create-info |
| 加上 DROP TABLE | mysqldump -u root -p --add-drop-table db_name > with_drop.sql |
匯入前自動清理舊表 |
| 壓縮輸出 | mysqldump -u root -p db_name | gzip > db_backup.sql.gz |
管道配合 gzip 節省空間 |
| 遠端資料庫 | mysqldump -h remote_host -u root -p db_name > remote_backup.sql |
-h 指定主機 |
| 指定字元集 | mysqldump --default-character-set=utf8mb4 -u root -p db_name > backup.sql |
避免編碼錯誤 |
# 生產環境標準備份(單線程、一致性、壓縮)
mysqldump --single-transaction --routines --triggers --events \
--default-character-set=utf8mb4 --quick --compress \
-u backup_user -p db_name | gzip > backup_$(date +%F).sql.gz
--single-transaction:InnoDB 熱備份關鍵,不鎖表--routines --triggers --events:包含預存程序、觸發器、事件--quick:逐行讀取,避免大結果集佔記憶體--compress:客戶端與伺服器傳輸壓縮# 進入 mysql 再執行
mysql -u root -p
mysql> CREATE DATABASE IF NOT EXISTS db_name CHARACTER SET utf8mb4;
mysql> USE db_name;
mysql> SOURCE /path/to/backup.sql;
或直接管道導入:
mysql -u root -p db_name < backup.sql
# 壓縮檔直接導入
zcat backup.sql.gz | mysql -u root -p db_name
LOAD DATA INFILE '/path/to/data.csv'
INTO TABLE table_name
CHARACTER SET utf8mb4
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;
FILE 權限與 secure_file_priv 目錄配合mysqlimport -u root -p --local --fields-terminated-by=',' \
--fields-enclosed-by='"' --lines-terminated-by='\n' \
--ignore-lines=1 db_name /path/to/table_name.csv
SET FOREIGN_KEY_CHECKS=0; ALTER TABLE t DISABLE KEYS;,匯入後重建max_allowed_packet=1G、innodb_buffer_pool_size 臨時調大SELECT COUNT(*) FROM tableCHECKSUM TABLE table建立標準化備份/還原 SOP,定期演練還原流程,才能在災難發生時從容應對。