基于Mysql-proxy实现读写分离
Posted 夕颜@伤雨痕
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于Mysql-proxy实现读写分离相关的知识,希望对你有一定的参考价值。
环境:
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实现读写分离的主要内容,如果未能解决你的问题,请参考以下文章