亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > MySQL > 正文

MySQL如何生成唯一的server-id

2020-01-18 20:42:35
字體:
來源:轉載
供稿:網友

前言

我們都知道MySQL用server-id來唯一的標識某個數據庫實例,并在鏈式或雙主復制結構中用它來避免sql語句的無限循環。這篇文章分享下我對server-id的理解,然后比較和權衡生成唯一server-id的幾種方式。

server_id的用途

簡單說來,server_id有兩個用途:

1. 用來標記binlog event的源產地,就是SQL語句最開始源自于哪里。

2. 用于IO_thread對主庫binlog的過濾。如果沒有設置replicate-same-server-id=1,那么當從庫的io_thread發現event的源與自己的server-id相同時,就會跳過該event,不把該event寫入到relay log中。從庫的sql_thread自然就不會執行該event。這在鏈式或雙主結構中可以避免sql語句的無限循環。

注意:相同server-id的event在io_thread這一層就過濾了;而對于replicate-(do|ignore)-等規則,則是在sql_thread這一層過濾的。io_thread和sql_thread都有過濾的功能。

server_id為何不能重復

在同一個集群中,server-id一旦重復,可能引發一些詭異問題。

看看下面兩種情況:

圖1:主庫與從庫的server-id不同,但是兩個或多個從庫的server-id相同

這種情況下復制會左右搖擺。當兩個從庫的server-id相同時,如果從庫1已經連接上主庫,此時從庫2也需要連接到主庫,發現之前有server-id相同的連接,就會先注銷該連接,然后重新注冊。

參考下面的代碼片段:

int register_slave(THD* thd, uchar* packet, uint packet_length){ int res; SLAVE_INFO *si;... if (!(si->master_id= uint4korr(p))) si->master_id= server_id; si->thd= thd; pthread_mutex_lock(&LOCK_slave_list);/* 先注銷相同server-id的連接*/ unregister_slave(thd,0,0); /* 重新注冊*/ res= my_hash_insert(&slave_list, (uchar*) si); pthread_mutex_unlock(&LOCK_slave_list); return res;...}

兩臺從庫不停的注冊,不停的注銷,會產生很多relay log文件,查看從庫狀態會看到relay log文件名不停改變,從庫的復制狀態一會是yes一會是正在連接中。

圖2:鏈式或雙主結構中,主庫與從庫的server-id相同

從庫1同時又是relay數據庫,它能正確同步,然后把relay-log內容重寫到自己的binlog中。當server-id為100的從庫2 io線程獲取binlog時,發現所有內容都是源自于自己,就會丟棄這些event。因此從庫2無法正確同步主庫的數據。只有直接寫relay server的event能正確同步到從庫2。

上面兩種情況可以看到,在同一個replication set中,保持server-id的唯一性非常重要。

server_id的動態修改

無意中發現server-id竟然是可以動態修改的,可別高興的太早。好處是,上面圖1的情況下,直接修改其中一個從庫的server-id就可以解決server-id沖突的問題。壞處很隱蔽,如下圖的結構:

現在假設active-master因為某種原因與passive-master的同步斷開后,passive-master上進行了一些ddl變更。然后某dba突發奇想把passive-master的server-id修改為400。當雙master的復制啟動后,那些之前在passive-master上執行的server-id為200的ddl變更,會從此陷入死循環。如果是alter table t engine=innodb,它會一直不停,可能你會發現。但是像update a=a+1;這樣的sql,你很難發現。當然這種場景只是我的杜撰,這兒有個更真實的例子主備備的兩個備機轉為雙master時出現的詭異slave lag問題:http://hatemysql.com/2010/10/15/主備備的兩個備機轉為雙master時出現的詭異slave-lag問題/。

舉這兩個例子只是想說明修改server-id有點危險,最好不要去修改,那么能一步到位生成它嗎?

生成唯一的server_id

常用的方法有如下幾種:

1. 采用隨機數

