溫馨提示×

溫馨提示×

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

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

怎么將MYSQL的 MHA 的方案升級(jí)到GTID以及binlog server設(shè)置

發(fā)布時(shí)間:2021-12-30 09:11:17 來源:億速云 閱讀:97 作者:柒染 欄目:大數(shù)據(jù)

這篇文章給大家介紹怎么將MYSQL的 MHA 的方案升級(jí)到GTID以及binlog server設(shè)置,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

今天正文

其實(shí)MHA是真沒有什么好說的,一個(gè)成熟的不能在成熟的 MYSQL 高可用的方案。但一般來說大部分企業(yè)部署 MHA 都是配以傳統(tǒng)的復(fù)制方式,而MYSQL 從5.6 開始已經(jīng)進(jìn)入了 GTID 的世界,而MHA 從0.56 也支持了GTID,雖然那個(gè)日本人早就不在給大家升級(jí)MHA 的版本了,但貌似最近一個(gè)白人小哥在繼續(xù)升級(jí)MHA 目前的最新版本是 0.58 。到目前為止沒有任何一款數(shù)據(jù)庫有 MYSQL的高可用的方案多(I am sorry ,其實(shí) PG 的方案也不少)。

所以怎么將MYSQL的 MHA 的方案升級(jí)到 GTID 的方式就可以說說了,其中有一點(diǎn)就是,為什么要多了一個(gè) binlog server 的設(shè)置。

怎么將MYSQL的 MHA 的方案升級(jí)到GTID以及binlog server設(shè)置

我們從上面Yoshinori 的BLOG 中截取了一段

在binlog部分,您可以定義mysqlbinlog流媒體服務(wù)器。當(dāng)MHA執(zhí)行基于GTID的故障轉(zhuǎn)移時(shí),MHA檢查binlog服務(wù)器,如果binlog服務(wù)器記錄的BINLOG在其他從屬服務(wù)器之前,MHA在恢復(fù)之前將來自binlog服務(wù)器的差異binlog事件應(yīng)用到新主服務(wù)器。當(dāng)MHA執(zhí)行基于非gtid(傳統(tǒng))的故障轉(zhuǎn)移時(shí),MHA將忽略binlog服務(wù)器,更多細(xì)節(jié)可以在文檔中找到。

并且其中還提到了支持自定義的mysql binlog location, 在使用GTID 的MYSQL復(fù)制中,并且使用了auto_postion=1 的情況下MHA 將不能使用老的模式來獲得差異的日志,而這里使用BINLOG SERVER 可以有效的提高增強(qiáng)MYSQL 主從切換中,可以讓新主從 BINLOG SERVER 中獲得差異的日志,并且補(bǔ)齊。

從MYSQL  5.6開始 MYSQL  提供了 BINLOG SEVER 的概念,通過BINLOG SERVER 來備份BINLOG 日志,并且根據(jù)相關(guān)的原理這樣的備份的BINLOG 日志基本上是實(shí)時(shí)的。

首先從MHA 0.56 添加了 master_binlog_dir 這個(gè)參數(shù),這個(gè)參數(shù)是防止MYSQL 死機(jī)后無法獲得BINLOG 的具體的位置而設(shè)定的。(當(dāng)然如果LINUX 系統(tǒng)同死機(jī)了,那這個(gè)設(shè)置也是無效的)

怎么將MYSQL的 MHA 的方案升級(jí)到GTID以及binlog server設(shè)置

在啟動(dòng)了 GTID 的復(fù)制方式后,并且添加了BINLOG SERVER 選項(xiàng)后,嘗試終止MASTER ,可以看到 MHA 已經(jīng)自動(dòng)判斷出 MYSQL 使用 GTID的方式進(jìn)行的復(fù)制。

怎么將MYSQL的 MHA 的方案升級(jí)到GTID以及binlog server設(shè)置

并且在信息中已經(jīng)有相關(guān) GTID 的位置信息

怎么將MYSQL的 MHA 的方案升級(jí)到GTID以及binlog server設(shè)置

切換是成功的,那如何建立一個(gè)BINLOG SERVER 其實(shí)對MYSQL 數(shù)量眾多的情況下,是有必要建立一個(gè) BINLOG SERVER 來保存MYSQL 服務(wù)器的BINLOG 數(shù)據(jù)。(你也可以指定master 和其他slave 的 binlog 目錄作為binlog server)

可以在一臺(tái)定義好的MYSQL SERVER 中設(shè)置

