文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  半同步複製

19.4.10 半同步複製

除了內建的非同步複製之外,MySQL 8.4 還支援由外掛程式實作的半同步複製介面。本節討論半同步複製是什麼及其運作方式。以下各節涵蓋半同步複製的管理介面,以及如何安裝、設定和監控它。

MySQL 複製預設為非同步。來源將事件寫入其二進位日誌,而複本會在準備好時請求它們。來源不知道複本是否或何時擷取和處理交易,並且無法保證任何事件會到達任何複本。使用非同步複製,如果來源當機,它已提交的交易可能尚未傳輸到任何複本。在這種情況下,從來源到複本的容錯移轉可能會導致容錯移轉到相對於來源缺少交易的伺服器。

使用完全同步複製,當來源提交交易時,所有複本也已提交交易,然後來源才會返回執行交易的工作階段。完全同步複製表示隨時都可能從來源容錯移轉到任何複本。完全同步複製的缺點是完成交易可能會有很大的延遲。

半同步複製介於非同步複製和完全同步複製之間。來源會等待直到至少一個複本收到並記錄事件(所需的複本數量是可設定的),然後才提交交易。來源不會等待所有複本確認收到,並且只需要複本的確認,而不是事件已在複本端完全執行和提交。因此,半同步複製保證如果來源當機,它已提交的所有交易都已傳輸到至少一個複本。

與非同步複製相比,半同步複製提供更好的資料完整性,因為當提交成功返回時,就知道資料至少存在於兩個位置。在半同步來源收到所需數量的複本確認之前,交易會暫停並且不會提交。

與完全同步複製相比,半同步複製速度更快,因為它可以設定為平衡您對資料完整性的要求(確認收到交易的複本數量)與提交速度,由於需要等待複本,提交速度會較慢。

重要事項

使用半同步複製,如果來源當機且執行複本的容錯移轉,則不應將失敗的來源重複使用為複製來源,而應捨棄。它可能具有未被任何複本確認的交易,因此在容錯移轉之前未提交。

如果您的目標是實作一個容錯的複製拓樸,其中所有伺服器都以相同的順序接收相同的交易,並且當伺服器崩潰後可以重新加入群組並自動更新到最新狀態,您可以使用群組複製來實現此目標。如需詳細資訊,請參閱第 20 章,群組複製

與非同步複製相比,半同步複製的效能影響是以增加資料完整性為代價。減速的幅度至少是將提交傳送到副本並等待副本收到確認的 TCP/IP 來回時間。這表示半同步複製最適用於透過快速網路通訊的近距離伺服器,而最不適用於透過慢速網路通訊的遠距離伺服器。半同步複製也透過限制二進位日誌事件從來源傳送到副本的速度來限制繁忙的連線。當一個使用者過於繁忙時,這會使其速度變慢,這在某些部署情況下可能很有用。

來源及其副本之間的半同步複製運作方式如下

  • 副本在連線到來源時會指出它是否支援半同步。

  • 如果來源端啟用半同步複製,並且至少有一個半同步副本,則在來源上執行交易提交的執行緒會被封鎖並等待,直到至少有一個半同步副本確認它已收到該交易的所有事件,或直到逾時發生。

  • 副本僅在其事件已寫入其中繼日誌並刷新到磁碟後,才會確認收到交易的事件。

  • 如果發生逾時而沒有任何副本確認交易,則來源會還原為非同步複製。當至少有一個半同步副本趕上進度時,來源會返回半同步複製。

  • 必須在來源和副本端都啟用半同步複製。如果在來源上停用半同步複製,或在來源上啟用但沒有副本啟用,則來源會使用非同步複製。

當來源被封鎖(等待副本的確認)時,它不會返回執行交易的連線。當封鎖結束時,來源會返回到連線,然後該連線可以繼續執行其他語句。此時,交易已在來源端提交,並且至少有一個副本已確認收到其事件。來源在返回連線之前每個交易必須接收的副本確認數量是可設定的,預設為一個確認(請參閱第 19.4.10.2 節,「設定半同步複製」)。

在寫入二進位日誌的回滾後也會發生封鎖,當修改非交易表(nontransactional tables)的交易回滾時會發生這種情況。儘管回滾的交易對於交易表沒有影響,但仍會記錄下來,因為對非交易表的修改無法回滾,必須傳送到副本。

對於未在交易環境中發生的語句(即,當沒有使用START TRANSACTIONSET autocommit = 0啟動任何交易時),會啟用自動提交,並且每個語句都會隱式提交。使用半同步複製,來源會像對顯式交易提交一樣,對每個此類語句進行封鎖。

預設情況下,來源會在將二進位日誌同步到磁碟後,但在將交易提交到儲存引擎之前,等待副本確認收到交易。作為替代方案,您可以使用rpl_semi_sync_source_wait_point系統變數,將來源設定為在將交易提交到儲存引擎後才等待副本確認。此設定會影響複製特性以及用戶端在來源上可以看到的資料。如需詳細資訊,請參閱第 19.4.10.2 節,「設定半同步複製」

您可以透過啟用系統變數replication_sender_observe_commit_only來限制回呼,並啟用replication_optimize_for_static_plugin_config來新增共用鎖定並避免不必要的鎖定獲取,從而提高半同步複製的效能。隨著副本數量的增加,這些設定會有所幫助,因為鎖定的爭用會降低效能。半同步複製來源伺服器也可以透過啟用這些系統變數來獲得效能提升,因為它們使用與副本相同的鎖定機制。