# 備份單庫(含 CREATE DATABASE)
mysqldump -u root -p --databases db_name > /backup/db.sql
# 備份單庫(不含 CREATE DATABASE,還原前需手建庫)
mysqldump -u root -p db_name > /backup/db.sql
# 備份單表
mysqldump -u root -p db_name table1 > /backup/table1.sql
# 備份多庫
mysqldump -u root -p --databases db1 db2 > /backup/multi.sql
關鍵差異:--databases 導出包含 CREATE DATABASE,還原無需預建庫;無此參數則需先 CREATE DATABASE 再 USE。
# 未登入 MySQL
mysql -u root -p db_name < /backup/db.sql
# 已登入 MySQL
mysql> USE db_name;
mysql> SOURCE /backup/db.sql;
-- 導出(可控制格式)
SELECT * FROM table_name
INTO OUTFILE '/tmp/data.txt'
FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '\\'
LINES TERMINATED BY '\r\n' STARTING BY '>';
-- 導入
LOAD DATA INFILE '/tmp/data.txt'
INTO TABLE table_name
FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '\\'
LINES TERMINATED BY '\r\n' STARTING BY '>';
格式對照表:
| 選項 | 導出示例 | 導入對應 |
|---|---|---|
| FIELDS TERMINATED BY | ',' | 字段分隔符 |
| ENCLOSED BY | '"'" | 字段包裹符 |
| ESCAPED BY | '\\' | 轉義符 |
| LINES TERMINATED BY | '\r\n' | 行結束符 |
| STARTING BY | '>' | 行前綴 |
mysqldump -T /tmp/export_dir db_name table_name -u root -p
# 產生 table_name.txt (數據) + table_name.sql (建表)
同樣支援 --fields-terminated-by 等格式參數。
mysql -u root -p -e "SELECT * FROM table_name" db_name > /tmp/data.txt
mysql -u root -p --html -e "SELECT * FROM table_name" db_name > /tmp/data.html
mysql -u root -p --xml -e "SELECT * FROM table_name" db_name > /tmp/data.xml
mysqlimport -u root -p db_name /tmp/data.txt
# 表名 = 文件名(不含擴展名),需預建表結構
支援同 LOAD DATA 的格式參數。
| 場景 | 推薦方案 | 理由 |
|---|---|---|
| 全庫備份/遷移 | mysqldump --databases | 含 DDL、跨版本兼容、單文件易傳輸 |
| 大表增量同步 | SELECT INTO OUTFILE + LOAD DATA | 可控格式、並行導入、速度最快 |
| 異構數據庫導入 | mysqldump -T / mysqlimport | 純文本、易清洗轉換 |
| 報表導出給非技術人員 | mysql --html/--xml | 直接可讀、無需工具 |
SELECT ... INTO OUTFILE 需 FILE 權限,文件寫在 Server 端 secure_file_priv 目錄;LOAD DATA INFILE 同樣受 secure_file_priv 限制;mysqlimport 為客戶端工具,讀取本地文件,無 FILE 權限要求。