使用 mysql-proxy 监听 mysql 查询
什么是 mysql-proxy?
mysql-proxy是mysql官方提供的mysql中间件服务,上游可接入若干个mysql-client,后端可连接若干个mysql-server。
它使用mysql协议,任何使用mysql-client的上游无需修改任何代码,即可迁移至mysql-proxy上。
mysql-proxy最基本的用法,就是作为一个请求拦截,请求中转的中间层:
进一步的,mysql-proxy可以分析与修改请求。拦截查询和修改结果,需要通过编写Lua脚本来完成。
mysql-proxy允许用户指定Lua脚本对请求进行拦截,对请求进行分析与修改,它还允许用户指定Lua脚本对服务器的返回结果
进行修改,加入一些结果集或者去除一些结果集均可。
所以说,根本上,mysql-proxy是一个官方提供的框架,具备良好的扩展性,可以用来完成:
-
sql拦截与修改
-
性能分析与监控
-
读写分离
-
请求路由
使用方法
1、下载 mysql-proxy
https://github.com/mysql/mysql-proxy/releases
2、解压后进入 mysql-proxy 目录
我们可以使用 mysql-proxy --help-all 查看帮助
3、下载的安装包里面包含了一些可用的 lua 脚本,我们下面以监听查询时间为例子启动并监听本地 mysql
可用的一些 lua 脚本:
php 测试文件(进行一个简单的 mysql 查询,然后我们可以在监听的终端看到查询语句以及查询时间输出)
启动 mysql-proxy 并监听查询时间
运行了 php 文件之后,我们可以看到如上图的输出。(本地建立了一个 名字为 proxy 的数据库,里面有一个名字为 proxy 的表)
更新:上图的 --lua-path 参数要去掉,下图监听 prepare statement,同时监听远程数据库
监听远程的 sql 查询:指定 --proxy-backend-addresses=127.0.0.1:3306 参数,具体根据实际修改,本地还是连接 127.0.0.1:4040
3、测试到此为止了,本人是打算将其用于项目 sql 监控,在进行 查询 性能分析的时候会比较方便。
4、其他作用:读写分离等