Windows中使用Mysql-Proxy实现Mysql读写分离css
简介
读写分离
当业务量上来时,每每一台单机的mysql数据库不能知足性能需求,这时候就须要配置主从库读写分离来解决性能瓶颈。简单的来讲,就是原先一台数据库既读又写,如今改为一台写和1台以上读。html
环境准备
- 3台windows server 2012(理论上windows server 2003+ 都行)
- mysql 5.7
- mysql-proxy-0.8.5-windows-x86-32bit
- navicat for mysql (若是你对命令行比较熟,忽略这个)
分配IP
- 主数据库:192.168.47.128
- 从数据库:192.168.47.129
- 中间件服务器:192.168.47.130
安装mysql
在[主]192.168.47.128和[从]192.168.47.129两台机子上根据向导模式一步步安装mysql 5.7,这里我选择developer环境,安装后先中止mysql服务mysql
配置my.ini
在主从的服务器上分别找到如下路径的my.ini文件linux
C:\ProgramData\MySQL\MySQL Server 5.7\my.ini
主数据库配置的mysqld节点下加入sql
[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,将它改为和主库不同的编号,例如windows
主库
server-id=1
从库
server-id=2
多个从库时,能够递增填写服务器
配置主数据库
开启主数据库服务,建立用来测试读写分离的数据库
对用户受权使其用于复制主库数据markdown
grant replication slave on *.* to 'slave'@'192.168.47.%' identified by '123456';
用户名:slave
密码:123456ide
而后查询主数据库状态,并记录下File和Position字段的值
show master status;
个人
File:mysql-bin.000005
Position:1767
配置从数据库
开启从数据库服务,手动建立测试读写分离的库,这边不会帮你自动建立,同时也建立和主库同样的用户,我这里仍是用root
先中止从库
stop slave
设置它的master
change master to master_host='192.168.47.128', master_port=3306, master_user='root', master_password='root', master_log_file='mysql-bin.000005', master_log_pos=1767;
注:这里的 master_log_file和master_log_pos就是配置主数据库查询到的File和Position
启动从库
start slave;
检查是否启动成功
show slave status;
若是Slave_IO_State字段显示 Waiting for master to send event说明成功,固然你也能够在主库表中插入一条数据,看看从库是否有同步,到这里,已经配置好主从同步了。
配置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:/soft/mysql-proxy-0.8.5-windows-x86-32bit/lib/mysql-proxy/lua/admin.lua proxy-backend-addresses=192.168.47.128:3306 proxy-read-only-backend-addresses=192.168.47.129:3306 proxy-lua-script=C:/soft/mysql-proxy-0.8.5-windows-x86-32bit/share/doc/mysql-proxy/rw-splitting.lua log-file=C:/soft/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文件,内容以下
mysql-proxy -P 192.168.47.130:6217 --defaults-file=C:\soft\mysql-proxy-0.8.5-windows-x86-32bit\bin\mysql-proxy.conf
也放在mysql-proxy-0.8.5-windows-x86-32bit的bin目录中,双击运行
接下来,用你的客户端工具链接 192.168.47.130:6217(6217这个端口随便设置,跟上面的bat里面一致就行),测试是否能够能正常链接,若是能链接,可是不能显示读写分离的数据库,那通常是权限设置问题
总结
在windows下部署Mysql读写分离,仍是比较少的,windows的中间件也好久没更新了,找到的资料大部分都在linux环境中,官方文档也没找到相关说明,参考了多个地方,才弄成功。固然这只是初级的读写分离方案,要将它作的好,还有不少事情要作,可是这对于理解读写分离有比较大的意义。
参考博客https://blog.csdn.net/will5451/article/details/72731656