• 使用mysqlproxy实现mysql读写分离


    先说一下什么是读写分离吧。

    以三台虚拟机为例,搭建一主一从一代理,全部配置好之后,当从proxy插入数据时,该数据会同时插入主数据库,因为主从关系,从数据库也会有数据。当把从数据库执行slave stop后,再次从proxy插入数据,数据只会插入主数据库,从数据库不会增加新数据。当在slave上插入数据时,主数据库不会增加新数据,但是proxy会读取到slave上新插入的数据。

    简单来说就是,proxy将数据插入主数据库,读取数据时却是从从数据库读取。

    下面开始说一下部署步骤:

    主数据库:172.16.1.111

    从数据库:172.16.1.112

    MySQLProxy:172.16.1.110

    主从配置,请参阅以下文章,我使用的用于同步的用户名为repl,密码为repl

    http://www.cnblogs.com/biaopei/p/7730567.html

    MySQLProxy下载地址https://downloads.mysql.com/archives/proxy/

    做好安装MySQLProxy准备

    解压文件

    groupadd mysql
    useradd -g mysql mysql
    并且把解压后的整个文件夹所有者改为mysql,进入到文件夹内的bin目录
    建议将rw-splitting.lua配置文件稍微修改一下,改以下两个参数就可以,因为,MySQLProxy默认是要达到4个连接才开启读写分离功能(具体我还不是很了解)

    min_idle_connections = 1,
    max_idle_connections = 2,

    以下命令需要根据自己的实际情况修改,例如ip地址还有文件的路径,其它就没什么了

    ./mysql-proxy --daemon --log-level=debug --user=mysql --keepalive --log-file=/var/log/mysql
    -proxy.log --plugins="proxy" --proxy-backend-addresses="172.16.1.111:3306" --proxy-read-only-backend-addresses="172.16.1.112:3306" --proxy-lua-script="/root/mysqlproxy/share/doc/mysql-proxy/rw-splitting.lua" --plugins=admin --admin-username="admin" --admin-password="admin" --admin-lua-script="/root/mysqlproxy/lib/mysql-proxy/lua/admin.lua"

    启动MySQLProxy后,查看一下4040和4041端口是否已开启,如果已开启,说明是正常的
    在MySQLProxy上执行以下命令
    先检查一下代理是否成功(我们可以在master上新建一个库,如果这里能够看到,说明代理没问题)

    mysql -urepl -p -h 172.16.1.110 --port=4040    #密码是repl,如果你没改的话,bp库是我在master上创建的

    现在我们再看一下状态是否正确
    mysql -uadmin -p -h 172.16.1.110 --port=4041   #默认密码是admin,如图,我们在这里还会遇到一个问题

    解决方法是,新开一个终端登录proxy,执行

    mysql -urepl -p -h 172.16.1.110 --port=4040

    再次查看,两个都为up说明,配置正确

    现在我们就完成配置了,接下来开始测试读写分离功能

    很简单,就是从proxy上登录

    mysql -urepl -p -h 172.16.1.110 --port=4040

    然后创建一个数据库,查看主从数据库,都会看到在proxy增加的新数据库

    接着,我们从数据库执行slave stop后,再在proxy上新建一个数据库,发现只有master上能看到,slave上看不到,这不是重点,重点是在slave上新建一个数据库,在master上看不到,但proxy能读取到新增的数据库。

    至此读写分离就完成了。

    注意这里也必须重新开一终端连接proxy才会实现读写分离,如果使用同一个终端,会导致slave stop后,proxy的读写全部都是在master上,没有读写分离。还有就是,登录的时候直接回车即可,无需再输入密码,不知道是什么原因

    (我个人觉得,slave 没有stop前,proxy读取的数据应该也是直接从slave上读取的)

    如果看不懂的,可以参考一下https://www.2cto.com/database/201607/531145.html

  • 相关阅读:
    奇异值分解 SVD 的数学解释
    [实现] 利用 Seq2Seq 预测句子后续字词 (Pytorch)2
    [实现] 利用 Seq2Seq 预测句子后续字词 (Pytorch)
    pycharm debug后会出现 step over /step into/step into my code /force step into /step out 分别表示
    单步调试 step into/step out/step over 区别
    终端(terminal)、tty、shell、控制台(console)、bash之间的区别与联系
    pytorch: Variable detach 与 detach_
    RNN,LSTM,GRU基本原理的个人理解
    FMDB官方使用文档-GCD的使用-提高性能(翻译)
    CocoaPods一个Objective-C第三方库的管理利器
  • 原文地址:https://www.cnblogs.com/biaopei/p/9214384.html
Copyright © 2020-2023  润新知