天天看點

mysql 重新主從複制

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;