您好,登錄后才能下訂單哦!
前言
當(dāng)我們搭建MySQL集群時(shí),自然需要完成數(shù)據(jù)庫的主從同步來保證數(shù)據(jù)一致性。而主從同步的方式也分很多種,一主多從、鏈?zhǔn)街鲝?、多主多從,根?jù)你的需要來進(jìn)行設(shè)置。但只要你需要主從同步,就一定要注意server-id的配置,否則會(huì)出現(xiàn)主從復(fù)制異常。
在控制數(shù)據(jù)庫數(shù)據(jù)復(fù)制和日志管理中,有兩個(gè)重要的配置:server-id和server-uuid,他們會(huì)影響二進(jìn)制日志文件記錄和全局事務(wù)標(biāo)識(shí)。
server-id配置
當(dāng)你使用主從拓?fù)鋾r(shí),一定要對(duì)所有MySQL實(shí)例都分別指定一個(gè)獨(dú)特的互不相同的server-id。默認(rèn)值為0,當(dāng)server-id=0時(shí),對(duì)于主機(jī)來說依然會(huì)記錄二進(jìn)制日志,但會(huì)拒絕所有的從機(jī)連接;對(duì)于從機(jī)來說則會(huì)拒絕連接其它實(shí)例。
MySQL實(shí)例的server-id是一個(gè)全局變量,可以直接查看:
mysql> show variables like '%server_id%'; +---------------+-----------+ | Variable_name | Value | +---------------+-----------+ | server_id | 171562767 | +---------------+-----------+ 1 row in set (0.00 sec)
我們可以在線直接修改全局變量server-id,但不會(huì)立即生效,所以修改后記得重啟服務(wù)。而重啟后又會(huì)重新讀取系統(tǒng)配置文件配置,導(dǎo)致剛才的修改失效,因此建議修改配置文件后重啟服務(wù)而不是在線修改:
#my.cnf [mysqld] #replication log-bin=mysql-bin server-id=171562767 sync_binlog=1 binlog-ignore-db=mysql binlog-ignore-db=information_schema
server-id用途
server-id用于標(biāo)識(shí)數(shù)據(jù)庫實(shí)例,防止在鏈?zhǔn)街鲝?、多主多從拓?fù)渲袑?dǎo)致SQL語句的無限循環(huán):
我們用兩個(gè)例子來說明server-id為什么不要重復(fù):
當(dāng)主庫和備庫server-id重復(fù)時(shí)
由于默認(rèn)情況replicate-same-server-id=0,因此備庫會(huì)跳過所有主庫同步的數(shù)據(jù),導(dǎo)致主從數(shù)據(jù)的不一致。
當(dāng)兩個(gè)備庫server-id重復(fù)時(shí)
會(huì)導(dǎo)致從庫跟主庫的連接時(shí)斷時(shí)連,產(chǎn)生大量異常。根據(jù)MySQL的設(shè)計(jì),主庫和從庫通過事件機(jī)制進(jìn)行連接和同步,當(dāng)新的連接到來時(shí),如果發(fā)現(xiàn)server-id相同,主庫會(huì)斷開之前的連接并重新注冊(cè)新連接。當(dāng)A庫連接上主庫時(shí),此時(shí)B庫連接到來,會(huì)斷開A庫連接,A庫再進(jìn)行重連,周而復(fù)始導(dǎo)致大量異常信息。
生成server-id的規(guī)則
既然server-id不能相同,而當(dāng)我們有10個(gè)實(shí)例時(shí),怎么保證每個(gè)都不同呢?有幾種常用的方法:
上面的這些方法都可以,但是注意不要超過了最大值2^32-1,同時(shí)值最好>2。我采用的方法是IP地址后兩位+本機(jī)MySQL實(shí)例序號(hào),但如果是通過docker來進(jìn)行管理多實(shí)例時(shí),這個(gè)怎么生成大家可以想下有沒有什么優(yōu)美的解決方案。
server-uuid配置
MySQL服務(wù)會(huì)自動(dòng)創(chuàng)建并生成server-uuid配置:
shell> cat ~/mysql/data/auto.cnf [auto] server-uuid=fd5d03bc-cfde-11e9-ae59-48d539355108
這個(gè)auto.cnf配置風(fēng)格類似于my.cnf,但這個(gè)文件只包含一個(gè)auto配置塊和一行server-uuid配置。它是自動(dòng)創(chuàng)建的,因此不要修改它的內(nèi)容。
在主從拓?fù)渲校鲝目梢灾阑ハ嗟腢UID,在主機(jī)上使用show slave hosts,在從機(jī)上使用show slave status查看Master_UUID字段。
server-uuid參數(shù)并不能取代server-id,他們有不同的作用。當(dāng)主從同步時(shí)如果主從實(shí)例的server-uuid相同會(huì)報(bào)錯(cuò)退出,不過我們可以通過設(shè)置replicate-same-server-id=1來避免報(bào)錯(cuò)(不推薦)。
參考資料
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)億速云的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。