【干货】Mysql的"事件探查器"-之Mysql-Proxy代理实战一(安装部署与实战sql拦截与性能监控)
1:资料参考
https://blog.csdn.net/coldljy/article/details/3168906
https://www.cnblogs.com/jwentest/p/8552075.html
https://www.cnblogs.com/ExMan/p/10396298.html
一:原理
Mysql-Proxy是一个处于你的client端和Mysql Server端之间的一个简单程序,它可以监测、分析和改变他们的通信。它使用灵活没有限制,常见的用途包括:负载平衡,故障、查询分析,查询过滤和修改等等。
Mysql -Proxy就是这么一个中间层代理,简单的说,Mysql-Proxy就是一个连接池,负责将前台应用的请求转发给后台数据库,并且通过使用lua脚本,可以实现复杂的连接控制和过滤,从而实现读写分离和负载平衡。对于应用来说,MySQL Proxy是完全透明的,应用则只需要连接到MySQL Proxy的监听端口即可。当然,这样proxy机器可能成为单点失效,但完全可以使用多个proxy机器做为冗余,在应用服务器的连接池配置中配置到多个proxy的连接参数即可。
mysql-proxy最基本的用法,就是作为一个请求拦截,请求中转的中间层:
根本上,mysql-proxy是一个官方提供的框架,具备良好的扩展性,可以用来完成:
-
sql拦截与修改
-
性能分析与监控
-
读写分离
-
请求路由
三:Mysql-Proxy安装
1、通过yum进行mysql数据库安装的时候,首先我们可以输入 yum list | grep mysql 命令来查看yum上提供的mysql数据库可下载的版本,查看mysql数据库数据库版本的时候,也顺便查看可用的mysql-proxy,图示就是我们想要的结果;
2:yum install mysql-proxy安装:
2.1:使用root用户安装mysql-proxy:执行命令:
yum install mysql-proxy
4.1:使用vim /etc/mysql-proxy.cnf命令打开mysqk-proxy的配置文件进行编辑:
4.2:mysql-proxy配置文件详解,按照如下配置即可,下面配置没有主从配置,需要实现数据库读写分离则需配置master和slave,具体网上搜索相关配置即可。因为我安装代理是想实现sql的拦截与性能监控,所以按照下面配置即可。
[mysql-proxy]#这一行必须有否则报错
admin-username=user #数据库用户名
admin-password=password #数据库用户名
admin-lua-script=/usr/lib64/mysql-proxy/lua/admin.lua #lua位置,参见上面的版本信息,指定读写分离配置文件位置
daemon=true # mysql-proxy以守护进程方式运行
keepalive=true #保持连接启动进程会有2个, 一号进程用来监视二号进程
proxy-address=10.25.76.29:6102 # 代理的监听地址端口,默认端口4040,如果需要用默认端口则直接配置proxy-address=10.25.76.29即可
proxy-backend-addresses=10.17.6.210 #目标地址,Indb内网地址,默认端口3306,10.17.6.210是目标inDB的ip,即数据库的ip和端口
log-file=/var/log/mysql-proxy.log #日志文件存储路径
log-level=debug
5.3:服务启动成功后,用监控的ip和端口登陆mysql,做连接测试
执行命令:mysql -h配置代理地址
-P配置代理端口 -u数据库用户名 -p数据库密码
如图可连接成功
至此我们整个Mysql-Proxy代理的安装部署算是成功。部署过程中遇到很多问题,也列出来做下总结
解决:在vim /etc/mysql-proxy.cnf配置文件添加:[mysql-proxy]#这一行必须有否则报错
4.3.2:
问题2:通过代理的地址和端口登陆成功后会在短时间出现大量的连接错误host is blocked beause of many connections errors:unblock with "mysqladmin flush-hosts ",mysql-proxy连接后端mysql一直报错,达到mysql配置的最大错误次数,导致数据库把代理的ip和端口拉黑
4.3.2.1 :出现的现象
4.3.2.2:
排查过程:
首先查询mysql-proxy日志,日志路径见配置文件/var/log/mysql-proxy.log,打开日志文件
经过抓包分析是阿里云健康扫描导致的,需要将代理外网访问端口访问数据库的端口取消阿里云健康检查即可。mysql的tcp连接数也比较正常
总结:工作中平常就是使用到mysql ,对于一些功能操作了哪些库表测试一般是问开发,如何自己可以知晓呢?mysql的性能监控要怎么实现呢?首先是因为想要简化测试流程,有这个想法,搜索了下 ,有推荐这个工具,通过大概了解下原理觉得这个工作满足需求。然后开干。整个过程中因为阿里云健康检查排查过程用了挺久,也去咨询了运维同事。不过好在问题解决了。
下篇文件讲解mysql-proxy在测试过程中的实战运用。