一、mysqldump:邏輯備份標準工具
基本語法
mysqldump -u user -p db_name [table_name] > dump.sql
常用場景
| 需求 | 命令範例 |
| 整庫備份 | mysqldump -u root -p abc > abc.sql |
| 單表備份 | mysqldump -u root -p abc users > abc_users.sql |
| 僅結構(無資料) | mysqldump -u root -p -d --add-drop-table abc > abc_db.sql |
| 遠端備份 | mysqldump -h 10.1.1.1 -u root -p db > dump.sql |
| 壓縮備份 | mysqldump -u root -p db | gzip > db.sql.gz |
還原流程
# 1. 建立目標庫
mysql -u root -p -e "CREATE DATABASE db_name;"
# 2. 導入
mysql -u root -p db_name < dump.sql
# 或進入 mysql 後
SOURCE /path/to/dump.sql;
二、LOAD DATA / SELECT INTO OUTFILE:大量資料高速搬遷
適用於表結構完全一致、同一伺服器或掛載共享儲存的場景,速度比 mysqldump 快 10~50 倍。
導出:SELECT INTO OUTFILE
-- 預設 tab 分隔、換行分隔
SELECT * FROM hx_9enjoy INTO OUTFILE '/tmp/9enjoy.txt';
-- 自訂格式(CSV 風格)
SELECT * FROM hx_9enjoy
INTO OUTFILE '/tmp/9enjoy_hx.txt'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n';
-- 條件導出
SELECT * FROM hx_9enjoy WHERE id < 100 INTO OUTFILE '/tmp/9enjoy_100.txt';
導入:LOAD DATA INFILE
-- 預設格式
LOAD DATA INFILE '/tmp/9enjoy.txt' INTO TABLE hx_9enjoy;
-- 對應自訂格式
LOAD DATA INFILE '/tmp/9enjoy_hx.txt' INTO TABLE hx_9enjoy
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n';
-- 指定字符集(防亂碼)
LOAD DATA INFILE '/tmp/9enjoy.txt' INTO TABLE hx_9enjoy CHARACTER SET gbk;
三、權限與限制必讀
- FILE 權限:執行帳號需有
FILE 權限,且 MySQL 進程能讀寫目標目錄
- secure_file_priv:MySQL 5.6+ 預設限制導入導出目錄,查看:
SHOW VARIABLES LIKE 'secure_file_priv';,僅允許該目錄下操作
- 不可覆蓋:導出檔案已存在會報錯,需先刪除或更名
- 無法直接壓縮:需搭配管道
| gzip 或導出後壓縮
- Windows 路徑:用正斜線
/ 或雙反斜線 \\
四、實戰範例:cacti 資料庫遷移
# 導出
cd /usr/local/src
/usr/local/mysql/bin/mysqldump -uroot -p123456 cacti > cacti.sql
# 導入
/usr/local/mysql/bin/mysql -uroot -p
mysql> CREATE DATABASE cacti;
mysql> USE cacti;
mysql> SOURCE /usr/local/src/cacti.sql;
五、工具選型建議
| 場景 | 推薦工具 | 理由 |
| 日常備份、跨版本遷移、異構同步 | mysqldump | 通用性最強、支援 WHERE 過濾、壓縮、單表 |
| 單表千萬行+、同結構同機器/共享儲存 | LOAD DATA / OUTFILE | 速度最快、繞過 SQL 解析層 |
| 增量備份、PITR | binlog + mysqlbinlog | 精確到秒級恢復 |
| 物理備份、大實例 | xtrabackup / mydumper | 非阻塞、多線程、支援增量 |