Mysql-Proxy简介
Mysql Proxy是一个处于你的client端和Mysql server端之间的简单程序,它可以监测、分析或改变它们的通信。它使用灵活,没有限制,常见的用途包括:负载平衡,故障、查询分析,查询过滤和修改等等。
Mysql Proxy就是这么一个中间层代理,简单的说,Mysql Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lua脚本,可以实现复杂的连接控制和过滤,从而实现读写分离和负载平衡。对于应用来说,Mysql Proxy是完全透明的,应用则只需要连接到Mysql Proxy的监听端口即可。当然,这样proxy机器可能成为单点失效,但完全可以使用多个proxy机器做为冗余,在应用服务器的连接池配置中配置到多个proxy的连接参数即可。
Mysql-Proxy更强大的一项功能是实现"读写分离",基本原理是让主数据库处理事务性查询,让从库处理SELECT查询。数据库复制被用来把事务性查询导致的变更同步到集群中的从库。
工作拓扑图
Mysql-Proxy安装部署(需要基于mysql主从,这里就不部署了,可以参考我的另外一篇文章:Mysql主从复制配置)
1)下载Mysql-Proxy源码包、安装(这里采用0.8.5版本(已停止更新)
[root@localhost ~]# wget –c http://mirrors.yangxingzhen.com/mysql-proxy/mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz
[root@localhost ~]# tar zxf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz
[root@localhost ~]# mv mysql-proxy-0.8.5-linux-el6-x86-64bit /usr/local/mysql-proxy
[root@localhost ~]# ln -s /usr/local/mysql-proxy/bin/* /usr/bin
[root@localhost ~]# useradd -s /sbin/nologin mysql-proxy
[root@localhost ~]# vim /usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
Mysql-Proxy会检测客户端连接,当连接没有超过min_idle_connections预设值时, 不会进行读写分离, 即查询操作会发生到Master上
账号:admin
密码:admin
192.168.8.5(主库,负责写)
192.168.8.6(从库,负责读)
[root@localhost ~]# /usr/local/mysql-proxy/bin/mysql-proxy --daemon --log-level=debug --user=mysql-proxy --keepalive --log-file=/var/log/mysql-proxy.log --plugins="proxy" --proxy-backend-addresses="192.168.8.5:3306" --proxy-read-only-backend-addresses="192.168.8.6:3306" --proxy-lua-script="/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua" --plugins="admin" --admin-username="admin" --admin-password="admin" --admin-lua-script="/usr/local/mysql-proxy/lib/mysql-proxy/lua/admin.lua"
--help-all //获取全部帮助信息; --proxy-address=host:port //代理服务监听的地址和端口,默认为4040; --admin-address=host:port //管理模块监听的地址和端口,默认为4041; --proxy-backend-addresses=host:port //后端mysql服务器的地址和端口; --proxy-read-only-backend-addresses=host:port //后端只读mysql服务器的地址和端口; --proxy-lua-script=file_name //完成mysql代理功能的Lua脚本; --daemon //以守护进程模式启动mysql-proxy; --keepalive //在mysql-proxy崩溃时尝试重启之; --log-file=/path/to/log_file_name //日志文件名称; --log-level=level //日志级别; --log-use-syslog //基于syslog记录日志; --plugins=plugin //在mysql-proxy启动时加载的插件; --user=user_name //运行mysql-proxy进程的用户; --defaults-file=/path/to/conf_file_name //默认使用的配置文件路径,其配置段使用[mysql-proxy]标识; --proxy-skip-profiling //禁用profile; --pid-file=/path/to/pid_file_name //进程文件名; |
其中4040为proxy代理端口用于WEB应用连接,4041为管理端口用于SA或者DBA管理
[root@localhost ~]# netstat -lntup | grep mysql-proxy
[root@localhost ~]# ps -ef | grep mysql-proxy
7)基于4041端口MYSQL-Proxy查看读写分离状态,登录4041管理端口
[root@localhost ~]# mysql -h192.168.8.3 -uadmin -padmin -P4041 -e "select * from backends;"
8)如果状态不是up,则需要登陆到4040端口(这个端口的账户密码为数据库授权的账户密码discuz,discuz )
[root@localhost ~]# mysql -h192.168.8.3 -udiscuz -pdiscuz -P4040 -e "show databases;" #多执行这条命令,直至unknown变成up
[root@localhost ~]# mysql -h192.168.8.3 -uadmin -padmin -P4041 -e "select * from backends;"
读写分离数据测试,登录到从库,进行数据写入和测试,在从库上discuz库创建test表,并写入内容
mysql> create table test (id varchar(20),name varchar(20));
mysql> insert into test value (1,'yangxz');
[root@localhost ~]# mysql -h192.168.8.3 -udiscuz -pdiscuz -P4040 -e 'select * from discuz.test;'
能查到上面test这个表的信息,则说明读是走的是从库,因为主库上面是没有刚刚新建的这个表信息的
[root@localhost ~]# vim /usr/local/apache/htdocs/config/config_global.php (源码安装apache路径)
[root@localhost ~]# vim /var/www/html/config/config_global.php (yum安装httpd路径)
把原来主库的IP改成192.168.8.3:4040,保存退出即可~~
若文章图片、下载链接等信息出错,请在评论区留言反馈,博主将第一时间更新!如本文“对您有用”,欢迎随意打赏,谢谢!
广东省深圳市南山区 电信 1F
亲测,写的不错,感谢博主