mysql的server-id是4字節整數,范圍從0-4294967295,因此采用該范圍內的隨機數來作為server-id產生沖突的可能性是非常小的。

2. 采用時間戳

直接用date +%s來生成server-id。一天86400秒來計算,往后計算50年,最大的server-id也才使用到86400*365*50,完全在server-id范圍內。

3. 采用ip地址+端口

這是我們經常采用的方法。例如ip為192.168.122.23,端口為3309,那么server-id可以寫為122233309。產生沖突的可能性比較?。河龅?.*.122.23 或者*.*.12.223,而且搭建了同一個replication set的3309才會出現。

4. 采用集中的發號器

在管理服務器上采用自增的id來統一分配server-id。這可以保證不沖突,但是需要維護中心節點。

5. 分開管理每個replication set

在每個replication set中為mysql庫增加一個管理表,保證每個從庫的server-id不沖突。

上面的幾種方法都不賴,但是:

  • 方法4加了維護負擔,而且開發環境、測試環境、線上環境都維護一套發號器的話,有點麻煩,混在一起又可能遇到網段隔離的風險,還有發號器數據庫權限的問題難于控制。所以不推薦。
  • 方法5實現了自治,但是管理成本有點高。從庫要能夠寫主庫的server-id表,復雜。
  • 5種方法都存在的問題是,使用冷備的數據來擴容,server-id需要手動去修改,否則就與冷備源的server-id沖突。而且,當mysql啟動的時候,你無法判斷該mysql是剛通過備份擴容的,還是之前一直正常運行的。所以你不知道這個server-id到底要不要改。而我希望server-id對dba完全透明,又絕不產生沖突,即可徹底屏蔽這個討厭的東西。

建議的方法

