實驗環境:
- MySQL 5.7.25
- Redhat 6.10
前面我們建立了資料庫并建立相關的對象
- 資料庫
- 表
- 存儲過程
- 函數
- 觸發器
- 事件
今天的内容為--masterr-data的使用
1. --master-data
該參數用于将主庫的bin-log資訊寫入到dump檔案中,即目前檔案名(filename)和位置(position),用于主從複制的搭建
相當于執行了一次 show master;

他有2個值可供選擇
--master-data=1會将change master 語句寫入dump檔案中
在從庫導入後,配置主從無需再指定檔案名和位置
--master-data=2會将change master 語句寫入dump檔案中,隻不過會被注釋掉
在從庫導入後,配置主從需要指定檔案名和位置
建議使用該值
其他除非指定--single-transaction開啟,這個參數會将--lock-all-tables開啟
2. 使用--master-data=2備份資料庫
備份所有資料庫mysqldump -h127.0.0.1 -usystem -p123456 --single-transaction --set-gtid-purged=OFF --all-databases --master-data=2 --triggers --events --routines> /tmp/all_master.sql
備份test資料庫 mysqldump -h127.0.0.1 -usystem -p123456 --single-transaction --set-gtid-purged=OFF --databases test --master-data=2 --triggers --events --routines> /tmp/test_all_master.sql
2. 内容解析
2.1 版本資訊
第一行是mysqldump的版本
這裡為10.13的版本
第二三行顯示主機名為127.0.0.1
資料庫版本為5.7.25
接下來為一些系統變量的設定
注意這裡 不是注釋 ( 是MySQL的多行注釋符)
它表示如果MySQL的版本大于4.1.1 則執行相應的語句
2.2 master-data資訊
可以看出多了change master語句
同時是被注釋掉的
2.3 資料庫和表的資訊
接下來是備份資料庫的語句
Current Database :test 代表目前進行的是mysql資料庫
後面跟的是建資料庫的語句(CREATE DATABASE test)
如果不存在的話(IF NOT EXISTS),如果存在也不會删除
之後使用該資料庫(use test)
接下來是表結構相關的(Table structure for table)
如果已經有該表則先删除(DROP TABLE IF EXISTS)
之後是建立mysql資料庫下表的表結構的語句(Create TABLE )
2.4 表資料的備份
接下來是表資料的備份(Dumping data for table)
首先鎖定表不讓其他程序寫(LOCK TABLE WRITE)
然後使MySQL停止更新非唯一索引(ALTER TABLE DISABLE KEYS),這樣能加快插入速度
之後将資料轉換成insert語句(INSERT INTO)
之後重建立立丢失的索引(ALTER TABLE ENABLE KEYS)
最後釋放鎖(UNLOCK TABLES)
直到該資料庫所有的表導出完畢後進行下一個資料庫
2.5 備份events
接下來是備份事件
導出事件(Dumping events for database 'test')
2.6 備份routines
MySQL中的routines 代表存儲過程和函數
導出routines(Dumping routines for database 'test')
之後是詳細的建立語句
2.7 結束備份
最後是備份的完成日期
3. 總結
可以看出在備份全庫的時候使用--master-data有如下内容
- 導出master資訊
- 建立資料庫(如果不存在)
- 使用資料庫
- 删除表(如果存在)
- 建表
- 鎖表
- 禁用非唯一索引
- 插入資料
- 啟用非唯一索引(重建索引)
- 釋放鎖
- 導出視圖
- 導出events
- 導出routines(存儲過程和函數)
這裡就是一個完整的備份語句,包含了MySQL所有的内容
今天的内容就到這裡,歡迎檢視
7.mysqldump指令詳解 Part 7- --master-data參數的使用www.zhaibibei.cn