在以下章節中,我們將提供關於 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 時,即使來自共同來源 2 的所有更新也都已傳播,也會產生與共同來源 1 不同的資料表。這表示您不應以雙向複製關係將兩個伺服器鏈接在一起,除非您確定您的更新可以安全地以任何順序發生,或者除非您在客戶端程式碼中以某種方式處理順序錯誤的更新。 您還應該意識到,雙向複製實際上並不會大幅提升(如果有的話)更新的效能。每個伺服器都必須執行與單一伺服器相同的更新次數。唯一的區別在於,由於來自其他伺服器的更新會在一個複製執行緒中序列化,因此鎖定競爭會稍微減少。即使此好處也可能被網路延遲抵消。 | |
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 位元機器上執行)? |
是。 |