欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Windows中使用Mysql-Proxy实现Mysql读写分离

程序员文章站 2022-12-25 09:30:42
Windows中使用Mysql Proxy实现Mysql读写分离 简介 读写分离 为了确保数据库产品的稳定性,很多数据库拥有双机热备功能。也就是,第一台数据库服务器,是对外提供增删改业务的生产服务器;第二台数据库服务器,主要进行读的操作。 环境准备 1. 3台windows server 2012( ......

Windows中使用Mysql-Proxy实现Mysql读写分离

简介

读写分离

为了确保数据库产品的稳定性,很多数据库拥有双机热备功能。也就是,第一台数据库服务器,是对外提供增删改业务的生产服务器;第二台数据库服务器,主要进行读的操作。

环境准备

  1. 3台windows server 2012(理论上windows server 2003+ 都行)
  2. mysql 5.7
  3. mysql-proxy-0.8.5-windows-x86-32bit
  4. navicat for mysql (如果你对命令行比较熟,忽略这个)

分配IP

  1. 主数据库:192.168.47.128
  2. 从数据库:192.168.47.129
  3. 中间件服务器:192.168.47.130

安装mysql

在192.168.47.128[主]和192.168.47.129[从]两台机子上根据向导模式一步步安装mysql 5.7,这里我选择developer环境,安装后先停止mysql服务

配置my.ini

windows环境下my.ini的路径

C:\ProgramData\MySQL\MySQL Server 5.7\my.ini

主数据库配置

[mysqld]
log-bin=mysql-bin #slave会基于此log-bin来做replication
binlog-do-db=mytest #用于master-slave的具体数据库
binlog_ignore_db=mysql #不用于master-slave的具体数据库
binlog_ignore_db=information_schema #和binlog-do-db一样,可以设置多个

从数据库配置

[mysqld]
log-bin=mysql-bin #slave会基于此log-bin来做replication
replicate-do-db=mytest #用于master-slave的具体数据库

注:在对从数据库配置的时候,需要在文件内找到找到 server-id,将它改成和主库不一样的编号,例如

主库

server-id=1

从库

server-id=2

多个从库时,可以递增填写

配置主数据库

开启主数据库服务,创建用来测试读写分离的数据库
对用户授权使其用于复制主库数据

grant
replication slave on
*.* to
'slave'@'192.168.47.%'
identified by
'123456';

slave:用户名
123456: 密码
注:这里根据实际情况而定,我为了偷懒,直接用root来测试

然后查询主数据库状态,并记录下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,测试是否可以能正常连接,如果能连接,但是不能显示读写分离的数据库,那一般是权限设置问题

总结

mysql的读写分离相对于sqlserver,简单了不少,虽然中途踩了一点坑,但是多方请教,终于搞定了,当然这只是初级的读写分离方案,要将它做的好,还有很多事情要做,谢谢!

参考博客