mysqldump -u user -p [options] db_name [tbl_name ...] > dump.sql
| 需求 | 指令範例 |
|---|---|
| 備份整庫 | mysqldump -u root -p mydb > mydb_full.sql |
| 備份單表 | mysqldump -u root -p mydb users > mydb_users.sql |
| 僅結構(無資料) | mysqldump -u root -p -d --add-drop-table mydb > schema.sql |
| 壓縮備份 | mysqldump -u root -p mydb | gzip > mydb_$(date +%F).sql.gz |
| 遠程直接遷移 | mysqldump -h src -u u -p db | mysql -h dst -u u -p db |
| 定期刷新測試庫 | mysqldump --add-drop-table prod | mysql test |
--opt:開啟 --add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset(預設開啟)。--single-transaction:InnoDB 熱備份不鎖表(需啟用 binlog)。--master-data=2:記錄 binlog 位置,利於主從同步起點。--where="id > 1000":條件式備份部分資料。--quick:大表逐行輸出,避免記憶體暴增。# 檔案名 = 表名.txt,欄位預設 Tab 分隔
mysqlimport -u root -p --local --fields-terminated-by=',' --fields-enclosed-by='"' mydb users.csv
參數對照 LOAD DATA 子句。
LOAD DATA LOCAL INFILE '/path/file.csv'
INTO TABLE users
FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '\\'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(id, name, email, created_at);
LOCAL:客戶端讀檔傳給伺服器(適合遠程)。REPLACE / IGNORE:主鍵/唯一鍵衝突策略。LOW_PRIORITY:等無讀取鎖才寫入。(col1, col3, col5) 對應檔案欄位,彈性應對結構差異。# 檔案 batch.sql 含多條 SQL,每行以 ; 結尾
mysql -u root -p < batch.sql
適用於:部署腳本、從日誌恢復、自動化 CI/CD。
FLUSH TABLES WITH READ LOCK + cp -R datadir/db /backup/。data 目錄含 ibdata1、ib_logfile*,且版本、配置需相同。| 來源 | 還原指令 |
|---|---|
| mysqldump SQL | mysql -u root -p db < dump.sql 或進入 mysql 後 SOURCE dump.sql; |
| 壓縮檔 | gunzip < dump.sql.gz | mysql -u root -p db |
| 分卷檔 | cat dump_part*.sql | mysql -u root -p db |
| 物理檔案 | 停服務 → 複製回 datadir → 啟動 → mysql_upgrade |
FLUSH LOGS 切換 binlog,配合 --master-data 記錄位置。--single-transaction 避免長時間鎖表。db_YYYYMMDD_HHMM.sql.gz。