Windows中使用Mysql-Proxy实现Mysql读写分离
1、简介
读写分离:当业务量上来时,往往一台单机的mysql数据库不能满足性能需求,这时候就需要配置主从库读写分离来解决性能瓶颈。简单的来说,就是原先一台数据库既读又写,现在改成一台写和1台以上读。
1.1、环境准备
3台windows server 2012(理论上windows server 2003+ 都行)
mysql 5.6
mysql-proxy-0.8.5-windows-x86-32bit
navicat for mysql (如果你对命令行比较熟,忽略这个)
1.2、分配IP
主数据库:192.168.103.207
从数据库:192.168.103.208
中间件服务器:192.168.103.203
1.3、安装mysql
在[主]192.168.103.207和[从]192.168.103.208两台机子上根据向导模式一步步安装mysql 5.6,这里我选择Server环境,安装后先停止mysql服务
2、配置my.ini
在主从的服务器上分别找到以下路径的my.ini文件
C:ProgramDataMySQLMySQL Server 5.6my.ini
主数据库配置的mysqld节点下加入
[mysqld]
log-bin=mysql-bin #从库会基于此log-bin来做复制
binlog-do-db=mytest #用于读写分离的具体数据库,这里我创建了mytest作测试
binlog_ignore_db=mysql #不用于读写分离的具体数据库
binlog_ignore_db=information_schema #和binlog-do-db一样,可以设置多个
从数据库配置配置的mysqld节点下加入
[mysqld]
log-bin=mysql-bin #从库会基于此log-bin来做复制
replicate-do-db=mytest #用于读写分离的具体数据库,这里我创建了mytest作测试
注:在对从数据库配置的时候,需要在文件内找到找到server-id,将它改成和主库不一样的编号,例如
主库
server-id=1
从库
server-id=2
多个从库时,可以递增填写
3、配置主数据库
开启主数据库服务,创建用来测试读写分离的数据库
对用户授权使其用于复制主库数据
复制代码
grant
replication slave on
. to
'slave123'@'192.168.103.%'
identified by
'123456';
复制代码
用户名:slave123
密码:123456
然后查询主数据库状态,并记录下File和Position字段的值
复制代码
mysql> show master status; | ||||
---|---|---|---|---|
File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
mysql-bin.000001 | 2073 | mytest | mysql,information_schema |
1 row in set (0.05 sec)
复制代码
我的
File:mysql-bin.000001
Position:2073
4、配置从数据库
开启从数据库服务,手动创建测试读写分离的库,这边不会帮你自动创建,同时也创建和主库一样的用户,我这里还是先停止从库
stop slave;
设置它的master
复制代码
change master to
master_host='192.168.103.207',
master_port=3307,
master_user='slave123',
master_password='123456',
master_log_file='mysql-bin.000001',
master_log_pos=2073;
复制代码
注:这里的 master_log_file和master_log_pos就是配置主数据库查询到的File和Position
启动从库
start slave;
检查是否启动成功
show slave status;
如果Slave_IO_State字段显示 Waiting for master to send event说明成功,当然你也可以在主库表中插入一条数据,看看从库是否有同步,到这里,已经配置好主从同步了。
5、配置Mysql-Proxy
下载 mysql-proxy-0.8.5-windows-x86-32bit 解压到任意位置,它是绿色免安装版的,创建配置文件 mysql-proxy.conf,内容如下
复制代码
[mysql-proxy]
admin-username=root
admin-password=root
admin-lua-script=C:/mysql-proxy-0.8.5-windows-x86-32bit/lib/mysql-proxy/lua/admin.lua
proxy-backend-addresses=192.168.103.207:3307
proxy-read-only-backend-addresses=192.168.103.208:3307
proxy-lua-script=C:/mysql-proxy-0.8.5-windows-x86-32bit/share/doc/mysql-proxy/rw-splitting.lua
log-file=C:/mysql-proxy-0.8.5-windows-x86-32bit/log/mysql-proxy.log
log-level=debug
daemon=true
keepalive=true
复制代码
admin-username:用于中间件连接的用户,这里我还是用root偷懒
admin-password:同上用户密码
admin-lua-script:根据存放的文件位置自行调整
proxy-backend-addresses:主库服务器+端口
proxy-read-only-backend-addresses:从库服务器+端口,多个从库用,隔开
proxy-lua-script:根据存放的文件位置自行调整
log-file:日志文件存放位置,如果你指定了一个路径,请确保手动创建了对应的文件夹,否则会报错
log-level:日志级别
daemon:以守护进程方式运行
keepalive:长连接
将上面创建的文件复制到mysql-proxy-0.8.5-windows-x86-32bit的bin目录中
创建install.bat文件,内容如下
"C:mysql-proxy-0.8.5-windows-x86-32bitbinmysql-proxy.exe" -P 192.168.103.203:6217 --defaults-file="C:mysql-proxy-0.8.5-windows-x86-32bitbinmysql-proxy.conf"
也放在mysql-proxy-0.8.5-windows-x86-32bit的bin目录中,双击运行
接下来,用你的客户端工具连接 192.168.103.203:6217(6217这个端口随便设置,跟上面的bat里面一致就行),测试是否可以能正常连接,如果能连接,但是不能显示读写分离的数据库,那一般是权限设置问题
作者:一个大西瓜
出处:https://www.cnblogs.com/wyt007/