MySQL主從復制能完美解決數據庫的單點問題嗎?
沒有完美的解決方案。只有合適的解決方案。
當使用主從時,實際已經放棄了強一致性了。(既然題主只問單點問題,就不考慮訪問量問題。即假設主從復制完全能支撐目前的系統訪問。)
一般數據庫主從設置:
主庫可讀可寫
從庫只讀即系統既可以從主庫獲取數據,也可以從從庫獲取數據。數據寫入主庫后,自動同步到從庫。
這構成了一個簡單的分布式系統。根據cap定理,只能三選一。主從之間是最終一致,如果強一致,不但不會提高系統可用性,反而降低了系統可用性。
我們看上面的主從結構可能會出現哪些問題:
系統寫入主庫,再從主庫查詢。這就是個單點數據庫,沒有什么影響。
系統寫入主庫,再從從庫查:- 如果數據已經同步,則沒有影響
- 如果數據還未同步,則查詢的是老數據
- 如果同步出現了問題,則主從斷開。如果系統無法感知,則查詢到的可能一直是老數據。這里就需要對同步進行監控,當同步出現問題時,及時處理
主庫掛掉。從庫需要及時感知,并替換主庫。同時需要再通知運維人員處理,否則又變成了單點。
從庫掛掉。主庫數據無法同步到從庫。同樣需要及時通知處理
如果主從切換自動化,那單點故障的概率也只是降低50%而已(主庫或備庫掛掉沒人恢復的話)。