MySQL Proxy 0.7.0 即將發布,筆者從 BZR 獲取源碼編譯測試,配置讀寫分離過程中遇到諸多坑,網上資料極少,最終在開發環境穩定運行,記錄分享。
(critical) proxy-plugin.c:1367: .address is deprecated. Use .src.name or .dst.name instead
(critical) (read_query) ... .address is deprecated ...
(critical) proxy-plugin.c.1115: I have no server backend, closing connection
啟動頻報 MySQL Server has gone away。
自帶 rw-splitting.lua 仍為 0.6.1 版本,API 已變更:
proxy.global.backends[i].addressproxy.global.backends[i].src.name / .dst.namerw-splitting.lua 替換舊版。.address 為 .src.name/.dst.name。PHP PDO 連接 Proxy 時,查詢隨機無結果,單獨連 MySQL 正常,日志無有用信息。
使用 PDO 模擬預處理(客戶端模擬),而非原生預處理:
$pdo = new PDO($dsn, $user, $pass, [
PDO::ATTR_EMULATE_PREPARES => true // 關鍵
]);
官方稱模擬模式性能反而更好,可作安慰獎。
偶發 Crash,需人工重啟。
啟動參數加上 --keepalive:
mysql-proxy --keepalive --proxy-lua-script=rw-splitting.lua ...
進程掛掉自動拉起,保證服務可用性。
proxy.pool.no_backends、max_idle_time 等參數。MySQL Proxy 輕量級、可編程性強,適合中小規模讀寫分離。但 Lua 生態滯後、文檔缺失是硬傷。若團隊有運維能力,ProxySQL 等新一代中間件在功能豐富度、穩定性、社區支持上更有優勢。