在以下章節中,我們提供了有關 MySQL 複製最常被問到的問題的解答。
- A.14.1. 複本是否必須始終連線到來源?
- A.14.2. 我是否必須在來源和複本上啟用網路才能啟用複製?
- A.14.3. 我如何知道複本與來源相比晚了多少?換句話說,我如何知道複本複製的最後一個語句的日期?
- A.14.4. 如何強制來源阻止更新,直到複本趕上進度?
- A.14.5. 設定雙向複製時,我應該注意哪些問題?
- A.14.6. 我如何使用複製來提升系統的效能?
- A.14.7. 我應該如何準備我自己的應用程式中的用戶端程式碼,以使用可增強效能的複製?
- A.14.8. MySQL 複製何時以及在多大程度上可以提升系統的效能?
- A.14.9. 我如何使用複製來提供冗餘或高可用性?
- A.14.10. 我如何判斷複製來源伺服器使用的是以語句為基礎還是以列為基礎的二進位記錄格式?
- A.14.11. 我如何指示複本使用以列為基礎的複製?
- A.14.12. 我如何防止 GRANT 和 REVOKE 語句複製到複本機器?
- A.14.13. 複製是否可在混合作業系統上運作(例如,來源在 Linux 上執行,而複本在 macOS 和 Windows 上執行)?
- A.14.14. 複製是否可在混合硬體架構上運作(例如,來源在 64 位元機器上執行,而複本在 32 位元機器上執行)?
A.14.1. | 複本是否必須始終連線到來源? |
不,它不是必須的。複本可以關閉或斷線數小時甚至數天,然後重新連線並趕上更新。例如,您可以透過撥號連線設定來源/複本關聯,其中連線僅零星且短暫地啟動。這表示,除非您採取一些特殊措施,否則無法保證複本在任何給定時間都與來源同步。 為了確保已斷線的複本可以趕上進度,您不得從來源中移除尚未複製到複本的資訊的二進位記錄檔。非同步複製只有在複本能夠從上次讀取事件的位置繼續讀取二進位記錄時才能運作。 | |
A.14.2. | 我是否必須在來源和複本上啟用網路才能啟用複製? |
是的,必須在來源和複本上啟用網路。如果未啟用網路,複本將無法連線到來源並傳輸二進位記錄。確認 | |
A.14.3. | 我如何知道複本與來源相比晚了多少?換句話說,我如何知道複本複製的最後一個語句的日期? |
檢查 當複製 SQL 執行緒執行從來源讀取的事件時,它會將自己的時間修改為事件時間戳記。(這就是為什麼 | |
A.14.4. | 如何強制來源阻止更新,直到複本趕上進度? |
使用下列程序
| |
A.14.5. | 設定雙向複製時,我應該注意哪些問題? |
MySQL 複製目前不支援來源和複本之間的任何鎖定通訊協定,以保證分散式(跨伺服器)更新的原子性。換句話說,用戶端 A 可能對共同來源 1 進行更新,同時,在它傳播到共同來源 2 之前,用戶端 B 可能對共同來源 2 進行更新,導致用戶端 A 的更新與在共同來源 1 上的運作方式不同。因此,當用戶端 A 的更新到達共同來源 2 時,它會產生與共同來源 1 上的表格不同的表格,即使來自共同來源 2 的所有更新也已傳播。這表示您不應將兩個伺服器以雙向複製關係鏈接在一起,除非您確定您的更新可以安全地以任何順序進行,或者除非您在用戶端程式碼中以某種方式處理排序錯誤的更新。 您也應該了解,就更新而言,雙向複製實際上並不會大幅提升效能(如果有的話)。每個伺服器都必須執行相同數量的更新,就像您讓單一伺服器執行一樣。唯一的差異是鎖定爭用稍微減少,因為來自另一個伺服器的更新會序列化在一個複製執行緒中。即使這種好處也可能會被網路延遲抵銷。 | |
A.14.6. | 我如何使用複製來提升系統的效能? |
設定一台伺服器作為來源,並將所有寫入操作導向該伺服器。然後根據您的預算和機架空間配置盡可能多的副本伺服器,並在來源伺服器和副本伺服器之間分配讀取操作。您也可以使用 | |
A.14.7. | 我應該如何準備我的應用程式中的客戶端程式碼,以使用效能增強的複製功能? |
請參閱有關使用複製作為擴展解決方案的指南,第 19.4.5 節,「使用複製進行擴展」。 | |
A.14.8. | MySQL 複製功能何時以及能在多大程度上改善我的系統效能? |
MySQL 複製功能對於處理頻繁讀取和不頻繁寫入的系統最為有利。理論上,透過使用單一來源/多個副本的設定,您可以透過新增更多副本來擴展系統,直到網路頻寬耗盡,或者更新負載增長到來源伺服器無法處理的程度。 若要判斷在額外的好處開始趨於平緩之前,您可以使用的副本數量,以及您可以多大程度改善網站效能,您必須了解您的查詢模式,並透過基準測試來經驗性地判斷一般來源伺服器和一般副本伺服器上的讀取和寫入吞吐量之間的關係。此處的範例顯示了一個簡化的計算,說明您可以使用複製功能在假設的系統中獲得的結果。讓 假設系統負載由 10% 的寫入和 90% 的讀取組成,並且我們透過基準測試判斷出
9 *
最後一個方程式表示在每秒最大可能讀取速率為 1200 次且讀寫比為 9 比 1 的情況下, 此分析得出以下結論
這些計算假設無限的網路頻寬,並忽略了其他一些可能在您的系統上很重要的因素。在許多情況下,您可能無法執行類似剛才顯示的計算,來準確預測如果您新增
| |
A.14.9. | 我如何使用複製功能來提供冗餘或高可用性? |
您如何實作冗餘完全取決於您的應用程式和情況。高可用性解決方案(具有自動容錯移轉)需要主動監控以及自訂指令碼或協力廠商工具,以提供從原始 MySQL 伺服器到副本伺服器的容錯移轉支援。 若要手動處理此流程,您應該能夠透過變更您的應用程式以與新伺服器對話,或者透過將 MySQL 伺服器的 DNS 從故障伺服器調整到新伺服器,來從故障來源切換到預先設定的副本。 如需更多資訊和一些範例解決方案,請參閱 第 19.4.8 節,「容錯移轉期間切換來源」。 | |
A.14.10. | 我如何判斷複製來源伺服器使用的是基於語句的二進位記錄格式還是基於行的二進位記錄格式? |
檢查
顯示的值始終是 | |
A.14.11. | 我如何告知副本使用基於行的複製? |
副本會自動知道要使用哪種格式。 | |
A.14.12. | |
使用 | |
A.14.13. | 複製功能是否適用於混合作業系統(例如,來源伺服器在 Linux 上執行,而副本伺服器在 macOS 和 Windows 上執行)? |
是的。 | |
A.14.14. | 複製功能是否適用於混合硬體架構(例如,來源伺服器在 64 位元機器上執行,而副本伺服器在 32 位元機器上執行)? |
是的。 |