mysql server_id的用途(主從等結構中)


前言

我們都知道MySQL用server-id來唯一的標識某個數據庫實例,並在鏈式或雙主復制結構中用它來避免sql語句的無限循環。

5.7需要同時設置server_id參數,8.0開始server_id默認值為1

MySQL搭建復制環境的時候,需要設置每個server的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一旦重復,可能引發一些詭異問題。

看看下面兩種情況:

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

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

 


免責聲明!

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



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