存在問題
主從複製架構多次出現複製停滯問題如1032錯誤和1062錯誤,其中,1032錯誤是在主庫成功執行後在從庫update或delete時發現從庫上找不到這筆記錄,1062錯誤是在主庫insert完成後在從庫執行時出現主鍵衝突無法成功insert,這些問題可透過跳過錯誤和前面的複製資料校驗修復來解決,但是這些問題產生的直接原因是主從庫資料不一致。這種不一致除了邏輯複製本身可能出現的資料不一致,還有個原因是業務側或開發人員違規在備庫上直接進行增刪改操作導致的。
在主從複製架構中,主從庫透過VIP綁定實現指定庫作為主庫,提供讀寫,從庫起backup的作用,當主庫出現問題時,VIP切換到從庫,從庫提供讀寫,否則從庫只是backup。正常情況下,我們不允許開發人員直接透過固定IP登入從庫操作,但實際工作中往往又難以規避,那麼如何從技術角度去避免開發人員在備庫操作呢?又如何在避免的同時不影響高可用架構的正常運作和故障切換呢?
2.架構配置最佳化
(1)直接解決方法
解決上述問題的直接方法是考慮進行架構配置最佳化,即將從庫可讀寫的狀態配置為唯讀狀態。
MySQL官網關於只讀有下列描述:
1.Whenthe read_only system variable is enabled, the server permits no client updatesexcept from users who have the SUPER privilege. 只读情况下,super权限可读写。 2.Updates performed by slave threads, if theserver is a replication slave. In replication setups, it can be useful toenable read_only on slave servers to ensure that slaves accept updates only from themaster server and not from clients. 不影响主从复制线程的读写。
開啟只讀後,除了super權限帳戶和複製執行緒等不受影響外,業務側開發人員和其它人員即使登入備庫也無法操作備庫資料。
MySQL [db1]> show global variables like'read_only%'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | read_only | ON | +---------------+-------+ 1 row in set (0.00 sec) MySQL [test]> insert child values('1','12'); ERROR 1290 (HY000): The MySQL server is running withthe --read-only option so it cannot execute thisstatement
(2)設定為只讀後如何進行完美故障切換?
從庫只讀可避免違規操作,但面臨的問題是如果主庫發生問題,VIP要切換到從庫上,但那時從庫只讀會導致資料庫對外服務不可用,因此在切換時需要實現取消從庫只讀同時設定主庫只讀的功能。
以Keepalived+MySQL雙主(主從)架構為例,正常運作時,VIP在Master1上,Master1為可讀寫狀態,Master2為readonly狀態,一旦Master1發生問題,VIP要自動切換至Master2,切換前要完成兩個步驟:1.將Master1置為readonly;2.取消Master2的readonly。
3.自動化實現思路
對於一主一從架構,故障切換需要手工進行,因此上述兩步也可以手工操作;但Keepalived+MySQL雙主(主從)架構中,已實現故障的自動監測操作和VIP自動切換,上述兩個步驟也應該植入腳本中自動化。
我們主要需在自動監控和切換腳本中植入對資料庫開啟readonly和關閉readonly的函數,主要寫入語句“set global read_only=ON”和“set globalread_only=OFF”,同時注意在設定狀態之前先判斷現有狀態,shell呼叫語句「show variables like 'read_only';」得到讀寫狀態,確認讀寫狀態後再設定readonly參數為所需狀態即可,注意這些狀態設定的觸發自訂在監控到故障並執行切換之前。
上述思路現已完成自動化轉換,親測成功,說明思路正確。
以上就是主從複製問題引起的架構優化思考的內容,更多相關內容請關注PHP中文網(www.php.cn)!

存儲過程是MySQL中的預編譯SQL語句集合,用於提高性能和簡化複雜操作。 1.提高性能:首次編譯後,後續調用無需重新編譯。 2.提高安全性:通過權限控制限制數據表訪問。 3.簡化複雜操作:將多條SQL語句組合,簡化應用層邏輯。

MySQL查詢緩存的工作原理是通過存儲SELECT查詢的結果,當相同查詢再次執行時,直接返回緩存結果。 1)查詢緩存提高數據庫讀取性能,通過哈希值查找緩存結果。 2)配置簡單,在MySQL配置文件中設置query_cache_type和query_cache_size。 3)使用SQL_NO_CACHE關鍵字可以禁用特定查詢的緩存。 4)在高頻更新環境中,查詢緩存可能導致性能瓶頸,需通過監控和調整參數優化使用。

MySQL被廣泛應用於各種項目中的原因包括:1.高性能與可擴展性,支持多種存儲引擎;2.易於使用和維護,配置簡單且工具豐富;3.豐富的生態系統,吸引大量社區和第三方工具支持;4.跨平台支持,適用於多種操作系統。

MySQL數據庫升級的步驟包括:1.備份數據庫,2.停止當前MySQL服務,3.安裝新版本MySQL,4.啟動新版本MySQL服務,5.恢復數據庫。升級過程需注意兼容性問題,並可使用高級工具如PerconaToolkit進行測試和優化。

MySQL備份策略包括邏輯備份、物理備份、增量備份、基於復制的備份和雲備份。 1.邏輯備份使用mysqldump導出數據庫結構和數據,適合小型數據庫和版本遷移。 2.物理備份通過複製數據文件,速度快且全面,但需數據庫一致性。 3.增量備份利用二進制日誌記錄變化,適用於大型數據庫。 4.基於復制的備份通過從服務器備份,減少對生產系統的影響。 5.雲備份如AmazonRDS提供自動化解決方案,但成本和控制需考慮。選擇策略時應考慮數據庫大小、停機容忍度、恢復時間和恢復點目標。

MySQLclusteringenhancesdatabaserobustnessandscalabilitybydistributingdataacrossmultiplenodes.ItusestheNDBenginefordatareplicationandfaulttolerance,ensuringhighavailability.Setupinvolvesconfiguringmanagement,data,andSQLnodes,withcarefulmonitoringandpe

在MySQL中優化數據庫模式設計可通過以下步驟提升性能:1.索引優化:在常用查詢列上創建索引,平衡查詢和插入更新的開銷。 2.表結構優化:通過規範化或反規範化減少數據冗餘,提高訪問效率。 3.數據類型選擇:使用合適的數據類型,如INT替代VARCHAR,減少存儲空間。 4.分區和分錶:對於大數據量,使用分區和分錶分散數據,提升查詢和維護效率。

tooptimizemysqlperformance,lofterTheSeSteps:1)inasemproperIndexingTospeedUpqueries,2)使用ExplaintplaintoAnalyzeandoptimizequeryPerformance,3)ActiveServerConfigurationStersLikeTlikeTlikeTlikeIkeLikeIkeIkeLikeIkeLikeIkeLikeIkeLikeNodb_buffer_pool_sizizeandmax_connections,4)


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

禪工作室 13.0.1
強大的PHP整合開發環境

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

記事本++7.3.1
好用且免費的程式碼編輯器