# 單庫備份
mysqldump -u user -p db_name > backup.sql
# 帶 DROP TABLE(覆蓋導入安全)
mysqldump --add-drop-table -u user -p db_name > backup.sql
# 壓縮備份(管道 gzip)
mysqldump -u user -p db_name | gzip > backup.sql.gz
# 指定表備份
mysqldump -u user -p db_name table1 table2 > backup.sql
# 多庫備份
mysqldump --databases db1 db2 db3 > multi.sql
# 僅結構
mysqldump --no-data --databases db1 db2 > struct.sql
# 全實例備份
mysqldump --all-databases > all.sql
# 普通還原
mysql -u user -p db_name < backup.sql
# 解壓還原
gunzip < backup.sql.gz | mysql -u user -p db_name
# 跨服務器直接遷移
mysqldump -u user -p db_name | mysql -h remote_host -u user -p db_name
ERROR 1214: The used table type doesn't support FULLTEXT indexes
原因:源表有全文索引,目標引擎(如 InnoDB 早期版本)不支持。
解決:修改配置默認引擎為 MyISAM,或導入前手動調整建表語句引擎。
[mysqld]
default-storage-engine=MyISAM
| 參數 | 作用 |
|---|---|
--add-drop-table | 每表前加 DROP TABLE IF EXISTS,覆蓋導入不報錯 |
--add-locks | INSERT 前後加 LOCK/UNLOCK TABLES,加速導入 |
-c / --complete-insert | INSERT 帶列名,跨庫導入安全 |
--extended-insert / -e | 多行 VALUES,文件更小、導入更快 |
--quick / -q | 不緩衝結果集,直接流式寫文件(大表必加) |
--lock-tables / -l | 備份期間鎖表(MyISAM 必須,InnoDB 用 --single-transaction) |
--no-create-info / -t | 不輸出 CREATE TABLE |
--no-data / -d | 不輸出 INSERT(只導結構) |
--opt | 開啟 --quick --add-drop-table --add-locks --extended-insert --lock-tables(默認開啟) |
--skip-opt | 禁用上述優化,每行單獨 INSERT |
-T / --tab=path | 輸出 .sql (DDL) + .txt (DATA) 文件,需同機器權限 |
-w / --where="..." | 導出條件過濾(如 -w "id>100") |
mysqldump --single-transaction --quick --extended-insert \
--add-drop-table --master-data=2 --flush-logs \
-u backup_user -p db_name | gzip > /backup/db_$(date +%F).sql.gz
--single-transaction:InnoDB 一致性非阻塞備份。--master-data=2:輸出 CHANGE MASTER TO 註釋(從庫搭建用)。--flush-logs:切換 Binlog,便於增量恢復。