mycat进行分库分表

关于mysql安装:https://blog.csdn.net/weixin_44001681/article/details/105465704
关于mysql配置主从:https://blog.csdn.net/weixin_44001681/article/details/105470049

mycat的分片规则有:在rule.xml中定义了各种myCat支持的分片规则。
取模mod-long
自然月分片 sharding-by-month
按日期(天)分片sharding-by-date
按单月小时拆分sharding-by-hour
范围约定,提前规划好分片字段某个范围属于哪个分片,auto-sharding-long
范围求模分片
取模范围约束sharding-by-pattern
分片枚举sharding-by-intfile
固定分片hash算法
截取数字hash解析sharding-by-stringhash
一致性hash
日期范围hash分片rangeDateHash
截取数字做hash求模范围约束sharding-by-prefixpattern
应用指定,在运行阶段有应用自主决定路由到那个分片。sharding-by-substring
冷热数据分片 sharding-by-date(和按日期分的函数不同)
有状态分片算法
crc32slot分片算法

在分片之前先保证主从数据库都开放3306端口,并能够被mycat访问

grant all privileges on *.* to 'root'@'%' identified by 'password' with grant option;

分片算法之前先配置一下这个逻辑数据库的库名以及登陆密码,进入server.xml文件配置

vim /usr/local/mycat/conf/server.xml

在这里插入图片描述
图中配置三处,第一处登陆逻辑数据库的密码,第二第三处为你的逻辑数据库名。
在这里插入图片描述
另外从注释文件中知道mycat默认端口为8066,因此去iptables开放一下8066端口。

之后进行分片的配置
在mycat的conf文件中配置schema.xml文件

cd /usr/local/mycat/conf
vim schema.xml

配置内容

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
	<schema name="ego" checkSQLschema="false" sqlMaxLimit="100">
		<table name="test_1" dataNode="dn1,dn2,dn3" rule="crc32slot" />
		<table name="test_2" dataNode="dn1,dn2,dn3" rule="crc32slot1"/>
		
	</schema>

	<dataNode name="dn1" dataHost="localhost1" database="db1" />
	<dataNode name="dn2" dataHost="localhost1" database="db2" />
	<dataNode name="dn3" dataHost="localhost1" database="db3" />

	<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
			  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
		<heartbeat>select user()</heartbeat>

		<writeHost host="hostM1" url="192.168.17.132:3306" user="root"
				   password="password">

			<readHost host="hostS2" url="192.168.17.133:3306" user="root" password="password" />
		</writeHost>

	</dataHost>

</mycat:schema>

配置文件需要知道如下概念:
逻辑库: 一个包含了所有数据库的逻辑上的数据库 (mycat的数据库)
逻辑表: 一个包含了所有表的逻辑上的表 (mycat的表)
数据主机:数据库软件安装到哪个服务器上
数据节点:数据库软件中的 database
分片规则: 默认每个表中数据都一样的
读主机:哪个数据库做为读操作
写主机.:哪个数据做为写操作

需要注意的是每个表的tableRule不能重复,需要单独对每个表配置rule

之后在rule.xml中定义分片规则如下,分为两部分,对tableRule的定义包含了对主键列的选择以及分片算法的选择,并在下面要给出该算法function,以及分片的数据节点数。

<tableRule name="crc32slot">
	<rule>
		<columns>id</columns>
		<algorithm>crc32slot</algorithm>
	</rule>
</tableRule>
<tableRule name="crc32slot1">
	<rule>
		<columns>id</columns>
		<algorithm>crc32slot</algorithm>
	</rule>
</tableRule>


<function name="crc32slot"	class="io.mycat.route.function.PartitionByCRC32PreSlot">
		<property name="count">3</property><!-- 要分片的数据库节点数量,必须指定,否则没法分片 -->
</function>


这时,还要做一步,在 crc32Slot 算法中的分片数量一旦给定,MyCat 会将该分片数量和 slor 的取值范围保存到文件中。再次修改分片数量时是不会生效的,需要将该文件删除。文件位置位于 conf目录中的 ruledata 目录中。
(被这一步坑了好久,最后好不容易查到是这样,后附参考链接)

打开mycat

./mycat start

之后建立database,在schema.xml文件中配置的写主机中新建三个名字为db1、db2、db3的数据库(与schema文件中配置一致),那么读主机中也有了这三个数据库。之后去数据库管理软件执行sql文件向表中添加数据即可,可以看到分表成功,数据分布在三个表中。

参考链接:https://www.cnblogs.com/cxydmx/p/11740721.html

发布了66 篇原创文章 · 获赞 5 · 访问量 3492

猜你喜欢

转载自blog.csdn.net/weixin_44001681/article/details/105448957