首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL Proxy 實戰踩坑記:old_password、字元集、Failover、Crash 全解析

     編輯:MySQL 資料庫相關知識

環境

MySQL Proxy 0.6.x,架構:1 Master + 2 Slave 讀寫分離。

問題 1:無法連線 —— old_password

現象:帳號密碼正確但連線失敗。

排查:

# 檢查 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 字元

問題 2:字元集亂碼

現象:執行 SET NAMES utf8 無效,查詢結果亂碼。

解決:強制伺服器端字元集,跳過握手協商:

[mysqld]
skip-character-set-client-handshake
init_connect='SET NAMES utf8'
default-character-set=utf8

問題 3:Slave 掛掉導致全叢集不可用

現象:一台 Slave 停止,Proxy 持續報錯,所有連線失效。

根因:Proxy 0.6.x 預設後端失敗不自動剔除。

修補:替換 src/network-mysqld-proxy.c 中 NETWORK_MYSQLD_PLUGIN_PROTO 函數,加入後端健康檢查與自動摘除邏輯。官方提供修補版:network-mysqld-proxy-function.c。

問題 4:定期 Crash

現象:Proxy 悄悄停止工作,間隔較長。

推測:記憶體洩漏。

暫時方案:Cron 定期重啟:

0 3 * * * /usr/local/bin/mysql-proxy-restart.sh

遷移建議

  • MySQL Proxy 已停止維護,生產環境建議遷移至 ProxySQL 或 MaxScale
  • ProxySQL 功能豐富:查詢重寫、快取、鏡像、熔斷、多租戶
  • MaxScale 官方支援、企業級穩定、內建 Binlog Router、Read/Write Split Router
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved