mycat实现mysql分库(水平切分)

本文介绍如何使用Mycat实现MySQL数据库的水平切分,包括配置schema.xml及rule.xml文件,设置数据路由规则,并通过示例验证分库效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

第一章:mysql的主从复制之一主一从
第二章:mysql的主从复制之双主双从
第三章:mycat实现数据库的读写分离
第四章:mycat实现mysql分库(垂直切分)
第五章:mycat实现mysql分库(水平切分)
第六章:mycat ER表与全局表
第七章:mycat全局序列号

mycat实现mysql分库(水平切分)

前置条件:
继续基于前面第四章配置的mysql和mycat进行配置。

配置mycat

  • 修改schema.xml文件,配置数据库的信息
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
        <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
        		<!--配置表名为test的表dataNode自动路由到dn1和dn2的数据库中,多个通过逗号隔开
        		rule:指定rule.xml文件的数据路由规则名称
        		-->
                <table name = "test" dataNode="dn1,dn2" rule="mod-long"></table>
        </schema>
        <dataNode name="dn1" dataHost="host1"  database="duck"/>
        <dataNode name="dn2" dataHost="host2"  database="duck"/>
        <dataHost name="host1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="hostM1" url="192.168.1.106:3306" user="root" password="123456">
                         <readHost host="hostS1" url="192.168.1.107:3306" user="root" password="123456"></readHost>
                 </writeHost>
         </dataHost>
         <dataHost name="host2" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                 <writeHost host="hostM2" url="192.168.1.108:3306" user="root" password="123456">
                         <readHost host="hostS2" url="192.168.1.109:3306" user="root" password="123456"></readHost>
                 </writeHost>
         </dataHost>
</mycat:schema>
  • 修改rule.xml文件,指定数据路由的规则
    这个配置文件中有很多预置规则,你没必要删除掉。我这里只是写一个我引用的策略处理讲解。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat="http://io.mycat/">
		<!--配置一个规则
		name:规则名称
		columns:数据分片的字段
		algorithm:指定使用的算法的引用,实现为function 标签内容。
		-->
        <tableRule name="mod-long">
                <rule>
                        <columns>id</columns>
                        <algorithm>mod-long</algorithm>
                </rule>
        </tableRule>
        <!--配置一个分片算法
		name:算法名称
		class:指定算法的实现类,这里指定了一个简单的取模算法
		-->
        <function name="mod-long" class="io.mycat.route.function.PartitionByMod">
                <!-- 有多少个数据分片库 -->
                <property name="count">2</property>
        </function>
</mycat:rule>

启动mycat的服务

mycat console

登录mycat

mysql -uroot -p123456 -h 192.168.85.111 -P8066

验证分库是否生效

在node01和node03上分别创建一张test表。

create table test(id int,name varchar(32));

插入几条数据,观察数据是否根据id%2来插入到node01或node03中。这里需要注意:values 前面的(id,name)不能省略,就算是全字段也不能省略。

insert into test(id,name) values(1,'zs');
insert into test(id,name) values(2,'ls');
insert into test(id,name) values(3,'ww');
insert into test(id,name) values(4,'xm');

登录node01查看是否插入了id为2和4的两条数据。
登录node03查看是否插入了id为2和4的两条数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值