本節說明您想要用於群組複製的 MySQL 伺服器執行個體所需的組態設定。如需背景資訊,請參閱第 20.3 節,「需求和限制」。
對於群組複製,資料必須儲存在 InnoDB 交易式儲存引擎中 (如需原因的詳細資訊,請參閱第 20.3.1 節,「群組複製需求」)。使用其他儲存引擎,包括暫時性 MEMORY
儲存引擎,可能會在群組複製中造成錯誤。將 disabled_storage_engines
系統變數設定如下,以防止使用它們
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
下列設定會根據 MySQL 群組複製需求來設定複製。
server_id=1
gtid_mode=ON
enforce_gtid_consistency=ON
這些設定會將伺服器設定為使用唯一的識別碼數字 1,以啟用第 19.1.3 節,「使用全域交易識別碼的複製」,並允許僅執行可以使用 GTID 安全記錄的陳述式。
此設定會停用寫入二進位記錄之事件的檢查碼,預設為啟用。MySQL 9.0 中的群組複製支援二進位記錄中存在檢查碼,並且可以使用它們來驗證某些通道上事件的完整性,因此您可以使用預設設定。如需更多詳細資訊,請參閱第 20.3.2 節,「群組複製限制」。
另請參閱第 20.3.1 節,「群組複製需求」。
此時,選項檔案可確保伺服器已設定,並且會指示伺服器在給定組態下執行複製基礎結構。以下章節設定伺服器的群組複製設定。
plugin_load_add='group_replication.so'
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
group_replication_start_on_boot=off
group_replication_local_address= "s1:33061"
group_replication_group_seeds= "s1:33061,s2:33061,s3:33061"
group_replication_bootstrap_group=off
plugin-load-add
會將群組複製外掛程式新增至伺服器在啟動時載入的外掛程式清單。在生產環境部署中,這比手動安裝外掛程式更佳。設定
group_replication_group_name
會告知外掛程式它正在加入或建立的群組名稱為 "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"。group_replication_group_name
的值必須是有效的 UUID。您可以使用SELECT UUID()
來產生一個。此 UUID 會形成 GTID 的一部分,當群組成員從用戶端收到的交易,以及由群組成員在內部產生的檢視變更事件寫入二進位記錄時會使用該 GTID。將
group_replication_start_on_boot
變數設定為off
會指示外掛程式在伺服器啟動時不要自動開始作業。這在設定群組複製時非常重要,因為它可確保您可以在手動啟動外掛程式之前設定伺服器。設定好成員後,您可以將group_replication_start_on_boot
設定為on
,讓群組複製在伺服器開機時自動啟動。設定
group_replication_local_address
會設定成員用於與群組中其他成員內部通訊的網路位址和連接埠。群組複製會使用此位址,用於涉及群組通訊引擎 (XCom,一種 Paxos 變體) 遠端執行個體的內部成員對成員連線。重要事項群組複製本機位址必須與用於 SQL 用戶端連線的主機名稱和連接埠不同,這些主機名稱和連接埠由 MySQL 伺服器的
hostname
和port
系統變數所定義。它不得用於用戶端應用程式。它必須僅用於執行群組複製時群組成員之間的內部通訊。由
group_replication_local_address
設定的網路位址,必須能被所有群組成員解析。舉例來說,如果每個伺服器實例都位於具有固定網路位址的不同機器上,您可以使用機器的 IP 位址,例如 10.0.0.1。如果您使用主機名稱,則必須使用完整的主機名稱,並確保它能透過 DNS、正確設定的/etc/hosts
檔案或其他名稱解析程序進行解析。IPv6 位址(或解析為 IPv6 位址的主機名稱)以及 IPv4 位址都可以使用;一個群組可以包含同時使用 IPv6 和 IPv4 的成員。有關群組複寫對 IPv6 網路以及混合 IPv4 和 IPv6 群組的支援的更多資訊,請參閱 第 20.5.5 節「支援 IPv6 以及混合 IPv6 和 IPv4 群組」。group_replication_local_address
建議使用的連接埠是 33061。群組複寫將此連接埠用作複寫群組中群組成員的唯一識別碼。只要主機名稱或 IP 位址都不同,您就可以在複寫群組的所有成員中使用相同的連接埠,如本教學課程所示。或者,只要連接埠都不同,您就可以在所有成員中使用相同的主機名稱或 IP 位址,例如 第 20.2.2 節「在本機部署群組複寫」 中所示。現有成員為加入成員提供的群組複寫分散式復原程序的連線,不是由
group_replication_local_address
設定的網路位址。群組成員會將其標準 SQL 用戶端連線提供給加入成員以進行分散式復原,如 MySQL 伺服器的hostname
和port
所指定;它們可能(也)會宣傳一個分散式復原端點的替代清單,作為加入成員的專用用戶端連線。有關更多詳細資訊,請參閱 第 20.5.4.1 節「分散式復原的連線」。重要事項如果加入成員無法使用 MySQL 伺服器的
hostname
系統變數定義的主機名稱來正確識別其他成員,則分散式復原可能會失敗。建議執行 MySQL 的作業系統具有正確設定的唯一主機名稱,無論是使用 DNS 還是本機設定。伺服器用於 SQL 用戶端連線的主機名稱可以在 Performance Schema 表格replication_group_members
的Member_host
欄位中驗證。如果多個群組成員外部化由作業系統設定的預設主機名稱,則加入成員有可能無法將其解析為正確的成員位址,並且無法連線進行分散式復原。在這種情況下,您可以使用 MySQL 伺服器的report_host
系統變數來設定每個伺服器要外部化的唯一主機名稱。設定
group_replication_group_seeds
會設定群組成員的主機名稱和連接埠,新成員會使用這些成員來建立與群組的連線。這些成員稱為種子成員。建立連線後,群組成員資格資訊會列在 Performance Schema 表格replication_group_members
中。通常,group_replication_group_seeds
清單包含每個群組成員的group_replication_local_address
的hostname:port
,但這不是強制性的,並且可以選擇群組成員的子集作為種子。重要事項group_replication_group_seeds
中列出的hostname:port
是種子成員的內部網路位址,由group_replication_local_address
設定,而不是用於 SQL 用戶端連線的hostname:port
,例如 Performance Schema 表格replication_group_members
中顯示的。啟動群組的伺服器不會使用此選項,因為它是初始伺服器,因此負責引導群組。換句話說,引導群組的伺服器上任何現有的資料都將用作下一個加入成員的資料。第二個加入的伺服器會要求群組中唯一的一個成員加入,第二個伺服器上任何遺失的資料都會從引導成員上的捐贈者資料複製,然後群組會擴展。第三個加入的伺服器可以要求這兩個中的任何一個加入,資料會同步到新成員,然後群組再次擴展。後續伺服器在加入時重複此程序。
警告同時加入多個伺服器時,請確保它們指向已經在群組中的種子成員。請勿使用也正在加入群組的成員作為種子,因為它們在被連線時可能尚未加入群組。
最佳做法是先啟動引導成員,並讓它建立群組。然後將其設為其餘加入成員的種子成員。這可確保在加入其餘成員時已形成群組。
不支援同時建立群組和加入多個成員。它可能會起作用,但很可能操作會競爭,然後加入群組的動作最終會導致錯誤或逾時。
加入成員必須使用與種子成員在
group_replication_group_seeds
選項中宣傳的相同的協定(IPv4 或 IPv6)與種子成員通訊。為了群組複寫的 IP 位址權限,種子成員上的允許清單必須包含加入成員的 IP 位址,以用於種子成員提供的協定,或解析為該協定位址的主機名稱。如果該位址的協定與種子成員宣傳的協定不符,則除了加入成員的group_replication_local_address
之外,還必須設定並允許此位址或主機名稱。如果加入成員沒有針對適當協定的允許位址,則會拒絕其連線嘗試。有關更多資訊,請參閱 第 20.6.4 節「群組複寫 IP 位址權限」。設定
group_replication_bootstrap_group
指示外掛程式是否引導群組。在這種情況下,即使 s1 是群組的第一個成員,我們也會在選項檔案中將此變數設定為關閉。相反地,我們會在實例執行時設定group_replication_bootstrap_group
,以確保只有一個成員實際引導群組。重要事項在任何時間,
group_replication_bootstrap_group
變數只能在屬於群組的一個伺服器實例上啟用,通常是您第一次引導群組時(或在整個群組關閉並重新啟動時)。如果您多次引導群組,例如當多個伺服器實例都設定此選項時,它們可能會建立人工的腦裂情境,其中存在兩個具有相同名稱的不同群組。在第一個伺服器實例上線後,請務必將group_replication_bootstrap_group=off
設定為關閉。
本教學課程中描述的系統變數是啟動新成員所需的設定,但還有更多系統變數可用於設定群組成員。這些變數列在 第 20.9 節「群組複寫變數」中。
許多系統變數(一些特定於群組複寫,另一些則不是)是群組範圍的設定,在所有群組成員上都必須具有相同的值。如果群組成員為其中一個系統變數設定了值,並且加入成員為其設定了不同的值,則加入成員將無法加入群組,並會傳回錯誤訊息。如果群組成員為此系統變數設定了值,並且加入成員不支援該系統變數,則它也無法加入群組。所有這些系統變數都在 第 20.9 節「群組複寫變數」中識別。