澳门在线威尼斯官方 > 电脑数据库 > Proxy实现Mysql读写分离,Windows下多个Mysql实例配置

原标题:Proxy实现Mysql读写分离,Windows下多个Mysql实例配置

浏览次数:89 时间:2019-10-13

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

序:

简介

    网上有很多类似的文章,也是各种百度出来的,但是对于多数刚开始接触MYSQL主从的小白来说,网上文章的代码里面很多技术点都没有理解,有跌打误撞碰上的,但多数都是这篇文章卡主了,换篇文章接着卡。- -。

读写分离

当业务量上来时,往往一台单机的mysql数据库不能满足性能需求,这时候就需要配置主从库读写分离来解决性能瓶颈。简单的来说,就是原先一台数据库既读又写,现在改成一台写和1台以上读。
图片 1

    下面真正开始写教程之前,我希望你能够先完整的看完,再去敲代码。

环境准备

  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 (如果你对命令行比较熟,忽略这个)

    方法适用于MYSQL 5.1之后的版本。之前的版本,自行百度。

分配IP

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

Mysql的主从是个什么德行我就不解释了。不然你也不会搜不到这篇文章。

安装mysql

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

环境:

配置my.ini

在主从的服务器上分别找到以下路径的my.ini文件

C:ProgramDataMySQLMySQL Server 5.7my.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,将它改成和主库不一样的编号,例如

w7 64位。

主库

server-id=1

    mysql 5.5.24...(也就是多数大家装的wamp包里面的版本)

从库

server-id=2

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

其实应该是要在 linux里面去做这件事的,但是仅仅是为了了解,学习这个主从,大多数人还是windows下的平台,So...不解释。

配置主数据库

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

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

用户名:slave
密码:123456

然后查询主数据库状态,并记录下File和Position字段的值

show master status;

我的
File:mysql-bin.000005
Position:1767

首先你要在你的windows下再装一个mysql实例(不要妄想着一个Mysql实例,里面弄两个库然后他们配置主从,这个我可没玩过,有兴趣的同学可以尝试一下),意味着你要分配不同的端口。

配置从数据库

开启从数据库服务,手动创建测试读写分离的库,这边不会帮你自动创建,同时也创建和主库一样的用户,我这里还是用root
先停止从库

stop slave

windows下安装多个mysql的过程看下面这篇文章就好了。

设置它的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_filemaster_log_pos就是配置主数据库查询到的FilePosition

启动从库

start slave;

这是用到的软件包

检查是否启动成功

show slave status;

如果Slave_IO_State字段显示 Waiting for master to send event说明成功,当然你也可以在主库表中插入一条数据,看看从库是否有同步,到这里,已经配置好主从同步了。

 提取码 42e8

配置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:softmysql-proxy-0.8.5-windows-x86-32bitbinmysql-proxy.conf

也放在mysql-proxy-0.8.5-windows-x86-32bitbin目录中,双击运行
接下来,用你的客户端工具连接 192.168.47.130:6217(6217这个端口随便设置,跟上面的bat里面一致就行),测试是否可以能正常连接,如果能连接,但是不能显示读写分离的数据库,那一般是权限设置问题

(看我多么良心,连软件都给你准备好了,不用你去各大垃圾下载站去下载了。再次注意你的环境,保证跟我的一样,以及数据库版本)

总结

在windows下部署Mysql读写分离,还是比较少的,windows的中间件也很久没更新了,找到的资料大部分都在linux环境中,官方文档也没找到相关说明,参考了多个地方,才弄成功。当然这只是初级的读写分离方案,要将它做的好,还有很多事情要做,但是这对于理解读写分离有比较大的意义。

参考博客

OK。我就当你已经配置好了第二个mysql实例。

下面两个bat 文件代码,用来帮你快速启动关闭你的新服务

startmysql.bat

@ECHO OFF
net start mysql5.5
pause

stopmysql.bat

@ECHO OFF
net stop mysql5.5

pause

这个mysql5.5 是你第二个实例的服务名称,stop停止服务,start 开启服务,不解释了。

别忘了进去你第二个Mysql实例瞅瞅。

进入正餐:

因为我们是在一个windows下配置的,所以没有网上那些主从 IP。 都是localhost

主数据库  my.ini添加如下

在[mysqld]下添加配置数据:

server-id=1     #配一个唯一的ID编号,1至32。 手动设定

log-bin=mysql-bin  #二进制文件存放路径 ,不要在意为啥没有路径名,你就这样写

#设置要进行或不要进行主从复制的数据库名,同时也要在Slave(也就是你的从库) 上设定。

binlog-do-db=进行主从数据库名1 ,进行主从数据库名2

binlog-ignore-db=不参与主从的数据库名,不参与主从的数据库名2

保存,重启数据库服务。

 上面的这些配置的含义:

    - server-id 顾名思义就是服务器标识id号了
    - log-bin 指定日志类型
    - binlog-do-db 是你需要复制的数据库名称,如果有多个就用逗号“,”分开
    - binlog-ignore-db 是不需要复制的数据库名称,如果有多个就用逗号“,”分开

在主库中建立一个用户(专门用给从库连接的,注意这是在主库里面建立的,可别迷迷糊糊的到从库的命令界面敲):

1.mysql>grant replication slave,reload,super on *.* to lisimin@localhost identified by 'root' ; 

2.mysql>flush privileges; 
3.mysql>show master status; # 找到File 和 Position 的值记录下来;

图片 2

简单解释一下第一句。

创建了一个用来复制的账号。

“@”前面的“lisimin”是用户名,后面的是有效的域,这里因为是本地,所以是写的是Localhost,如果是其他地址,对应填写上IP即可,不过应该不需要考虑端口问题,我创建的时候就没写端口。by 后面的“root”是密码。账户密码自己定义,不要跟root,以及你当前的用户名冲突。。

2.flush....刷新权限。

本文由澳门在线威尼斯官方发布于电脑数据库,转载请注明出处:Proxy实现Mysql读写分离,Windows下多个Mysql实例配置

关键词:

上一篇:百万级数据库SQL优化大总结,关于iOS数据库大数

下一篇:没有了