MySQL一主二從復制環境切換主從庫


假設有一個一主二從的環境,當主庫M出現故障時,需要將其中一個從庫S1切換為主庫,同時將S2指向新的主庫S1,如果可能,需要將故障的主庫M修復並重置為新的從庫。

搭建一主二從復制環境可參考:mysql5.7主從復制配置——讀寫分離實現。 

1、環境信息;
Mater:130.168.0.25
Slave1:130.168.0.13
Slave2:130.168.0.27

2、配置MySQL一主二從
2.1、查詢master(主服務器)的狀態
show master status;

2.2、配置slave1(從服務器)
stop slave;
flush logs;
change master to master_host='130.168.0.25',master_user='backup',master_password='123456',master_log_file='mysql-bin.000009',master_log_pos=2438;
start slave;
show slave status;

2.3、配置slave2(從服務器)
stop slave;
flush logs;
change master to master_host='130.168.0.25',master_user='backup',master_password='123456',master_log_file='mysql-bin.000009',master_log_pos=2438;
start slave;
show slave status;

從上得知,配置slave1、slave2是一樣的,在此忽略;不懂配置可以參考 mysql5.7主從復制配置——讀寫分離實現

3、模擬主庫Master宕機,slave1升級為Master,slave2保持不變,使slave1和slave2進行數據同步,把 130.168.0.25 mysql進程關閉;
mysql> shutdown;
Query OK, 0 rows affected (0.01 sec)

mysql> system service mysql.server status;
ERROR! MySQL is not running, but lock file (/var/lock/subsys/mysql) exists
mysql>

4、確保從庫都執行了relay log的全部更新,在每個從庫上執行stop slave io_thread,然后檢查show processlist的輸出,狀態是Slave has read all relay log; waiting for more updates,表示更新都執行完畢;

5、在從庫Slave1上,執行stop slave來停止從服務,然后執行reset master重置成主庫;
mysql> show master status;
Empty set (0.00 sec)

mysql> stop slave;
Query OK, 0 rows affected (0.00 sec)

mysql> reset master;
Query OK, 0 rows affected (0.00 sec)

在Slave1上創建備份專用帳戶,backup用戶跟Mater創建的備份賬戶一致。
mysql> GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO 'backup'@'%' IDENTIFIED BY '123456';

6、檢查從庫Slave1的log-bin是否打開,沒打開則打開;
7、刪除從庫Slave1上的master.info和relay-log.info,否則下次重啟則按照從庫啟動();
8、在Slave2上,執行stop slave停止從庫服務,然后執行change master to重新指向主庫slave1,再執行start slave啟動從庫;
mysql> stop slave;
Query OK, 0 rows affected (0.01 sec)

mysql> change master to master_host='130.168.0.13'; #130.168.0.13為Master機
Query OK, 0 rows affected (0.02 sec)

mysql> start slave;
Query OK, 0 rows affected (0.02 sec)

stop slave;
flush logs;
change master to master_host='130.168.0.13',master_user='backup',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=154; 
start slave;
show slave status;


9、檢查Slave2的狀態,發現已經指向新的主庫Slave1;
show slave status

主要查看以下兩項:
Slave_IO_Running: Yes
lave_SQL_Running: Yes

Slave_IO及Slave_SQL進程必須正常運行,即YES狀態,否則都是錯誤的狀態(如:其中一個NO均屬錯誤)。
以上操作過程,主從服務器配置完成。

通過Navicat驗證Slave1和Slave2是否可以數據同步。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM