系統梳理 mysqldump 核心參數、MyISAM/InnoDB 差異備份策略、還原方法、大文件處理、跨版本遷移。
| 參數 | 功能 | 建議場景 |
|---|---|---|
--compatible=name | 兼容模式:ansi, mysql323, mysql40, postgresql, oracle, mssql, db2, maxdb, no_key_options... | 跨版本/異構遷移 |
--complete-insert, -c | 完整 INSERT (含欄位名) | 可讀性、調試、小表 |
--default-character-set=charset | 導出字符集 | 必加 utf8mb4 避免亂碼 |
--disable-keys | INSERT 間禁用/啟用索引 | MyISAM 大表加速導入 |
--extended-insert | 多行 VALUES 批次 INSERT (預設開啟) | 加快導入,大表必開 |
--hex-blob | 二進制欄位十六進制導出 | 含 BLOB/BINARY/GEOMETRY 必加 |
--lock-all-tables, -x | 全局讀鎖 (所有庫所有表) | MyISAM/混合引擎一致性備份 |
--lock-tables | 鎖定當前導出庫的表 | MyISAM (預設開啟) |
--no-create-info, -t | 只導數據,無 CREATE TABLE | 數據遷移、測試數據 |
--no-data, -d | 只導結構,無數據 | 架構遷移、審核 |
--opt | 快捷組合 (add-drop-table, add-locks, create-options, disable-keys, extended-insert, lock-tables, quick, set-charset) | 預設開啟 |
--quick, -q | 流式讀取,不緩存結果集 | 大表必加 防 OOM |
--routines, -R | 導出存儲過程/函數 | 完整備份必加 |
--single-transaction | 事務一致性視圖 (InnoDB) | 線上熱備份必加 |
--triggers | 導出觸發器 (預設開啟) | 完整備份 |
--master-data=2 | 註釋記錄 binlog 位置 | 搭建 Slave 同步必加 |
/usr/local/mysql/bin/mysqldump -u user -p \
--default-character-set=utf8mb4 \
--opt --extended-insert=false \
--triggers -R --hex-blob \
-x db_name > db_name.sql
/usr/local/mysql/bin/mysqldump -u user -p \
--default-character-set=utf8mb4 \
--opt --extended-insert=false \
--triggers -R --hex-blob \
--single-transaction \
db_name > db_name.sql
/usr/local/mysql/bin/mysql -u user -p db_name < db_name.sql
gunzip < db_name.sql.gz | mysql -u user -p db_name
mysql -u user -p
USE db_name;
SOURCE /absolute/path/db_name.sql;
mysqldump -u user -p -h source_host db_name \
--single-transaction --quick --routines --triggers \
| mysql -u user -p -h target_host -C db_name
cd "C:\Program Files\MySQL\MySQL Server 8.0\bin"
# 導出
mysqldump -h localhost -u root -p mydb > "E:\backup\mydb.sql"
# 導入
mysql -h localhost -u root -p mydb < "E:\backup\mydb.sql"
# 或
mysql -u root -p
USE mydb;
SOURCE E:/backup/mydb.sql;
memory_limit = 256M
upload_max_filesize = 200M
post_max_size = 200M
# 並調大執行時間
max_execution_time = 300
max_input_time = 300
重啟 PHP-FPM/Apache 生效。最佳做法:繞過 Web 介面,直接命令行導入無大小限制。
# 例:安裝在 D:\MySQL Server 5.0
D:
cd "D:\MySQL Server 5.0\bin"
# 導出
mysqldump -u root -p db_name > db_name.sql
# 導入
mysql -u root -p db_name < db_name.sql
# 1. 導出時加 SET NAMES
mysqldump -u root -p --default-character-set=gbk db_name | sed '1iSET NAMES utf8mb4;' > backup.sql
# 2. 或導出後修改文件
# 在 CREATE TABLE 後加 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
# 文件開頭加 SET NAMES utf8mb4;
掌握參數組合、引擎差異、字符集處理,mysqldump 就能應對 99% 備份遷移場景。