MySQL主從切換的超詳細(xì)步驟
版本:
MySQL-5.7.32+GTID
前言:
本文講述MySQL主從切換流程,切換步驟主要針對(duì)主備正常切換以及主庫宕機(jī)備庫切換兩個(gè)場景,掌握正確的切換流程,可以有效避免切換過程中可能出現(xiàn)的數(shù)據(jù)不一致問題以及提高整體切換的時(shí)間
主從環(huán)境:
場景一:主備正常切換,此場景主要是針對(duì)在主備同步復(fù)制正常的情況下進(jìn)行的主備切換,例如:災(zāi)備演練,計(jì)劃性的主備切換。
切換步驟:
1 切斷應(yīng)用對(duì)主庫的流量
2 主庫備庫設(shè)置只讀
set global read_only=ON; set global super_read_only=ON;
3 查看備庫復(fù)制進(jìn)程狀態(tài)
show slave status\G
確認(rèn)Slave_IO_Running,Slave_SQL_Running狀態(tài)為YES,Seconds_Behind_Master為0
4 比對(duì)主備兩邊的GTID是否一致
獲取主備兩邊的executed_gtid集合,進(jìn)行比對(duì)
select @@global.gtid_executed;
通過GTID_SUBSET函數(shù)進(jìn)行比對(duì)
SELECT GTID_SUBSET(master_gtid_executed, slave_gtid_executed);
若在master_gtid_executed中的GTID,也存在slave_gtid_executed中,則返回true(1),否則返回false(0)
返回一,代表主庫GTID已經(jīng)在從庫完成執(zhí)行過,兩邊是一致的
5 從庫停掉復(fù)制進(jìn)程并清空主從信息
stop slave; reset slave all;
6 從庫關(guān)閉只讀開啟讀寫,轉(zhuǎn)為新主庫
set global read_only=off; set global super_read_only=off;
7 主庫設(shè)置執(zhí)行新主庫的復(fù)制鏈路,轉(zhuǎn)為新備庫,完成主從切換
CHANGE MASTER TO MASTER_HOST='192.168.1.111',MASTER_USER='xxx',MASTER_PORT=3306,MASTER_PASSWORD='xxx',master_auto_position=1 ; start slave; show slave status\G
8 應(yīng)用流量切向新主庫
場景二:主庫宕機(jī)備庫切換為主庫,這種情況主要是在異步模式或者非強(qiáng)一致半同步下,主庫的異常宕機(jī),可能存在數(shù)據(jù)沒有完全同步到從庫的情況,需要去核驗(yàn)追加數(shù)據(jù)。
1 對(duì)于主庫宕機(jī),數(shù)據(jù)庫損壞沒法正常啟動(dòng)時(shí),如果binlog可以獲取,則可以對(duì)binlog進(jìn)行離線分析,獲取差異的數(shù)據(jù)
獲取備庫那邊已經(jīng)執(zhí)行過的gtid set
select @@global.gtid_executed
如果已經(jīng)寫入數(shù)據(jù)的新主庫,不能直接讀取binlog進(jìn)行恢復(fù),因?yàn)榭赡軙?huì)出現(xiàn)數(shù)據(jù)不一致,主鍵沖突等問題,可以從binlog里面排除從庫已經(jīng)執(zhí)行過的gtid并離線解析成sql語句,交給應(yīng)用去分析是否補(bǔ)入數(shù)據(jù)
mysqlbinlog -vv --base64-output=decode-rows --exclude-gtids='1b80feab-4aa6-11ec-9a60-000c29a6e7be:1-10, 2b3039c9-57fa-11eb-b504-000c29ed797a:1-8256287, 3a59d149-d4b8-11eb-8cf6-000c29a6e7b4:1-10, a0a3d4b2-fff8-11eb-a420-000c29a6e7be:1-10011' /opt/mysql/log/nlog.000150 > /tmp/binlog_150_gtid.sql;
如果從庫應(yīng)用還未寫入,未產(chǎn)生新數(shù)據(jù),則可以從binlog里面排除從庫已經(jīng)執(zhí)行過的gtid直接導(dǎo)入追加數(shù)據(jù)
mysqlbinlog --exclude-gtids='1b80feab-4aa6-11ec-9a60-000c29a6e7be:1-10, 2b3039c9-57fa-11eb-b504-000c29ed797a:1-8256287, 3a59d149-d4b8-11eb-8cf6-000c29a6e7b4:1-10, a0a3d4b2-fff8-11eb-a420-000c29a6e7be:1-10011' /opt/mysql/log/nlog.000150 | mysql -uroot -p -S /opt/mysql/3306/data/mysql.sock -P3306
2 對(duì)于主庫宕機(jī),但舊主庫可以重新啟動(dòng)拉起,則在啟動(dòng)后,如果新主庫應(yīng)用還未寫入新數(shù)據(jù),可以將新主庫change master復(fù)制繼續(xù)指向舊主庫,讀取未應(yīng)用的日志恢復(fù);
已經(jīng)寫入數(shù)據(jù)的新主庫,不能直接讀取binlog進(jìn)行恢復(fù),因?yàn)榭赡軙?huì)出現(xiàn)數(shù)據(jù)不一致,主鍵沖突等問題,而是應(yīng)該將數(shù)據(jù)解析成sql語句,讓應(yīng)用去分析是否補(bǔ)入數(shù)據(jù)。
用my2sql在線解析binlog日志獲取sql語句,需要獲取開始的日志號(hào)以及讀取位點(diǎn),讀取位點(diǎn)可以根據(jù)--exclude-gtids排除gtid后解析binlog的開始位置讀取
my2sql -user xxxx -password xxxx -work-type 2sql -start-file /opt/mysql/log/nlog.000150 -start-pos=7940194 --add-extraInfo -output-dir /tmp/my2sql_recover
目錄下會(huì)生產(chǎn)forward+日志號(hào)的文本,里面存放解析出來的sql
總結(jié)
到此這篇關(guān)于MySQL主從切換的文章就介紹到這了,更多相關(guān)MySQL主從切換內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何安裝綠色版MySQL Community Server 5.7.16并實(shí)現(xiàn)遠(yuǎn)程登錄
這篇文章主要介紹了安裝綠色版MySQL Community Server 5.7.16并實(shí)現(xiàn)遠(yuǎn)程登錄的方法,需要的的朋友參考下2017-07-07MySQL使用innobackupex備份連接服務(wù)器失敗的解決方法
這篇文章主要為大家詳細(xì)介紹了MySQL使用innobackupex備份連接服務(wù)器失敗的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02淺談mysql雙層not exists查詢執(zhí)行流程
本文主要介紹了淺談mysql雙層not?exists查詢執(zhí)行流程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06MySQL skip-character-set-client-handshake導(dǎo)致的一個(gè)字符集問題
這篇文章主要介紹了MySQL skip-character-set-client-handshake導(dǎo)致的一個(gè)字符集問題,需要的朋友可以參考下2014-07-07