使用中间件mycat实现MySQL读写分离(初步,navicat测试可行)

Mycat安装包点这里获取
解压到合适的目录下:
在这里插入图片描述
修改conf目录下的server.xml和schema.xml配置文件:
①修改server.xml配置
在这里插入图片描述
vim打开server.xml拉到底部默认有两个user的配置:

 <user name="root" defaultAccount="true">
                <property name="password">123456</property>
                <property name="schemas">test</property>
                <!-- 表级 DML 权限设置 -->
                <!--            
                <privileges check="false">
                        <schema name="TESTDB" dml="0110" >
                                <table name="tb01" dml="0000"></table>
                                <table name="tb02" dml="1111"></table>
                        </schema>
                </privileges>           
                 -->
        </user>
        <user name="user">
                <property name="password">123456</property>
                <property name="schemas">test</property>
                <property name="readOnly">true</property>
        </user>

②修改schema.xml配置
在这里插入图片描述

<mycat:schema xmlns:mycat="http://io.mycat/">
        <!-- 逻辑库 -->
        <!-- sqlMaxLimit配置默认查询数量 -->
        <schema name="test" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
        </schema>

        <!-- 分片配置,database 为真实数据库名 -->
        <dataNode name="dn1" dataHost="datahost1" database="test" />

        <!-- 物理数据库配置 -->
        <dataHost name="datahost1" maxCon="1000" minCon="10" balance="3"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <!-- can have multi write hosts -->
                <writeHost host="hostM1" url="124.***.**.158:3306" user="root"
                                   password="[写库的免密]">
                        <!-- can have multi read hosts -->
                        <readHost host="hostS2" url="124.***.**.119:3306" user="root" password="[读库的密码]" />
                </writeHost>
        </dataHost>
</mycat:schema>

验证

使用Navicat连接mycat:
这里我使用mycat的server.xml中配置的读写账号root进行登录mycat
在这里插入图片描述在mycat上创建一张表student:

CREATE TABLE `student`  (
  `id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '学号',
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '姓名',
  `grade` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '年级',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

执行前同时打开读库和写库的日志(使用tailf命令):
在这里插入图片描述

在这里插入图片描述
在mycat连接上往student表中插入一条数据:
在这里插入图片描述在这里插入图片描述在mycat执行插入语句后可以看到写库和读库都有了insert语句,但是仔细观察这两个insert语句是有区别的,写库的insert语句是mycat读写分离写进去的,但是读库的insert是主从复制功能从写库的bin-log同步过来的,两个insert是不同的。

接下来在mycat上执行一条select语句查询刚刚插入的数据:
在这里插入图片描述在这里插入图片描述对比读库和写库的日志,可以发现select语句只在读库的日志中出现了,也就是说通过mycat进行查询时查询的是我们配置的读库(如果有需要mycat也可以配置读库和写库分担select压力,具体配置方法需要继续研究)

这样中间件mycat就帮助我们实现了MySQL的读写分离。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值