複寫允許將一個 MySQL 資料庫伺服器(稱為來源)的資料複製到一個或多個 MySQL 資料庫伺服器(稱為複本)。 複寫預設為非同步;複本不需要永久連線以接收來自來源的更新。 根據組態,您可以複寫所有資料庫、選定的資料庫,甚至資料庫中選定的資料表。
MySQL 中複寫的優點包括
橫向擴展解決方案 - 將負載分散到多個複本以提升效能。在這種環境下,所有寫入和更新都必須在來源伺服器上進行。但是,讀取操作可以在一個或多個複本上進行。這種模式可以提高寫入效能(因為來源專用於更新),同時顯著提高跨越多個複本的讀取速度。
資料安全性 - 因為複本可以暫停複製程序,因此可以在複本上執行備份服務,而不會損壞對應的來源資料。
分析 - 可以在來源上建立即時資料,同時可以在複本上進行資訊分析,而不會影響來源的效能。
長距離資料分發 - 您可以使用複製為遠端站點建立資料的本地副本以供使用,而無需永久存取來源。
有關如何在這些情境中使用複製的資訊,請參閱第 19.4 節,「複製解決方案」。
MySQL 9.0 支援不同的複製方法。傳統的方法是基於複製來自來源二進位日誌的事件,並且需要在來源和複本之間同步日誌檔案及其中的位置。較新的方法基於全域交易識別碼 (GTID),它是交易性的,因此不需要處理日誌檔案或這些檔案中的位置,這大大簡化了許多常見的複製任務。只要在來源上提交的所有交易也都已應用在複本上,使用 GTID 的複製就能保證來源和複本之間的一致性。有關 MySQL 中 GTID 和基於 GTID 的複製的更多資訊,請參閱第 19.1.3 節,「使用全域交易識別碼進行複製」。有關使用基於二進位日誌檔案位置的複製的資訊,請參閱第 19.1 節,「設定複製」。
MySQL 中的複製支援不同的同步類型。原始的同步類型是單向、非同步複製,其中一個伺服器充當來源,而一個或多個其他伺服器充當複本。這與 NDB Cluster 的特性同步複製形成對比(請參閱第 25 章,《MySQL NDB Cluster 9.0》)。在 MySQL 9.0 中,除了內建的非同步複製之外,還支援半同步複製。使用半同步複製時,在來源上執行的提交會阻塞,然後才返回執行交易的工作階段,直到至少有一個複本確認它已收到並記錄交易的事件;請參閱第 19.4.10 節,「半同步複製」。MySQL 9.0 還支援延遲複製,使得複本故意落後於來源至少一段指定的時間;請參閱第 19.4.11 節,「延遲複製」。對於需要同步複製的情境,請使用 NDB Cluster(請參閱第 25 章,《MySQL NDB Cluster 9.0》)。
有多種解決方案可用於設定伺服器之間的複製,而最佳使用方法取決於是否存在資料以及您使用的引擎類型。有關可用選項的更多資訊,請參閱第 19.1.2 節,「設定基於二進位日誌檔案位置的複製」。
複製格式有兩種核心類型:基於陳述式的複製 (SBR),它會複製整個 SQL 陳述式;以及基於列的複製 (RBR),它只會複製已變更的列。您也可以使用第三種變體,即混合式複製 (MBR)。有關不同複製格式的更多資訊,請參閱第 19.2.1 節,「複製格式」。
複製是透過許多不同的選項和變數來控制的。有關更多資訊,請參閱第 19.1.6 節,「複製和二進位日誌選項和變數」。可以對複製拓撲套用額外的安全措施,如第 19.3 節,「複製安全性」所述。
您可以使用複製來解決許多不同的問題,包括效能、支援不同資料庫的備份,以及作為減輕系統故障的更大解決方案的一部分。有關如何解決這些問題的資訊,請參閱第 19.4 節,「複製解決方案」。
有關在複製期間如何處理不同資料類型和陳述式的注意事項和提示,包括複製功能、版本相容性、升級以及潛在問題及其解決方案的詳細資訊,請參閱第 19.5 節,「複製注意事項和提示」。對於那些剛接觸 MySQL 複製的人經常提出的一些問題的解答,請參閱第 A.14 節,「MySQL 9.0 常見問題:複製」。
有關複製的實作、複製如何運作、二進位日誌的處理和內容、背景執行緒以及用於決定如何記錄和複製陳述式的規則的詳細資訊,請參閱第 19.2 節,「複製實作」。