基于Mysql-proxy实现读写分离

Posted 夕颜@伤雨痕

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于Mysql-proxy实现读写分离相关的知识,希望对你有一定的参考价值。

前言简介:
mysql-Proxy是MySQL官方提供的mysql中间件服务,支持无数客户端连接,同时后端可连接若干台 Mysql-Server服务器,MYSQL-Proxy自身基于MySQL协议,连接MYSQL-Proxy的客户端无需修改任何 设置, 跟正常连接MYSQL Server没有区别,无需修改程序代码。

环境:

Mysql-proxy:192.168.109.102

Master-109.100 192.168.109.100

Slave-109.101:192.168.109.101

实验拓补图

[root@Mysql-proxy ~]# wget http://mirrors.163.com/mysql/Downloads/MySQL-Proxy/mysql-proxy-0.8.4-linux-glibc2.3-x86-64bit.tar.gz

[root@Mysql-proxy ~]# tar xvf mysql-proxy-0.8.4-linux-glibc2.3-x86-64bit.tar.gz

[root@Mysql-proxy ~]# echo "export PATH=/usr/local/mysql-proxy/bin:$PATH" > /etc/profile.d/mysql-proxy.sh

[root@Mysql-proxy~]# source /etc/profile
[root@Mysql-proxy~]# mysql-proxy --daemon --log-level=debug --user=mysql-proxy --keepalive --log-file=/var/log/mysql-proxy.log --plugins="proxy" --proxy-backend-addresses="192.168.109.100:3306" --proxy-read-only-backend-addresses="192.168.109.101: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"

参数详解:

# Mysql-Proxy的相关参数详解如下:
--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-scripts=file_name: #完成mysql代理功能的Lua脚本; :以守护进程模式启动mysql-proxy; -keepalive             #在mysql-proxy崩溃时尝试重启;
--log-file=/var/log/mysql-proxy.log #日志文件名称;
--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 :进程文件名;

#查看mysql-proxy启动的端口/日志

【Master-109.100】

#待mysql-proxy端启动完成之后,我们登陆Matser主库授权给mysql-proxy节点允许代理节点对主库的所有操作;

#grant all on *.* to "mysql-proxy"@"192.168.1091.102" identified by "123456";

#flush privileges;

 授权完毕之后,通过mysql-proxy代理端(192.168.109.1021)模拟向主库192.168.109.100插入数据

[root@Mysql-proxy ~]# mysql -h 192.168.109.102 -u mysql-proxy -p123456 -P4040 -e "create database Testdb charset=utf8;" 

[root@Mysql-proxy ~]# mysql -h 192.168.109.102 -u mysql-proxy -p123456 -P4040  -e "create table Testdb.t1(id int(10) auto_increment primary key,name varchar(40),age varchar(40));"

随后我们通过登陆4041管理端口查看mysql-proxy所代理的主从读写分离状态,很明显,写库状态已经激活(UP状态)

[root@Mysql-proxy ~]# mysql -h 192.168.109.102 -uadmin -padmin -P4041 -e "select * from backends;"

 

 随后通过4041查询数据,因为主从关系,通过mysql-proxy端写入的数据默认也会同步到从库(192.168.109.101);

#为了更好的验证,我们通过mysql-proxy代理端读取数据是走的slave从库:只需要在从库192.168.109.101单独插入一下表数据

(因为在从库插入的数据不会同步到主库中,这样便于区分,随后我们在proxy端执行select查询语句的时候,就可以很明显的区分查的主库还是从库了)

 [root@Mysql-proxy ~]# mysql -h 192.168.109.102 -umysql-proxy -p123456 -P4040 -e "select * from Testdb.t1;"

[root@Mysql-proxy ~]# mysql -h 192.168.109.102 -uadmin -padmin -P4041 -e "select * from backends;" 

END!

以上是关于基于Mysql-proxy实现读写分离的主要内容,如果未能解决你的问题,请参考以下文章

基于mysql-proxy实现读写分离的启动脚本

mysql-proxy 实现读写分离

mysql+mysql_proxy实现读写分离

使用mysql-proxy实现读写分离

mysql-proxy代理加mysql主从实现读写分离

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