MySQL Proxy 0.6.x,架構:1 Master + 2 Slave 讀寫分離。
現象:帳號密碼正確但連線失敗。
排查:
# 檢查 my.cnf
old_password = 1
# 或查詢密碼長度
SELECT LENGTH(Password) FROM mysql.user; -- 16 字元即為 old_password
解決:MySQL Proxy 不支援 old_password。升級帳號密碼雜湊:
SET PASSWORD FOR 'user'@'%' = PASSWORD('newpass'); -- 4.1+ 雙重 SHA1,41 字元
現象:執行 SET NAMES utf8 無效,查詢結果亂碼。
解決:強制伺服器端字元集,跳過握手協商:
[mysqld]
skip-character-set-client-handshake
init_connect='SET NAMES utf8'
default-character-set=utf8
現象:一台 Slave 停止,Proxy 持續報錯,所有連線失效。
根因:Proxy 0.6.x 預設後端失敗不自動剔除。
修補:替換 src/network-mysqld-proxy.c 中 NETWORK_MYSQLD_PLUGIN_PROTO 函數,加入後端健康檢查與自動摘除邏輯。官方提供修補版:network-mysqld-proxy-function.c。
現象:Proxy 悄悄停止工作,間隔較長。
推測:記憶體洩漏。
暫時方案:Cron 定期重啟:
0 3 * * * /usr/local/bin/mysql-proxy-restart.sh