天天看點

mysql-proxy 簡介# 背景# 簡介# 用途# 不足

# 背景

今天同僚分享的主題就是mysql-proxy,于是下來自己了解下,不求精通,隻求知道這個玩意

# 簡介

mysql-proxy是mysql官方提供的mysql中間件服務,上遊可接入若幹個mysql-client,後端可連接配接若幹個mysql-server。

它使用mysql協定,任何使用mysql-client的上遊無需修改任何代碼,即可遷移至mysql-proxy上。

mysql-proxy最基本的用法,就是作為一個請求攔截,請求中轉的中間層:

mysql-proxy 簡介# 背景# 簡介# 用途# 不足

進一步的,mysql-proxy可以分析與修改請求。攔截查詢和修改結果,需要通過編寫Lua腳本來完成。

mysql-proxy允許使用者指定Lua腳本對請求進行攔截,對請求進行分析與修改,它還允許使用者指定Lua腳本對伺服器的傳回結果

進行修改,加入一些結果集或者去除一些結果集均可。

是以說,根本上,mysql-proxy是一個官方提供的架構,具備良好的擴充性,可以用來完成:

  • sql攔截與修改
  • 性能分析與監控
  • 讀寫分離
  • 請求路由

# 用途

1. 分享的同僚使用proxy的目的是,因為測試環境碰到了測試/開發同學不小心全表update/delete操作,導緻測試資料異常,進而影響項目進度,于是他接入mysql-proxy對sql語句進行了攔截檢查,并可以将sql語句發送到DBA提供的一個sql review服務中去判斷sql語句是否有問題

2. 之前還有這麼一段經曆,之前訂單經過拆庫操作,訂單表分為了128個庫,是根據訂單号去拆庫的,然而不是所有的表都有訂單号(曆史架構的鍋),如有個需求是根據手機号碼去查詢訂單号,導緻要周遊查詢128去判斷是否存在,那麼就需要proxy介入,當時使用的是阿裡的mycat中間件

# 不足

由于加入了一層proxy會導緻網絡請求的增加消耗,是以性能造成一定的影響;

雖千萬人,吾往矣!