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


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

    简介

    读写分离

    当业务量上来时,往往一台单机的mysql数据库不能满足性能需求,这时候就需要配置主从库读写分离来解决性能瓶颈。简单的来说,就是原先一台数据库既读又写,现在改成一台写和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 (如果你对命令行比较熟,忽略这个)

    分配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

    在主从的服务器上分别找到以下路径的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,将它改成和主库不一样的编号,例如

    主库

    server-id=1
    

    从库

    server-id=2
    

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

    配置主数据库

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

    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

    配置从数据库

    开启从数据库服务,手动创建测试读写分离的库,这边不会帮你自动创建,同时也创建和主库一样的用户,我这里还是用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_filemaster_log_pos就是配置主数据库查询到的FilePosition

    启动从库

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

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

    总结

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

    参考博客
    https://blog.csdn.net/will5451/article/details/72731656

  • 相关阅读:
    P2155 [SDOI2008]沙拉公主的困惑
    P4345 [SHOI2015]超能粒子炮·改
    乘法逆元
    P1608 路径统计
    P1342 请柬
    一些网址
    20/08/02测试
    ivqBlog 开源博客 (angularjs + express + mongodb)
    angularjs, nodejs, express, gulp, karma, jasmine 前端方案整合
    参照nopCommerce框架开发(NextCMS)
  • 原文地址:https://www.cnblogs.com/seethrough/p/9239428.html
Copyright © 2020-2023  润新知