群組複製的版本取決於與群組複製外掛程式配套的 MySQL 伺服器版本。例如,如果成員正在執行 MySQL 9.0.0,則該版本為群組複製外掛程式的版本。若要檢查群組成員上的 MySQL 伺服器版本,請發出
SELECT MEMBER_HOST,MEMBER_PORT,MEMBER_VERSION FROM performance_schema.replication_group_members;
+-------------+-------------+----------------+
| member_host | member_port | member_version |
+-------------+-------------+----------------+
| example.com | 3306 | 9.0.0 |
+-------------+-------------+----------------+
如需了解 MySQL 伺服器版本並選擇版本的相關指引,請參閱第 2.1.2 節「要安裝哪個 MySQL 版本和發行版」。
為獲得最佳的相容性和效能,群組的所有成員都應執行相同版本的 MySQL 伺服器,因此也應執行相同版本的群組複製。但是,當您正在升級線上群組時,為了最大化可用性,您可能需要同時執行具有不同 MySQL 伺服器版本的成員。根據 MySQL 版本之間所做的變更,您可能會在此情況下遇到不相容的問題。例如,如果某個功能在主要版本之間已遭棄用,則在群組中結合這些版本可能會導致依賴遭棄用功能的成員失敗。相反地,當群組中有執行較舊 MySQL 版本的讀寫成員時,寫入執行較新 MySQL 版本的成員可能會導致缺少新版本中所引入函數的成員出現問題。
為了防止這些問題,群組複製包含相容性原則,可讓您安全地在同一個群組中結合執行不同 MySQL 版本的成員。成員會套用這些原則來決定是否要正常加入群組、以唯讀模式加入群組,或者不加入群組,具體取決於哪種選擇可以使加入的成員和群組的現有成員安全運作。在升級情境中,每個伺服器都必須離開群組、升級,並以其新的伺服器版本重新加入群組。此時,成員會套用其新伺服器版本的原則,這些原則可能已與其最初加入群組時套用的原則不同。
身為管理員,您可以藉由適當設定伺服器並發出START GROUP_REPLICATION
陳述式,來指示任何伺服器嘗試加入任何群組。是否加入群組、不加入群組或以唯讀模式加入群組的決定,是由您嘗試將成員新增至群組後,由加入的成員本身做出並實作的。加入的成員會接收目前群組成員的 MySQL 伺服器版本相關資訊、評估其與這些成員的相容性,並套用其自身 MySQL 伺服器版本中使用的原則 (而非現有成員使用的原則) 來決定其是否相容。
加入成員在嘗試加入群組時套用的相容性原則如下
如果成員執行的 MySQL 伺服器版本與現有群組成員執行的最低版本相同,則成員會正常加入群組。
如果成員執行的 MySQL 伺服器版本高於現有群組成員執行的最低版本,則成員會加入群組,但仍保持在唯讀模式。只有當群組在多主節點模式下執行時,此行為才會有所不同,因為在單主節點模式下執行的群組中,新加入的成員在任何情況下預設為唯讀。
成員在檢查相容性時會將軟體的整個 major.minor.release 版本納入考量。
在具有使用不同 MySQL 伺服器版本的成員的多主節點模式群組中,群組複製會自動管理成員的讀寫和唯讀狀態。如果成員離開群組,則會自動將執行目前最低版本的成員設定為讀寫模式。當您使用group_replication_switch_to_multi_primary_mode()
函數,將在單主節點模式下執行的群組變更為在多主節點模式下執行時,群組複製會自動將成員設定為正確的模式。如果成員執行的 MySQL 伺服器版本高於群組中存在的最低版本,則會自動將成員置於唯讀模式,而執行最低版本的成員則會置於讀寫模式。