首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL mysqldump 數據導出全攻略:常用場景、核心參數與跨實例遷移實戰

     編輯:MySQL 綜合教學

MySQL mysqldump 數據導出全攻略:常用場景、核心參數與跨實例遷移實戰

mysqldump 是 MySQL 官方邏輯備份工具,參數極其豐富。本文梳理 13 個高頻使用場景,附帶完整參數速查表,幫助 DBA 快速定位所需命令。

一、 基礎語法與測試環境

mysqldump [OPTIONS] database [tables]
mysqldump [OPTIONS] --databases DB1 [DB2...]
mysqldump [OPTIONS] --all-databases

測試數據準備

CREATE DATABASE db1 DEFAULT CHARSET utf8;
USE db1;
CREATE TABLE a1(id int); INSERT INTO a1 VALUES(1),(2);
CREATE TABLE a2(id int); INSERT INTO a2 VALUES(2);
CREATE TABLE a3(id int); INSERT INTO a3 VALUES(3);

CREATE DATABASE db2 DEFAULT CHARSET utf8;
USE db2;
CREATE TABLE b1(id int); INSERT INTO b1 VALUES(1);
CREATE TABLE b2(id int); INSERT INTO b2 VALUES(2);

二、 13 個高頻導出場景實戰

1. 導出所有資料庫(含系統庫)

mysqldump -uroot -proot --all-databases > /tmp/all.sql

2. 導出指定多個資料庫

mysqldump -uroot -proot --databases db1 db2 > /tmp/user.sql

導出多庫

3. 導出單庫指定表

mysqldump -uroot -proot --databases db1 --tables a1 a2 > /tmp/db1.sql

輸出內容無 CREATE DATABASE 判斷,僅含 DROP TABLE、CREATE TABLE、INSERT。

導出指定表

4. 條件導出(單表 Where 過濾)

mysqldump -uroot -proot --databases db1 --tables a1 --where="id=1" > /tmp/a1.sql

條件導出

5. 導出後生成新 Binlog(-F)

mysqldump -uroot -proot --databases db1 -F > /tmp/db1.sql

配合主從切換場景,確保備份位點對應新 binlog 文件。

6. 僅導出表結構(--no-data / -d)

mysqldump -uroot -proot --no-data --databases db1 > /tmp/db1.sql

7. 跨服務器直連導入(管道流式傳輸)

# h1 -> h2,目標庫 db2 必須預先存在
mysqldump --host=h1 -uroot -proot --databases db1 | mysql --host=h2 -uroot -proot db2

# 啟用壓縮傳輸(-C),跨公網/低帶寬場景極大提速
mysqldump --host=192.168.80.137 -uroot -proot -C --databases test | mysql --host=192.168.80.133 -uroot -proot test

8. 記錄從庫 Binlog 位點(--dump-slave)

在從庫執行,相當於 SHOW SLAVE STATUS。

-- 1: 輸出 CHANGE MASTER 命令
mysqldump -uroot -proot --dump-slave=1 --databases db1 > /tmp/db1.sql
dump-slave=1
dump-slave=1 詳情

-- 2: 註釋形式輸出
mysqldump -uroot -proot --dump-slave=2 --databases db1 > /tmp/db1.sql
dump-slave=2

會隱式開啟 --lock-all-tables,除非指定 --single-transaction。

9. 記錄主庫 Binlog 位點(--master-data)

在主庫執行,相當於 SHOW MASTER STATUS。參數含義同 --dump-slave。

10. 保證一致性備份(--single-transaction)

mysqldump -uroot -proot --single-transaction --quick --databases db1 > /tmp/db1.sql
  • 啟動事務快照(REPEATABLE READ),不阻塞寫入,僅適用 InnoDB。
  • 與 --lock-tables 互斥。
  • 大表必加 --quick 避免緩存撐爆內存。

11. 鎖表備份(--lock-tables / -l)

MyISAM 表適用。InnoDB 優先用 --single-transaction。多庫備份時無法保證庫間邏輯一致性。

12. 導出存儲過程/函數/觸發器(--routines / -R)

mysqldump -uroot -proot --routines --databases db1 > /tmp/db1.sql

13. 優化導出性能(--opt 默認開啟)

--opt 等價於:--add-drop-table --add-locks --create-options --quick --extended-insert --lock-tables --set-charset --disable-keys。
大表導出建議顯式組合:--single-transaction --quick --extended-insert --set-charset。

三、 核心參數速查表(節選高頻)

參數短參說明
--all-databases-A導出全部庫
--databases-B導出指定庫列表
--tables覆蓋 -B,指定導出表
--where-w條件過濾(單表)
--no-data-d僅結構
--no-create-info-t僅數據
--single-transaction事務一致性備份(InnoDB)
--lock-tables-l鎖表備份(MyISAM)
--extended-insert-e多值 INSERT,加速導入
--quick-q流式輸出,不緩存結果集
--compress-C壓縮傳輸
--master-data記錄主庫 binlog 位點
--dump-slave記錄從庫 binlog 位點
--routines-R導出存儲過程/函數
--triggers導出觸發器(默認開啟)
--events-E導出事件調度器
--hex-blob二進制字段十六進制導出
--ignore-table忽略指定表(可重複)

四、 生產環境備份腳本範例

#!/bin/bash
# 每日全量備份,排除系統庫
FILE="mysql_$(date +%F)"
BACKDIR="/mysqlbackup"
mysql -uroot -e 'show databases' | egrep -v "Database|information_schema|performance_schema|mysql|sys" \
| xargs mysqldump -uroot --single-transaction --quick --extended-insert --databases > $BACKDIR/$FILE.sql
# 壓縮存儲
gzip $BACKDIR/$FILE.sql
# 保留 7 天
find $BACKDIR -mtime +7 -name "*.gz" -delete

五、 總結

  • 邏輯備份首選 mysqldump,物理備份看 xtrabackup。
  • InnoDB 生產環境強制使用 --single-transaction --quick。
  • 跨機房遷移用 管道流式 + 壓縮,避免落地文件二次傳輸。
  • 備份腳本納入監控,驗證備份文件大小、校驗和、還原演練。

作者:pursuer.chen | 博客:https://www.cnblogs.com/chenmh

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved