使用 mysql-proxy 监听 mysql 查询

Posted 白桂任的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用 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、其他作用:读写分离等

 

以上是关于使用 mysql-proxy 监听 mysql 查询的主要内容,如果未能解决你的问题,请参考以下文章

可以登录mysql,却查不到监听

使用mysql-proxy实现mysql的读写分离

使用mysql-proxy实现读写分离

使用mysql-proxy实现mysql的读写分离

使用mysql-proxy实现mysql的读写分离

mysql-proxy数据库中间件架构