溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

MySQL主從切換怎么實現(xiàn)

發(fā)布時間:2022-09-23 15:19:05 來源:億速云 閱讀:149 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹“MySQL主從切換怎么實現(xiàn)”,在日常操作中,相信很多人在MySQL主從切換怎么實現(xiàn)問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”MySQL主從切換怎么實現(xiàn)”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

版本:

MySQL-5.7.32+GTID

前言:

本文講述MySQL主從切換流程,切換步驟主要針對主備正常切換以及主庫宕機備庫切換兩個場景,掌握正確的切換流程,可以有效避免切換過程中可能出現(xiàn)的數(shù)據(jù)不一致問題以及提高整體切換的時間

主從環(huán)境:

MySQL主從切換怎么實現(xiàn)

場景一:主備正常切換,此場景主要是針對在主備同步復制正常的情況下進行的主備切換,例如:災(zāi)備演練,計劃性的主備切換。

切換步驟:

 1 切斷應(yīng)用對主庫的流量

 2 主庫備庫設(shè)置只讀

set global read_only=ON;
set global super_read_only=ON;

3 查看備庫復制進程狀態(tài)

show slave status\G

MySQL主從切換怎么實現(xiàn)

確認Slave_IO_Running,Slave_SQL_Running狀態(tài)為YES,Seconds_Behind_Master為0

4 比對主備兩邊的GTID是否一致

獲取主備兩邊的executed_gtid集合,進行比對

select @@global.gtid_executed;

MySQL主從切換怎么實現(xiàn)

通過GTID_SUBSET函數(shù)進行比對

SELECT GTID_SUBSET(master_gtid_executed, slave_gtid_executed);

若在master_gtid_executed中的GTID,也存在slave_gtid_executed中,則返回true(1),否則返回false(0)

MySQL主從切換怎么實現(xiàn)

 返回一,代表主庫GTID已經(jīng)在從庫完成執(zhí)行過,兩邊是一致的

5 從庫停掉復制進程并清空主從信息

stop slave;
reset slave all;

MySQL主從切換怎么實現(xiàn)

6 從庫關(guān)閉只讀開啟讀寫,轉(zhuǎn)為新主庫

set global read_only=off;
set global super_read_only=off;

MySQL主從切換怎么實現(xiàn)

7 主庫設(shè)置執(zhí)行新主庫的復制鏈路,轉(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

MySQL主從切換怎么實現(xiàn)

8 應(yīng)用流量切向新主庫

場景二:主庫宕機備庫切換為主庫,這種情況主要是在異步模式或者非強一致半同步下,主庫的異常宕機,可能存在數(shù)據(jù)沒有完全同步到從庫的情況,需要去核驗追加數(shù)據(jù)。

1 對于主庫宕機,數(shù)據(jù)庫損壞沒法正常啟動時,如果binlog可以獲取,則可以對binlog進行離線分析,獲取差異的數(shù)據(jù)

獲取備庫那邊已經(jīng)執(zhí)行過的gtid set

select @@global.gtid_executed

MySQL主從切換怎么實現(xiàn)

如果已經(jīng)寫入數(shù)據(jù)的新主庫,不能直接讀取binlog進行恢復,因為可能會出現(xiàn)數(shù)據(jù)不一致,主鍵沖突等問題,可以從binlog里面排除從庫已經(jīng)執(zhí)行過的gtid并離線解析成sql語句,交給應(yīng)用去分析是否補入數(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;

MySQL主從切換怎么實現(xiàn)

如果從庫應(yīng)用還未寫入,未產(chǎn)生新數(shù)據(jù),則可以從binlog里面排除從庫已經(jīng)執(zhí)行過的gtid直接導入追加數(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 對于主庫宕機,但舊主庫可以重新啟動拉起,則在啟動后,如果新主庫應(yīng)用還未寫入新數(shù)據(jù),可以將新主庫change master復制繼續(xù)指向舊主庫,讀取未應(yīng)用的日志恢復;

已經(jīng)寫入數(shù)據(jù)的新主庫,不能直接讀取binlog進行恢復,因為可能會出現(xiàn)數(shù)據(jù)不一致,主鍵沖突等問題,而是應(yīng)該將數(shù)據(jù)解析成sql語句,讓應(yīng)用去分析是否補入數(shù)據(jù)。

用my2sql在線解析binlog日志獲取sql語句,需要獲取開始的日志號以及讀取位點,讀取位點可以根據(jù)--exclude-gtids排除gtid后解析binlog的開始位置讀取

MySQL主從切換怎么實現(xiàn)

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

目錄下會生產(chǎn)forward+日志號的文本,里面存放解析出來的sql

MySQL主從切換怎么實現(xiàn)

MySQL主從切換怎么實現(xiàn)

到此,關(guān)于“MySQL主從切換怎么實現(xiàn)”的學習就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI