1.先進入主庫,進行鎖表,防止資料寫入
mysql> flush tables with read lock;
2.進行資料備份
/usr/local/mysql/bin/mysqldump -uroot -p --quick --routines --master-data=2 --single-transaction -A > test.sql
--quick, -q # 不緩沖查詢,直接導出到标準輸出。預設為打開狀态,使用--skip-quick取消該選項。
--routines, -R # 導出存儲過程以及自定義函數。
--master-data # 該選項将binlog的位置和檔案名追加到輸出檔案中。如果為1,将會輸出CHANGE MASTER 指令;如果為2,輸出的CHANGE MASTER指令前添加注釋資訊。該選項将打開--lock-all-tables 選項,除非--single-transaction也被指定(在這種情況下,全局讀鎖在開始導出時獲得很短的時間;其他内容參考下面的--single-transaction選項)。該選項自動關閉--lock-tables選項。
--single-transaction # 該選項在導出資料之前送出一個BEGIN SQL語句,BEGIN 不會阻塞任何應用程式且能保證導出時資料庫的一緻性狀态。它隻适用于多版本存儲引擎,僅InnoDB。本選項和--lock-tables 選項是互斥的,因為LOCK TABLES 會使任何挂起的事務隐含送出。要想導出大表的話,應結合使用--quick 選項。
3.檢視MASTER_LOG_POS
# grep "CHANGE MASTER TO MASTER_LOG_FILE" test.sql
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000010', MASTER_LOG_POS=179567203 ;
4.停止從庫
mysql> stop slave;
5.從庫還原資料
mysql> source test.sql;
6.從新設定主從同步
CHANGE MASTER TO MASTER_HOST='172.16.2.216',MASTER_USER='repl',MASTER_PASSWORD='123456',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000010', MASTER_LOG_POS=179567203;
7.從新開啟主從同步
mysql> start slave;
8.檢視主從同步狀态
mysql> show slave status\G
9.主庫解除鎖
mysql> UNLOCK TABLES;