程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> mysql proxy 實現讀寫分離

mysql proxy 實現讀寫分離

編輯:關於MYSQL數據庫

聽說MySQL proxy 0.7.0即將發布,正好前些日子從bzr上獲取mysql proxy的代碼編譯過, 看看當時bzr的版本號,和現在也差不了多少。在這期間,我又花了一些時間把MySQL配置成讀寫分離,出了不少狀況,由於使用的人不太多,解決問題超費勁——搜索不到有幫助的內容啊。

但是我可能是比較幸運的,最後成功的實現了讀寫分離,目前在開發環境運行的比較穩定,所以有必要做個筆記分享一下。
讀寫分離腳本的問題剛啟動MySQL proxy的時候,經常報錯 — “MySQL Server has gone away”。我進一步縮小了可能出問題的范圍(把環境簡化是很重要的查錯手段),比如只連接一個mysql,或者只連接本機的mysql,沒有太大幫助,最後是在MySQL proxy的日志文件中看到些蛛絲馬跡:

(critical) proxy-plugin.c:1367: (connect_server) [string "/usr/local/share/MySQL-proxy/r..."]:69: .address is deprecated. Use .src.name or .dst.name instead
(critical) (read_query) [string "/usr/local/share/MySQL-proxy/r..."]:179: .address is deprecated. Use .src.name or .dst.name instead
(critical) proxy-plugin.c.1115: I have no server backend, closing connection

在MySQL proxy的論壇上看到有人碰到類似的問題,很簡單,讀寫分離的lua腳本還是舊的,0.6.1時代的產物了,更糟糕的是,即便是即將發布的0.7.0,rw-splitting.lua也是舊版本的。lua腳本中的.address需要替換成.src.name或者.dst.name。

解決辦法 —— 下載更新之後的rw-splitting.lua,情況會好轉。
使用prepare方法無法獲得結果

我在測試代碼中采用PHP的pdo_mysql,單獨連接mysql是毫無問題的,然而配合mysql proxy使用則是屢屢受挫,查詢經常沒有結果返回,比較隨機,從日志中也找不到有幫助的內容。這次沒有找到解決辦法,所以我繞了過去,在連接MySQL 的時候使用偽prepare的方式:

PHP:
$option = array(PDO::ATTR_EMULATE_PREPARES => 1);

據稱emulate方式的性能比prepare要好,所以這也算安慰獎了。
專門的lua腳本分支

lua腳本開發滯後,是一個比較嚴重的問題,所以在郵件組上看到有個新的lua腳本分支出來 —— https://launchpad.Net/MySQL-proxy-lua-scripts。希望開發速度能跟上來。

keepalive參數

MySQL proxy還不算太穩定,偶爾crash我也不覺得驚訝,所以新增的keepalive參數很有用。在proxy啟動的時候,加上–keepalive參數,它便會努力保持proxy的運行狀態,停止了也會自動重啟。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved