每個副本都必須具有唯一的伺服器 ID,如 server_id
系統變數所指定。如果您正在設定多個副本,則每個副本都必須具有唯一的 server_id
值,該值與來源和任何其他副本的值不同。如果副本的伺服器 ID 尚未設定,或目前的值與您為來源或其他副本選擇的值衝突,您必須變更它。
預設的 server_id
值為 1。您可以透過發出類似這樣的陳述式來動態變更 server_id
值
SET GLOBAL server_id = 21;
請注意,伺服器 ID 的值為 0 會阻止複本連線至來源。如果先前設定了該伺服器 ID 值(這是早期版本的預設值),您必須重新啟動伺服器,才能使用新的非零伺服器 ID 初始化複本。否則,變更伺服器 ID 時不需要重新啟動伺服器,除非您進行了其他需要重新啟動伺服器的組態變更。例如,如果伺服器上停用了二進位日誌,而您想要為複本啟用它,則需要重新啟動伺服器才能啟用。
如果您要關閉複本伺服器,您可以編輯組態檔的 [mysqld]
區段,以指定唯一的伺服器 ID。例如:
[mysqld]
server-id=21
所有伺服器預設都會啟用二進位日誌。複本不需要啟用二進位日誌才能進行複寫。但是,複本上的二進位日誌表示複本的二進位日誌可以用於資料備份和當機復原。啟用二進位日誌的複本也可以用作更複雜複寫拓撲的一部分。例如,您可能想要使用這種鏈式排列方式設定複寫伺服器:
A -> B -> C
在這裡,A
作為複本 B
的來源,而 B
作為複本 C
的來源。為了使這個運作,B
必須既是來源 又 是複本。從 A
收到的更新必須由 B
記錄到其二進位日誌中,才能傳遞給 C
。除了二進位日誌外,此複寫拓撲還需要啟用系統變數 log_replica_updates
。啟用複本更新後,複本會將從來源接收並由複本的 SQL 執行緒執行的更新寫入複本自己的二進位日誌。log_replica_updates
預設為啟用。
如果您需要在複本上停用二進位日誌或複本更新日誌,您可以為複本指定 --skip-log-bin
和 --log-replica-updates=OFF
選項。如果您決定在複本上重新啟用這些功能,請移除相關選項並重新啟動伺服器。