以實際情況切入,檢視MySQL複製問題的解決方案

tianxiaoxu發表於2018-10-08

MySQL最常見的操作之一就是在主伺服器和從伺服器之間複製資料庫。雖然大多數此類連線都很容易建立和維護,但有時也會出現問題,例如某些主資料可能無法在從屬裝置上覆制或者讀取請求可能會路由到主裝置而不是伺服器。

問題出現很容易,但是想要找到解決複製失敗的方法卻需要我們花些心思。

複製是所有資料庫的最基本操作,它主要是將資料從一個資料庫伺服器(主伺服器)複製到一個或多個其他資料庫(從伺服器)。該過程透過允許在多個從屬伺服器之間分配負載來進行讀取、透過將主伺服器限制為寫入來提高效能。

複製的好處包括透過從備份來提高安全性;分析可以在從資料庫執行且不影響主資料庫的效能表現;廣泛的資料分發,無需訪問主資料即可完成……

和很多資料庫管理操作一樣,複製有時也會不按預期進行,MySQL參考手冊中的“複製故障排除”提示了我們當複製出現問題時,應該檢查錯誤日誌中的哪些資訊。如果錯誤日誌未指向解決方案,可透過發出SHOW MASTER STATUS語句在主伺服器中啟用二進位制日誌記錄,如果已啟用,那麼“status”不為零, 如果沒有,請確保主伺服器正在執行--log-bin選項。

除此之外,該手冊還提供了其他幾個複製故障排除步驟:

  • 主伺服器和從伺服器都必須以--server-id選項啟動,並且每個伺服器必須具有唯一的ID值;

  • 執行SHOW SLAVE STATUS以確保Slave_IO_Running和Slave_SQL_Running值均為“yes”;

  • 執行SHOW_PROCESSLIST並檢視State列以驗證從站是否正在連線到主站;

  • 如果一個語句在主伺服器上成功但在從伺服器上失敗,那麼核心選項是執行完整的資料庫重同步,這需要刪除從伺服器的資料庫並從主伺服器複製一個新的快照。

解決實際的MySQL複製問題

當MySQL主從連線有序時,為什麼主裝置上的資料沒有被複制到從裝置上呢?我們以Stack Overflow帖子中提到的問題為例,來看看實際的MySQL複製問題應該如何解決。

第一步是在master資料庫上執行“show master status”或“show master status \ G”以獲取從站的正確值,根據上圖反映的從站狀態,從站已連線到主站並等待日誌事件。同步正確的日誌檔案位置應該恢復到從伺服器的複製。

為了確保良好的同步,停止主日誌檔案,轉儲資料庫,記錄主日誌檔案的位置,重新啟動主日誌檔案,將資料庫匯入從模式,並以正確的主日誌檔案位置啟動從模式。

2014年3月釋出的另一個Stack Overflow帖子提供了使用JDBC驅動程式的主/從設定,其中標記為只讀的事務仍在ping主裝置。由於MySQL JDBC驅動程式正在管理與物理伺服器(主伺服器和從伺服器)的連線,因此連線池和Spring事務管理器不知道資料庫連線是否連結到多個伺服器。

解決方案是將控制權返回給Spring,之後提交連線上的事務。事務除錯訊息將指示,只要連線處於只讀模式,查詢將被路由到從伺服器。透過在連線返回到池之前重置連線,清除只讀模式,最後一條日誌訊息將顯示查詢現在正被路由到主伺服器。

來自 “ https://dzone.com/articles/troubleshooting-problem ”,原文連結:http://blog.itpub.net/31137683/viewspace-2215576/,如需轉載,請註明出處,否則將追究法律責任。

相關文章