nohup mysqlbinlog -R --raw --host='192.168.198.201' --port=3306 --user='repl' --password='1234.com' --stop-never --stop-never-slave-server-id=1202 mysql-bin.000001 --result-file=/data/binlog_backup/ &

其中 mysql-bin.000001 是告知傳送BINLOG 是從哪個(gè) BINLOG 開始的

R   --read-from-remote-server :表示從遠(yuǎn)程機(jī)器上讀取 binlog,要確保遠(yuǎn)程 mysql 存儲(chǔ),需要提供--host, --user, --password 參數(shù);  使用該選項(xiàng)時(shí),mysqlbinlog 會(huì)偽裝成一個(gè) slave,連接讀取,請求指定的 binlog file,主庫獲取接收到這個(gè)請求之后就創(chuàng)建一個(gè) binlog dump 線程推送 binlog 給 mysqlbinlog server。
--raw: 以 binlog 格式存儲(chǔ)日志,方便后期使用;
--host:  遠(yuǎn)程庫的主機(jī) IP 或者主機(jī)名;
--port:  遠(yuǎn)端庫的端口號(hào);
--user:  遠(yuǎn)程庫上用于復(fù)制的賬號(hào);
--password:  遠(yuǎn)端庫上復(fù)制賬號(hào)的密碼;
--stop-never:  一直連接到遠(yuǎn)程的 server 上讀取 binlog 日志,直接到遠(yuǎn)程的 server 關(guān)閉后才會(huì)退出。或是被 pkill 掉;
--stop-never-slave-server-id:  如果需要啟動(dòng)多個(gè) binlog server ,需要給 binlog server 指定 server-id 。

--result-file:   指定存儲(chǔ)到本地的目錄,注意后綴需要加上/

在執(zhí)行完命令后,可以很快的將源端的BINLOG 復(fù)制到目的機(jī),但需要注意的是,如果源端進(jìn)行  purge 操作的時(shí)候,目的端的日志是不會(huì)減少的,所以還需要自己考慮如何定時(shí)清理不在使用的BINLOG  文件。

怎么將MYSQL的 MHA 的方案升級(jí)到GTID以及binlog server設(shè)置

同時(shí)如果怕MASTER 主機(jī)重啟動(dòng)之類的事情可以寫一個(gè)腳本定時(shí)運(yùn)行

以下為從網(wǎng)上找的一段 SHELL 程序 

# cat > binlog_cp.sh << EOF
#!/bin/bash
BACKUP_BIN=/usr/local/mysql/bin/mysqlbinlog
LOCAL_BACKUP_DIR=/data/mysql/mysql3306/logs/
BACKUP_LOG=/tmp/backup.log
REMOTE_HOST=192.168.199.230
REMOTE_PORT=3306
REMOTE_USER=repl
REMOTE_PASS=unixfbi
FIRST_BINLOG=mysql-bin.000001
SLAVE_SERVER_ID=2313306
# wait for 10s
SLEEP_SECONDS=10
cd ${LOCAL_BACKUP_DIR}

while :
do
 if [ `ls -A "${LOCAL_BACKUP_DIR}" |wc -l` -eq 0 ];then
    LAST_FILE=${FIRST_BINLOG}
 else
    LAST_FILE=`ls -l ${LOCAL_BACKUP_DIR} |tail -n 1 |awk '{print $NF}'`
 fi
 ${BACKUP_BIN} --raw -R --stop-never --host=${REMOTE_HOST} --port=${REMOTE_PORT} --user=${REMOTE_USER} --password=${REMOTE_PASS}  --stop-never --stop-never-slave-server-id=${SLAVE_SERVER_ID} ${LAST_FILE} --result-file=${LOCAL_BACKUP_DIR}
 echo "`date +"%Y/%m/%d %H:%M:%S"` mysqlbinlog is stoped,return code: $?" | tee -a ${BACKUP_LOG}
 echo "${SLEEP_SECONDS}s will continue !" | tee -a ${BACKUP_LOG}  
 sleep ${SLEEP_SECONDS}
done
EOF

通過這個(gè)程序來不斷的判斷master 服務(wù)器是否OK ,如果連接斷掉后,會(huì)在MASTER 啟動(dòng)后,再次進(jìn)行連接將日志拉取。

關(guān)于怎么將MYSQL的 MHA 的方案升級(jí)到GTID以及binlog server設(shè)置就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

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

AI