主頁(yè) > 知識(shí)庫(kù) > MySQL主從同步中的server-id示例詳解

MySQL主從同步中的server-id示例詳解

熱門(mén)標(biāo)簽:400電話(huà)可以免費(fèi)申請(qǐng)嗎 騰訊地圖標(biāo)注提升 怎么在地圖標(biāo)注位置生成圖片 福建外呼系統(tǒng)定制化 美國(guó)反騷擾電話(huà)機(jī)器人 真人語(yǔ)音電話(huà)機(jī)器人 悟空科技電話(huà)機(jī)器人 銅陵防封電銷(xiāo)卡 電銷(xiāo)卡外呼系統(tǒng)供應(yīng)商

前言

當(dāng)我們搭建MySQL集群時(shí),自然需要完成數(shù)據(jù)庫(kù)的主從同步來(lái)保證數(shù)據(jù)一致性。而主從同步的方式也分很多種,一主多從、鏈?zhǔn)街鲝?、多主多從,根?jù)你的需要來(lái)進(jìn)行設(shè)置。但只要你需要主從同步,就一定要注意server-id的配置,否則會(huì)出現(xiàn)主從復(fù)制異常。

在控制數(shù)據(jù)庫(kù)數(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ī)來(lái)說(shuō)依然會(huì)記錄二進(jìn)制日志,但會(huì)拒絕所有的從機(jī)連接;對(duì)于從機(jī)來(lái)說(shuō)則會(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)

我們可以在線(xiàn)直接修改全局變量server-id,但不會(huì)立即生效,所以修改后記得重啟服務(wù)。而重啟后又會(huì)重新讀取系統(tǒng)配置文件配置,導(dǎo)致剛才的修改失效,因此建議修改配置文件后重啟服務(wù)而不是在線(xiàn)修改:

#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ù)庫(kù)實(shí)例,防止在鏈?zhǔn)街鲝?、多主多從拓?fù)渲袑?dǎo)致SQL語(yǔ)句的無(wú)限循環(huán):

  • 標(biāo)記binlog event的源實(shí)例
  • 過(guò)濾主庫(kù)binlog,當(dāng)發(fā)現(xiàn)server-id相同時(shí),跳過(guò)該event執(zhí)行,避免無(wú)限循環(huán)執(zhí)行。
  • 如果設(shè)置了replicate-same-server-id=1,則執(zhí)行所有event,但有可能導(dǎo)致無(wú)限循環(huán)執(zhí)行SQL語(yǔ)句。

我們用兩個(gè)例子來(lái)說(shuō)明server-id為什么不要重復(fù):

當(dāng)主庫(kù)和備庫(kù)server-id重復(fù)時(shí)

由于默認(rèn)情況replicate-same-server-id=0,因此備庫(kù)會(huì)跳過(guò)所有主庫(kù)同步的數(shù)據(jù),導(dǎo)致主從數(shù)據(jù)的不一致。

當(dāng)兩個(gè)備庫(kù)server-id重復(fù)時(shí)

會(huì)導(dǎo)致從庫(kù)跟主庫(kù)的連接時(shí)斷時(shí)連,產(chǎn)生大量異常。根據(jù)MySQL的設(shè)計(jì),主庫(kù)和從庫(kù)通過(guò)事件機(jī)制進(jìn)行連接和同步,當(dāng)新的連接到來(lái)時(shí),如果發(fā)現(xiàn)server-id相同,主庫(kù)會(huì)斷開(kāi)之前的連接并重新注冊(cè)新連接。當(dāng)A庫(kù)連接上主庫(kù)時(shí),此時(shí)B庫(kù)連接到來(lái),會(huì)斷開(kāi)A庫(kù)連接,A庫(kù)再進(jìn)行重連,周而復(fù)始導(dǎo)致大量異常信息。

生成server-id的規(guī)則

既然server-id不能相同,而當(dāng)我們有10個(gè)實(shí)例時(shí),怎么保證每個(gè)都不同呢?有幾種常用的方法:

  • 隨機(jī)數(shù)
  • 時(shí)間戳
  • IP地址+端口
  • 在管理中心集中分配,生成自增ID

上面的這些方法都可以,但是注意不要超過(guò)了最大值2^32-1,同時(shí)值最好>2。我采用的方法是IP地址后兩位+本機(jī)MySQL實(shí)例序號(hào),但如果是通過(guò)docker來(lái)進(jìn)行管理多實(shí)例時(shí),這個(gè)怎么生成大家可以想下有沒(méi)有什么優(yōu)美的解決方案。

server-uuid配置

MySQL服務(wù)會(huì)自動(dòng)創(chuàng)建并生成server-uuid配置:

  • 讀取${data_dir}/auto.cnf文件中的UUID
  • 如果不存在,自動(dòng)創(chuàng)建文件和生成新的UUID并讀取
shell> cat ~/mysql/data/auto.cnf
[auto]
server-uuid=fd5d03bc-cfde-11e9-ae59-48d539355108

這個(gè)auto.cnf配置風(fēng)格類(lèi)似于my.cnf,但這個(gè)文件只包含一個(gè)auto配置塊和一行server-uuid配置。它是自動(dòng)創(chuàng)建的,因此不要修改它的內(nèi)容。

在主從拓?fù)渲?,主從可以知道互相的UUID,在主機(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ò)退出,不過(guò)我們可以通過(guò)設(shè)置replicate-same-server-id=1來(lái)避免報(bào)錯(cuò)(不推薦)。

參考資料

  • 17.1.6 Replication and Binary Logging Options and Variables:https://dev.mysql.com/doc/ref...
  • 如何生成唯一的server Id:https://www.jb51.net/article/169550.htm

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。

您可能感興趣的文章:
  • 解決MySQL主從數(shù)據(jù)庫(kù)沒(méi)有同步的兩種方法
  • Mysql數(shù)據(jù)庫(kù)的主從同步配置
  • 一文帶你了解Mysql主從同步原理
  • Docker 環(huán)境運(yùn)行 Mysql 和開(kāi)啟 Binlog 配置主從同步的設(shè)置方法
  • MySQL 主從同步,事務(wù)回滾的實(shí)現(xiàn)原理
  • MySQL數(shù)據(jù)庫(kù)主從同步實(shí)戰(zhàn)過(guò)程詳解
  • MySQL數(shù)據(jù)庫(kù)的主從同步配置與讀寫(xiě)分離
  • MySQL主從同步原理及應(yīng)用

標(biāo)簽:湖南 湖北 白銀 云浮 臨汾 聊城 烏海 武威

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MySQL主從同步中的server-id示例詳解》,本文關(guān)鍵詞  MySQL,主從,同步,中的,server-id,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《MySQL主從同步中的server-id示例詳解》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于MySQL主從同步中的server-id示例詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 企业400电话

    智能AI客服机器人
    15000

    在线订购

    合计11份范本:公司章程+合伙协议+出资协议+合作协议+股权转让协议+增资扩股协议+股权激励+股东会决议+董事会决议

    推薦文章