06-mycat完成分库分表【水平】

前两篇文章,我们了解了mysql的主从同步以及mycat对读写分离的管理。本文将阐述使用mycat完成分库分表。分表一般会导致分库,分表的目的就是把表一分多,提升查询效率。分表有两种方式,一是水平分表【按行】,一是垂直分表【按列】。我们先看一下水平分表。

1、前提约束

2、修改配置文件

  • 修改C:\Program Files\mycat\conf\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">
		<table name="t1" primaryKey="id"  dataNode="dn1,dn2" rule="role1"/> 
	</schema>
	<dataNode name="dn1" dataHost="localhost1" database="db01" />
	<dataNode name="dn2" dataHost="localhost1" database="db02" />
	<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
			  writeType="0" dbType="mysql" dbDriver="native" switchType="0"  slaveThreshold="100">
		<heartbeat>select user()</heartbeat>
		<writeHost host="192.168.100.134" url="192.168.100.134:3306" user="root"
				   password="zhangli">
			<readHost host="192.168.100.136" url="192.168.100.136:3306" user="root" password="zhangli" />
		</writeHost>
	</dataHost>
</mycat:schema>

注意:其中的role1就是rule.xml定义的如下内容,即对2取余

	<tableRule name="role1"> 
		<rule> 
			<columns>id</columns> 
			<algorithm>mod-long</algorithm> 
		</rule> 
	</tableRule>
	<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
		<!-- how many data nodes -->
		<property name="count">2</property>
	</function>

重启mycat。

3、登录主机134,创建db02实例、创建t1表

mysql -uroot -pzhangli -h 192.168.100.134
create database db02;
use db02;
create table t1(id int,name varchar(20));

4、登录mycat、删除之前数据、加入新数据

mysql -uroot -p123456 -P8066 
use TESTDB;
delete from t1;
insert into t1(id,name) values(1,'ali');
insert into t1(id,name) values(2,'zhangli');

5、登录从机136,查看db01、db02中的t1表数据

mysql -uroot -pzhangli -h 192.168.100.136
use db01;
select * from t1;
use db02;
select * from t1;

我们看到两条数据分别位于db01和db02,这就是id对2取模存储的结果。
至此,我们完成了mycat的水平分库分表。

posted @ 2020-03-27 16:13  张力的程序园  阅读(250)  评论(0)    收藏  举报