每個複本都必須具有唯一的伺服器 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
選項。如果您決定在副本上重新啟用這些功能,請移除相關選項並重新啟動伺服器。