mysql主從切換

來源:互聯網
上載者:User

標籤:mysql   主從   主從切換   

主庫宕機解決方案

假設發生了突發事件,master宕機,現在的需求是要將192.168.1.102提升為主庫,另外一個為從庫

步驟:

1.確保所有的relay log全部更新完畢,在每個從庫上執行stop slave io_thread; show processlist;直到看到Has read all relay log,則表示從庫更新都執行完畢了

2.登陸所有從庫,查看master.info檔案,對比選擇pos最大的作為新的主庫,這裡我們選擇192.168.1.102為新的主庫

3.登陸192.168.1.102,執行stop slave; 並進入資料庫目錄,刪除master.info和relay-log.info檔案(和reset slave all一樣,以非從庫模式啟動);配置my.cnf檔案,開啟log-bin;如果有log-slaves-updates和read-only則要注釋掉,執行reset master;建立用於同步的使用者並授權slave(最好保持與之前主庫的使用者&密碼一致)

5.登入另外一台從庫,執行stop slave停止同步;串連到新的主庫;start slave;;檢查&測試slave是否同步更新


正常切換主從

1.檢查slave同步狀態

在開始切換之前先對主庫進行鎖表:

flush tables with read lock

(在執行完成後生產環境必須等待所有語句執行完成)

在flush tables with read lock成功獲得鎖之前,必須等待所有語句執行完成(包括SELECT)。所以如果有個慢查詢在執行,或者一個開啟的事務,或者其他進程拿著表鎖,flush tables with read lock就會被阻塞,直到所有的鎖被釋放。請看下面的例子:

mysql> show processlist;+----+------+-----------+------+------------+------+-------------------+----------------------------------------------------------------------+| Id | User | Host      | db   | Command    | Time | State             | Info                                                                 |+----+------+-----------+------+------------+------+-------------------+----------------------------------------------------------------------+|  4 | root | localhost | test | Query      |   80 | Sending data      | select count(*) from t t1 join t t2 join t t3 join t t4 where t1.b=0 ||  5 | root | localhost | test | Query      |   62 | Flushing tables   | flush tables with read lock                                          ||  6 | root | localhost | test | Field List |   35 | Waiting for table |                                                                      ||  7 | root | localhost | test | Query      |    0 | NULL              | show processlist                                                     |+----+------+-----------+------+------------+------+-------------------+----------------------------------------------------------------------+4 rows in set (0.00 sec)


等切換完成後可以釋放鎖

unlock tables


1)在master執行:show processlist;

顯示Master has sent all binlog to slave; waiting for binlog to be updated

2)在slave執行:show processlist;

顯示Slave has read all relay log; waiting for the slave I/O thread to update it

mysql> show slave status \G;

檢查IO及SQL線程是否正常,如果為NO表明同步不一致,需要重新將slave同步保持主從資料一致。


正常切換主從/突發情況切換主從,主要步驟

3)停止slave io線程

在slave執行:

mysql> STOP SLAVE IO_THREAD

mysql> SHOW PROCESSLIST;

確保狀態為:has read all relay log

stop slave io_thread執行,停止主從同步的io進程,不再從主庫同步binlog記錄檔;show processlist;確認所有的sql語句是否都執行完畢,確保同步的資料都更新到庫。

以上都執行完成後可以把slave提升為master:


4)提升slave為master

Stop slave;

Reset master;

Reset slave all; 在5.6.3版本之後

Reset slave; 在5.6.3版本之前

備忘:reset slave all 命令會刪除從庫的 replication 參數,之後 show slave status\G 的資訊返回為空白。(與刪除伺服器上master.info和relay-log.info檔案一樣,使下次重啟庫時以非從庫啟動)


查看slave是否唯讀模式:show variables like ‘read_only‘;

唯讀模式需要修改my.cnf檔案,注釋read-only=1並重啟mysql服務。

或者不重啟使用命令關閉唯讀,但下次重啟後失效:set global read_only=off;


##在從庫建立使用者和授權

grant replication slave on *.* to ‘repl‘@‘‘192.168.0.104‘ identified by ‘xxxx‘

##授權的同步處理的使用者和密碼保持與之前的一致

show master status;

##記錄主庫的binlog日誌和pos位置,給其他從庫建立主從使用。


5)將原來master變為slave

在新的slave上重設binlog:

Reset master;

change master to master_host=‘192.168.0.104‘,         ##Master 伺服器Ip

master_port=3306,

master_user=‘repl‘,

master_password=‘xxx‘,

master_log_file=‘master-bin.000001‘,     ##Master伺服器產生的日誌

master_log_pos=000001;          ##之前記錄的主庫pos位置 

start slave;        ##啟動slave

show slave status\G;         ##查看slave狀態


         

 異常切換(主機故障或者宕機)

1)   在salve執行:

stop slave;

reset master;

查看是否唯讀模式:show variables like ‘read_only‘;

唯讀模式需要修改my.cnf檔案,注釋read-only=1並重啟mysql服務。

或者不重啟使用命令關閉唯讀,但下次重啟後失效:set global read_only=off;


查看show slave status \G;

查看show master status \G;


業務應用上修改為主庫IP地址,測試應用串連是否正常。


##reset master直接去掉主從的配置,以單庫模式運行。


 




mysql主從切換

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.