一:環境 192.168.1.100 master 192.168.1.101 slave1 192.168.1.102 slave2 slave1,slave2都是連在master上。 二:模擬主故障 關閉master實例 service MySQL stop 此時,slave1,slave2上show slave status\G都會發現錯誤: Last_IO_Error: error reconnecting to master'RepUser@192.168.1.100:3307' - retry-time: 60 retries: 1 IO進程和sql進程狀態: Slave_IO_Running: Connecting(該狀態表示會一直嘗試重連主,若是主正常了,該進程狀態會自動變成Yes) Slave_SQL_Running: Yes 此時,master不能提供讀寫服務。咱們想將其中最新的slave提高爲主。 三:切換步驟 3.1確保全部的relay log所有讀取完畢 在每一個從庫上執行: stopslave io_thread; showprocesslist; 直到看到Slave has read all relay log; waitingfor more updates,則表示從庫更新都執行完畢了 或者經過show slave status查看 Slave_SQL_Running_State: Slave has read allrelay log; waiting for more updates 3.2 選擇新的主庫 對比選擇Relay_Master_Log_File,Exec_Master_Log_Pos最大的做爲新的主庫,這裏咱們選擇slave1爲新的主庫 其實,若是兩個從IO進程一直都是正常,沒有落後於主,且relay log都已經重放完成,兩個從是同樣的,選擇哪一個均可以。 這裏選擇slave1做爲新主。 3.3 進行相應配置 登錄slave1,執行stop slave; 並進入數據庫目錄,刪除master.info和relay-log.info文件(刪除前,能夠先備份下這倆文件); 配置my.cnf文件,開啓log-bin,若是有log-slaves-updates=1和read-only=1則要註釋掉,而後重啓slave1. 3.4 reset master 在slave1上reset master,會從新生成二進制日誌。 mysql> reset master; Query OK, 0 rows affected (0.02 sec) mysql> show binary logs; +------------------+-----------+ | Log_name | File_size | +------------------+-----------+ | mysql-bin.000001 | 154 | +------------------+-----------+ 1 row in set (0.00 sec) 3.5建立用於同步的用戶 若是slave1徹底同步master的話,這步能夠省略。 3.6 slave2指向slave1 [sql] view plain copy mysql> change master to master_user='RepUser',master_password='beijing',master_host='192.168.1.101',master_port=3307,master_log_file='mysql-bin.000001',master_log_pos=154; Query OK, 0 rows affected, 2 warnings (0.00 sec) mysql> start slave; Query OK, 0 rows affected (0.00 sec) 3.7 將程序寫IP改爲slave1的IP 程序裏以前記錄的是master的IP,如今master宕機,故需改IP。