其實很簡單。ipv4是4字節的整數,與server-id的范圍完全一樣。我們認為只有ip地址+端口才能唯一的確定一個mysql實例,所以總是希望把ip信息和端口信息都集成到server-id中。但是別忘了,一個ip上不能同時啟動兩個一樣的端口。所以,server-id只需采用ip地址的整數形式:select INET_ATON('192.168.12.45'),3232238637!所有新上線的實例,mysql啟動腳本強制對server-id進行檢查,發現server-id不對就進行糾正,然后啟動。這種方法有個前提條件:同一機器上的多個instance不要有主從關系,否則server-id一樣就會導致問題。這種情況一般只會在測試環境出現,在線上基本是沒有的。滿足了這個前提,所有問題迎刃而解。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美大人香蕉在线| 久久99视频精品| 98精品国产高清在线xxxx天堂| 日韩欧美在线中文字幕| 久久久www成人免费精品张筱雨| 国内精品久久久久久影视8| 欧美精品激情在线观看| 亚洲欧美一区二区三区在线| 亚洲精品综合久久中文字幕| 日韩在线www| 亚洲第一色在线| 亚洲国产精品99| 中文字幕亚洲无线码在线一区| 久久久久久久久久久国产| 国产91色在线| 九九精品在线观看| 精品国产一区二区三区四区在线观看| 精品久久久久久中文字幕一区奶水| 亚洲第一页自拍| 色伦专区97中文字幕| 成人免费高清完整版在线观看| 美乳少妇欧美精品| 成人国产精品一区二区| 欧美精品一区二区三区国产精品| 欧美国产日韩视频| 国产精品美女午夜av| 久久久亚洲网站| 成人午夜激情网| 91亚洲精品视频| 欧美激情网友自拍| 伊人久久五月天| 欧美成人亚洲成人日韩成人| 精品少妇v888av| 亚洲国产成人久久综合| 亚洲色图五月天| 国产精品电影一区| 91伊人影院在线播放| 亚洲人成网站在线播| 在线观看国产精品日韩av| 欧美日韩国产成人高清视频| 国产91对白在线播放| 国产精品免费观看在线| 亚洲最大成人网色| 久久久久久国产免费| 91系列在线观看| 亚洲大胆人体av| 亚洲电影免费在线观看| 成人h猎奇视频网站| 国产91精品青草社区| 欧美色道久久88综合亚洲精品| 国产精品爽爽爽爽爽爽在线观看| 97人人爽人人喊人人模波多| 777午夜精品福利在线观看| 国产精品美乳一区二区免费| 久久影院在线观看| 97精品伊人久久久大香线蕉| 日韩精品亚洲视频| 久久中文久久字幕| 福利视频一区二区| 日韩在线国产精品| 久久国产精品久久久久久久久久| 岛国av一区二区在线在线观看| 最近更新的2019中文字幕| 成人有码在线播放| 日韩av手机在线看| 亚洲精品白浆高清久久久久久| 国产精品久久久久久久久久| 久久婷婷国产麻豆91天堂| 国产精品色视频| 成人有码在线播放| 亚洲香蕉成人av网站在线观看| 日韩视频免费大全中文字幕| 久久久精品欧美| 国产成人精品最新| 久久久精品999| 欧美日本黄视频| 亚洲激情在线视频| 国产一区玩具在线观看| 成人精品一区二区三区电影免费| 91精品视频在线免费观看| 亚洲黄色片网站| 精品精品国产国产自在线| 成人亚洲激情网| 国产福利视频一区二区| 欧美激情a在线| 色樱桃影院亚洲精品影院| 亚洲一区二区在线播放| 精品国产一区二区三区久久狼黑人| 欧美大人香蕉在线| 久久影院免费观看| 欧美精品激情在线| 国产美女精彩久久| 亚洲精品中文字幕av| 久久久www成人免费精品| 欧美激情在线有限公司| 欧美性猛交xxx| 欧美日韩国产丝袜美女| 欧美精品生活片| 国产精品99久久久久久www| 孩xxxx性bbbb欧美| 亚洲桃花岛网站| 日韩精品在线观看视频| 亚洲国产成人91精品| 2020欧美日韩在线视频| 久久激情五月丁香伊人| 国内外成人免费激情在线视频网站| 亚洲男人天堂网| 国产精品久久婷婷六月丁香| 在线播放亚洲激情| 国产精品99久久久久久久久久久久| 色综久久综合桃花网| 国产男女猛烈无遮挡91| 中日韩美女免费视频网址在线观看| 亚洲国产精品一区二区久| 51ⅴ精品国产91久久久久久| 亚洲偷欧美偷国内偷| 九九九热精品免费视频观看网站| 成人午夜在线观看| 久久免费视频在线| 欧美www视频在线观看| 久久久久久国产精品久久| 亚洲精品免费网站| 中文字幕日韩专区| 色中色综合影院手机版在线观看| 欧美成aaa人片免费看| 亚洲午夜精品久久久久久久久久久久| 国产精品91久久久| 性色av一区二区三区红粉影视| 黑人巨大精品欧美一区二区| 国产一区二区三区视频在线观看| 欧美极品美女视频网站在线观看免费| 隔壁老王国产在线精品| 亚洲电影成人av99爱色| 最近2019中文免费高清视频观看www99| 精品久久久久久亚洲国产300| 久久99精品久久久久久噜噜| 久久久久久国产三级电影| 日本韩国欧美精品大片卡二| 亚洲天堂开心观看| 亚洲区中文字幕| 久久久久久国产精品三级玉女聊斋| 成人黄色网免费| 国产精品啪视频| 亚洲最大中文字幕| 92看片淫黄大片欧美看国产片| 亚洲精品av在线| 97在线观看免费| 国产精品久久99久久| 欧美在线观看网站| 欧美壮男野外gaytube| 欧美激情亚洲精品| 国产精品久久久久久婷婷天堂| 7777免费精品视频| 久久久久久网站| 另类视频在线观看| 日韩电影免费在线观看中文字幕| 欧美大片在线影院| 9.1国产丝袜在线观看| 亚洲男人的天堂在线| 欧美中文字幕在线视频| 成人有码在线视频| 欧美精品日韩三级| 国产精品久久久久久久久久| 国产亚洲视频中文字幕视频|