mysql復制過程中的server-id的理解


一.     server-id做什么用的,你知道嗎?

    1、 mysql的同步的數據中是包含server-id的,用於標識該語句最初是從哪個server寫入的,所以server-id一定要有的

    2、 每一個同步中的slave在master上都對應一個master線程,該線程就是通過slave的server-id來標識的;每個slave在master端最多有一個master線程,如果兩個slave的server-id 相同,則后一個連接成功時,前一個將被踢掉。 這里至少有這么一種考慮:

     slave主動連接master之后,如果slave上面執行了slave stop;則連接斷開,但是master上對應的線程並沒有退出;當slave start之后,master不能再創建一個線程而保留原來的線程,那樣同步就可能有問題;

    3、 在mysql做主主同步時,多個主需要構成一個環狀,但是同步的時候有要保證一條數據不會陷入死循環,這里就是靠server-id來實現的

    

二.在my.cnf中設置服務器的ID是一個必要的步驟來實施或開始復制。 一般的規則是,整個環境,我們正在實施MySQL復制服務器的ID必須是唯一的。

一般同時實施復制multi-master/circular,我們設置日志選項從更新的= 1。 所以任何聲明時,將執行主的奴隸,它會被記錄在該服務器的二進制日志。

例如,我們有3個服務器A,B和 C。 其服務器ID相應的11,2233。 他們正在復制循環方式(多主),如A是主服務器B,BC服務器和C的主人是一台服務器主人。

現在任何MySQL客戶端時,將執行插入/更新/刪除服務器聲明,它會被記錄在二進制服務器與服務器ID 11。

由於該語句記錄在二進制服務器,它會去到B服務器(因為B是奴隸),在那里執行和記錄BINLOG B服務器在同一台服務器ID 11。 (為什么同一台服務器ID?因為本來這種說法,其執行由SQL線程不正規的mysql客戶端發起服務器與服務器ID 11B服務器上)。

現在這個語句將再次進入到C服務器(因為CB的奴隸),在那里執行的二進制日志中記錄的C服務器在同一台服務器ID 11。

由於C是主服務器,該語句時會來的C服務器通過二進制日志服務器, 一台服務器 SQL線程將比較服務器ID,會發現,同11表示,這種說法是最初發起的服務器本身和沒有必要執行SQL線程所以最后將跳過這一說法。

借助服務器的ID,我們就能避免死循環樣的情況下在master-master/circular復制。

 

 

三.   確保主服務器主機上my.cnf文件的[mysqld]部分包括一個log-bin選項。該部分還應有一個server-id=Master_id選項,其中master_id必須為1到232–1之間的一個正整數值。例如:

6.            [mysqld]
7.            log-bin=mysql-bin
8.            server-id=1

如果沒有提供那些選項,應添加它們並重啟服務器。

9.    停止用於從服務器的服務器並在其my.cnf文件中添加下面的行:

10.        [mysqld]
11.        server-id=slave_id

slave_id值同Master_id值一樣,必須為1到232–1之間的一個正整數值。並且,從服務器的ID必須與主服務器的ID不相同。例如:

[mysqld]
server-id=2

如果設置多個從服務器,每個從服務器必須有一個唯一的server-id值,必須與主服務器的以及其它從服務器的不相同。可以認為server-id值類似於IP地址:這些ID值能唯一識別復制服務器群集中的每個服務器實例。

如果不指定一個server-id值,如果沒有定義master-host,則將它設置為1;否則設置為2。請注意如果server-id太長,主服務器 拒絕所有來自從服務器的連接,並且從服務器拒絕連接到主服務器。這樣,省略server-id只適合用二進制日志備份。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM