mycat

水平切分

原则
一:能不切分尽量不要切分
二:如果要切分一定要选择合适的切分规则,提前规划好
三:数据切分尽量通过数据冗余或表分组(Table Group)降低跨库Join的可能
四:由于数据库中间件对数据Join实现的优劣难以把握,而且实现高性能难度极大,业务读取尽量少使用多表Join
水平切分产生问题
一:引入分布式事务问题
二:跨节点 Join 问题
三:跨节点合并排序分页问题

Mycat介绍

1、是一个数据库代理
2、支持MySQL、SQL Server、Oracle、DB2、PostgreSQL等主流数据库,也支持MongoDB这种新型NoSQL方式的存储
3、Mycat并不存储数据,只做数据路由
Mycat的原理中最重要的一个动词是“拦截”,它拦截了用户发送过来的SQL语句,首先对SQL语句做了一些特定的分析:如分片分析、路由分析、读写分离分析、缓存分析等,然后将此SQL发往后端的真实数据库,并将返回的结果做适当的处理,最终再返回给用户
在这里插入图片描述
概念
逻辑库(schema)
存在在mycat里面的虚拟库
逻辑表(table)
存在在mycat里面的虚拟表
分片表
分片表,是指那些原有的很大数据的表,需要切分到多个数据库的表,这样,每个分片都有一部分数据,所有分片构成了完整的数据
非分片表
不需要进行数据切分的表
ER表
子表的记录与所关联的父表记录存放在同一个数据分片上,即子表依赖于父表,通过表分组(Table Group)保证数据Join不会跨库操作。
表分组(Table Group)
是解决跨分片数据join的一种很好的思路,也是数据切分规划的重要一条规则
全局表
例如字典表,每一个数据分片节点上有保存了一份字典表数据
数据冗余是解决跨分片数据join的一种很好的思路,也是数据切分规划的另外一条重要规则
分片节点(dataNode)
数据切分后,一个大表被分到不同的分片数据库上面,每个表分片所在的数据库就是分片节点
节点主机(dataHost)
数据切分后,每个分片节点(dataNode)不一定都会独占一台机器,同一机器上面可以有多个分片数据库,这样一个或多个分片节点(dataNode)所在的机器就是节点主机(dataHost),为了规避单节点主机并发数限制,尽量将读写压力高的分片节点(dataNode)均衡的放在不同的节点主机(dataHost)
分片规则(rule)
前面讲了数据切分,一个大表被分成若干个分片表,就需要一定的规则,这样按照某种业务规则把数据分到某个分片的规则就是分片规则,数据切分选择合适的分片规则非常重要,将极大的避免后续数据处理的难度。
全局序列号(sequence)
数据切分后,原有的关系数据库中的主键约束在分布式条件下将无法使用,因此需要引入外部机制保证数据唯一性标识,这种保证全局性的数据唯一标识的机制就是全局序列号(sequence)

mycat源码部署

下载源码:https://codeload.github.com/MyCATApache/Mycat-Server/zip/Mycat-server-1675-release
配置启动参数:
-DMYCAT_HOME=D:\soft\learn\Mycat-Server-Mycat-server-1675-release\src\main
-XX:MaxDirectMemorySize=512M
在这里插入图片描述

全局序列号

文件方式
server.xml配置:

<system><property name="sequnceHandlerType">0</property></system>

sequence_conf.properties配置
ORDER.HISIDS=
ORDER.MINID=1001
ORDER.MAXID=100000
ORDER.CURID=1000
HISIDS表示使用过的历史分段(一般无特殊需要可不配置),MINID表示最小ID值,MAXID表示最大ID值,CURID表示当前ID值

注意:sequnceHandlerType需要配置为0,表示使用本地文件方式。
使用示例:
insert into table1(id,name) values(‘next value for MYCATSEQ_ORDER’,‘test’);
缺点:当mycat重新发布后,配置文件中的sequence会恢复到初始值。
优点:本地加载,读取速度较快。

数据库方式
在数据库里面执行dbseq.sql文件中的SQL语句:
1、创建序列表:
CREATE TABLE MYCAT_SEQUENCE (name VARCHAR(50) NOT NULL,current_value INT NOT NULL,increment INT NOT NULL DEFAULT 100, PRIMARY KEY(name)) ENGINE=InnoDB;
name:表示sequence名称
current_value:表示当前value
increment:表示增长步长! 可理解为mycat在数据库中一次读取多少个sequence. 当这些用完后, 下次再从数据库中读取

2、创建相关方法
2.1、获取当前sequence的值
在这里插入图片描述
2.2、设置 sequence 值
在这里插入图片描述
2.3、获取下一个sequence值
在这里插入图片描述
3、插入针对product表的序列
INSERT INTO MYCAT_SEQUENCE(name,current_value,increment) VALUES (‘PRODUCT’, 1000000, 100);

4、server.xml配置

<system><property name="sequnceHandlerType">1</property></system>

5、sequence_db_conf.properties配置,指定sequence相关配置在哪个节点上
T_PRODUCT=localdn

6、测试
INSERT INTO MYCAT_SEQUENCE(name,current_value,increment) VALUES (‘T_PRODUCT‘, 1000000, 100);
insert into t_product(product_id,product_content) values (‘next value for MYCATSEQ_PRODUCT’,‘96’);

时间戳方式
server.xml配置:

<system><property name="sequnceHandlerType">2</property></system>

sequence_time_conf.properties配置
#0-31为整数,每一个mycat节点的这两个配置值都不一样
WORKID=01
DATAACENTERID=01

zk方式
server.xml配置:

<system><property name="sequnceHandlerType">3</property></system>

myid.properties配置
loadZk=true
zkURL=192.168.163.118:2181
clusterId=mycat_cluster_01
myid=mycat_fz_01
clusterSize=1
clusterNodes=mycat_fz_01

sequence_distributed_conf.properties配置
#从zk中获取实例id
INSTANCEID=zk
#集群id
CLUSTERID=01

非分片

schema.xml中配置如下:

<schema name="testdb" checkSQLschema="true" sqlMaxLimit="100" dataNode="localdn">
	<table name="product" dataNode="localdn" primaryKey="productCode">
	</table>
</schema>
<dataNode name="localdn" dataHost="localhost1" database="test" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
	  writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1"  slaveThreshold="100">
	<heartbeat>select user()</heartbeat>
	<!-- can have multi write hosts -->
	<writeHost host="hostM1" url="jdbc:mysql://localhost:3306" user="root"
			   password="root">
	</writeHost>
</dataHost>

分表

schema.xml中配置如下:

 <schema name="testdb" checkSQLschema="true" dataNode="localdn">
		<table name="order" dataNode="localdn" subTables="order$1-3" primaryKey="order_id" rule="mod-long">
		</table>
</schema>
<dataNode name="localdn" dataHost="localhost1" database="test" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
			  writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1"  slaveThreshold="100">
	<heartbeat>select user()</heartbeat>
	<!-- can have multi write hosts -->
	<writeHost host="hostM1" url="jdbc:mysql://localhost:3306" user="root"
			   password="root">
	</writeHost>
</dataHost>

rule.xml中配置如下:

<tableRule name="mod-long">
	<rule>
		<columns>order_id</columns>
		<algorithm>mod-long</algorithm>
	</rule>
</tableRule>
<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
	<property name="count">3</property>
</function>

分库

schema.xml中配置如下:

<schema name="ruleDB" checkSQLschema="true" dataNode="dn88">
	<table name="t_order" dataNode="dn88,dn98"  primaryKey="orderId" rule="mod-long">
	</table>
</schema>
<dataNode name="dn88" dataHost="host88" database="rule_db" />
<dataNode name="dn98" dataHost="host98" database="rule_db" />
<dataHost name="host88" maxCon="1000" minCon="10" balance="0"
		  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
	<heartbeat>select user()</heartbeat>
	<connectionInitSql></connectionInitSql>
	<writeHost host="hostM1" url="192.168.163.88:3306" user="root"
			   password="root">
		<readHost host="hostM2" url="192.168.163.89:3306" password="root" user="root"/>
	</writeHost>
</dataHost>
<dataHost name="host98" maxCon="1000" minCon="10" balance="0"
		  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
	<heartbeat>select user()</heartbeat>
	<connectionInitSql></connectionInitSql>
	<writeHost host="hostM1" url="192.168.163.98:3306" user="root"
			   password="root">
		<readHost host="hostM2" url="192.168.163.99:3306" password="root" user="root"/>
	</writeHost>
</dataHost>

rule.xml中配置如下:

<tableRule name="mod-long">
	<rule>
		<columns>orderId</columns>
		<algorithm>mod-long</algorithm>
	</rule>
</tableRule>
<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
	<property name="count">2</property>
</function>

分片枚举

应用场景:
通过在配置文件中配置可能的枚举id,自己配置分片,本规则适用于特定的场景,比如有些业务需要按照省份或区县来做保存,不同的省份存到不同的数据节点。

schema.xml中配置如下:

<schema name="ruleDB" checkSQLschema="true" dataNode="dn88">
	<table name="t_order_sharing_by_intfile" dataNode="dn88,dn98"  primaryKey="orderId" rule="sharding-by-intfile">
	</table>
</schema>
<dataNode name="dn88" dataHost="host88" database="rule_db" />
<dataNode name="dn98" dataHost="host98" database="rule_db" />
<dataHost name="host88" maxCon="1000" minCon="10" balance="0"
		  writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1"  slaveThreshold="100">

	<heartbeat>select user()</heartbeat>
	<connectionInitSql></connectionInitSql>
			<writeHost host="hostM1" url="jdbc:mysql://192.168.163.88:3306" user="root"
			   password="root">
		<readHost host="hostM2" url="jdbc:mysql://192.168.163.89:3306" password="root" user="root"/>
	</writeHost>
</dataHost>
<dataHost name="host98" maxCon="1000" minCon="10" balance="0"
		  writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1"  slaveThreshold="100">
	<heartbeat>select user()</heartbeat>
	<connectionInitSql></connectionInitSql>
			<writeHost host="hostM1" url="jdbc:mysql://192.168.163.98:3306" user="root"
			   password="root">
		<readHost host="hostM2" url="jdbc:mysql://192.168.163.99:3306" password="root" user="root"/>
	</writeHost>
</dataHost>

rule.xml中配置如下:

<tableRule name="sharding-by-intfile">
	<rule>
		<columns>province</columns>
		<algorithm>hash-int</algorithm>
	</rule>
</tableRule>
<function name="hash-int" class="io.mycat.route.function.PartitionByFileMap">
	<property name="mapFile">partition-hash-int.txt</property>
	<property name="type">1</property>
	<property name="defaultNode">0</property>
</function>

partition-hash-int.txt中配置如下:

hunan=0
hubei=1
shanghai=1
chongqing=0
sichuan=1
xizang=1

固定hash

应用场景:
本条规则类似于十进制的求模运算,区别在于是二进制的操作,是取id的二进制低10位,即id二进制&1111111111。
优点在于如果按照10进制取模运算,在连续插入1-10时候1-10会被分到1-10个分片,增大了插入的事务控制难度,而此算法根据二进制则可能会分到连续的分片,减少插入事务控制难度

schema.xml中配置如下:

<schema name="ruleDB" checkSQLschema="true" dataNode="dn88">
	<table name="t_order_gd_hash" dataNode="dn88,dn98"  primaryKey="orderId" rule="gd-hash">
	</table>
</schema>
<dataNode name="dn88" dataHost="host88" database="rule_db" />
<dataNode name="dn98" dataHost="host98" database="rule_db" />
<dataHost name="host88" maxCon="1000" minCon="10" balance="0"
		  writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1"  slaveThreshold="100">
	<heartbeat>select user()</heartbeat>
	<connectionInitSql></connectionInitSql>
	<writeHost host="hostM1" url="jdbc:mysql://192.168.163.88:3306" user="root"
			   password="root">
		<readHost host="hostM2" url="jdbc:mysql://192.168.163.89:3306" password="root" user="root"/>
	</writeHost>
</dataHost>
<dataHost name="host98" maxCon="1000" minCon="10" balance="0"
		  writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1"  slaveThreshold="100">
	<heartbeat>select user()</heartbeat>
	<connectionInitSql></connectionInitSql>
	<writeHost host="hostM1" url="jdbc:mysql://192.168.163.98:3306" user="root"
			   password="root">
		<readHost host="hostM2" url="jdbc:mysql://192.168.163.99:3306" password="root" user="root"/>
	</writeHost>
</dataHost>

rule.xml中配置如下:

<tableRule name="gd-hash">
	<rule>
		<columns>orderId</columns>
		<algorithm>gd-hash-func</algorithm>
	</rule>
</tableRule>
<function name="gd-hash-func" class="io.mycat.route.function.PartitionByLong">
	<property name="partitionCount">1,1</property>
	<property name="partitionLength">256,768</property>
</function>

范围约定

应用场景:
此分片适用于提前规划好分片字段某个范围属于哪个分片

schema.xml中配置如下:

<schema name="ruleDB" checkSQLschema="true" dataNode="dn88">
	<table name="t_order_range" dataNode="dn88,dn98"  primaryKey="orderId" rule="auto-sharding-long">
	</table>
</schema>
<dataNode name="dn88" dataHost="host88" database="rule_db" />
<dataNode name="dn98" dataHost="host98" database="rule_db" />
<dataHost name="host88" maxCon="1000" minCon="10" balance="0"
		  writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1"  slaveThreshold="100">
	<heartbeat>select user()</heartbeat>
	<connectionInitSql></connectionInitSql>
	<writeHost host="hostM1" url="jdbc:mysql://192.168.163.88:3306" user="root"
			   password="root">
		<readHost host="hostM2" url="jdbc:mysql://192.168.163.89:3306" password="root" user="root"/>
	</writeHost>
</dataHost>
<dataHost name="host98" maxCon="1000" minCon="10" balance="0"
		  writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1"  slaveThreshold="100">
	<heartbeat>select user()</heartbeat>
	<connectionInitSql></connectionInitSql>
	<writeHost host="hostM1" url="jdbc:mysql://192.168.163.98:3306" user="root"
			   password="root">
		<readHost host="hostM2" url="jdbc:mysql://192.168.163.99:3306" password="root" user="root"/>
	</writeHost>
</dataHost>

rule.xml中配置如下:

<tableRule name="auto-sharding-long">
	<rule>
		<columns>orderId</columns>
		<algorithm>rang-long</algorithm>
	</rule>
</tableRule>
<function name="rang-long" class="io.mycat.route.function.AutoPartitionByLong">
	<property name="mapFile">autopartition-long.txt</property>
</function>

autopartition-long.txt中配置如下:
0-500=0
501-1000=1

按日期(天)

应用场景:
按天分片

schema.xml中配置如下:

<schema name="ruleDB" checkSQLschema="true" dataNode="dn88">
	<table name="t_order_time_day" dataNode="dn88,dn98"  primaryKey="orderId" rule="sharding-by-date-day">
	</table>
</schema>
<dataNode name="dn88" dataHost="host88" database="rule_db" />
<dataNode name="dn98" dataHost="host98" database="rule_db" />
<dataHost name="host88" maxCon="1000" minCon="10" balance="0"
		  writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1"  slaveThreshold="100">
	<heartbeat>select user()</heartbeat>
	<connectionInitSql></connectionInitSql>
	<writeHost host="hostM1" url="jdbc:mysql://192.168.163.88:3306" user="root"
			   password="root">
		<readHost host="hostM2" url="jdbc:mysql://192.168.163.89:3306" password="root" user="root"/>
	</writeHost>
</dataHost>
<dataHost name="host98" maxCon="1000" minCon="10" balance="0"
		  writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1"  slaveThreshold="100">
	<heartbeat>select user()</heartbeat>
	<connectionInitSql></connectionInitSql>
	<writeHost host="hostM1" url="jdbc:mysql://192.168.163.98:3306" user="root"
			   password="root">
		<readHost host="hostM2" url="jdbc:mysql://192.168.163.99:3306" password="root" user="root"/>
	</writeHost>
</dataHost>

rule.xml中配置如下:

<tableRule name="sharding-by-date-day">
	<rule>
		<columns>createTime</columns>
		<algorithm>partbyday</algorithm>
	</rule>
</tableRule>
<function name="partbyday"
		  class="io.mycat.route.function.PartitionByDate">
	<property name="dateFormat">yyyy-MM-dd</property>
	<property name="sNaturalDay">0</property>
	<property name="sBeginDate">2020-05-01</property>
	<property name="sEndDate">2020-05-20</property>
	<property name="sPartionDay">10</property>
</function>

一致性hash

应用场景:
数据均匀分布,不出现数据倾斜的情况

schema.xml中配置如下:

<schema name="ruleDB" checkSQLschema="true" dataNode="dn88">
	<table name="t_order_murmur_hash" dataNode="dn88,dn98"  primaryKey="orderId" rule="sharding-by-murmur">
	</table>
</schema>
<dataNode name="dn88" dataHost="host88" database="rule_db" />
<dataNode name="dn98" dataHost="host98" database="rule_db" />
<dataHost name="host88" maxCon="1000" minCon="10" balance="0"
		  writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1"  slaveThreshold="100">
	<heartbeat>select user()</heartbeat>
	<connectionInitSql></connectionInitSql>
	<writeHost host="hostM1" url="jdbc:mysql://192.168.163.88:3306" user="root"
			   password="root">
		<readHost host="hostM2" url="jdbc:mysql://192.168.163.89:3306" password="root" user="root"/>
	</writeHost>
</dataHost>
<dataHost name="host98" maxCon="1000" minCon="10" balance="0"
		  writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1"  slaveThreshold="100">
	<heartbeat>select user()</heartbeat>
	<connectionInitSql></connectionInitSql>
	<writeHost host="hostM1" url="jdbc:mysql://192.168.163.98:3306" user="root"
			   password="root">
		<readHost host="hostM2" url="jdbc:mysql://192.168.163.99:3306" password="root" user="root"/>
	</writeHost>
</dataHost>

rule.xml中配置如下:

<tableRule name="sharding-by-murmur">
	<rule>
		<columns>orderId</columns>
		<algorithm>murmur</algorithm>
	</rule>
</tableRule>
<function name="murmur" class="io.mycat.route.function.PartitionByMurmurHash">
	<property name="seed">0</property>
	<property name="count">2</property>
	<property name="virtualBucketTimes">160</property>
</function>

全局表

mycat中全局表需要满足以下几个特点
1、数据量少
2、每一个分片都需要用到
3、往往是系统的字典表
为了避免跨库join,所以在每一个分片节点里面都保存了一份

schema.xml中配置如下:

<schema name="ruleDB" checkSQLschema="true" dataNode="dn88">
	<table name="t_order_type" primaryKey="orderType" dataNode="dn88,dn98" type="global"/>
</schema>
<dataNode name="dn88" dataHost="host88" database="rule_db" />
<dataNode name="dn98" dataHost="host98" database="rule_db" />
<dataHost name="host88" maxCon="1000" minCon="10" balance="0"
		  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
	<heartbeat>select user()</heartbeat>
	<connectionInitSql></connectionInitSql>
	<writeHost host="hostM1" url="192.168.163.88:3306" user="root"
			   password="root">
		<readHost host="hostM2" url="192.168.163.89:3306" password="root" user="root"/>
	</writeHost>
</dataHost>
<dataHost name="host98" maxCon="1000" minCon="10" balance="0"
		  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
	<heartbeat>select user()</heartbeat>
	<connectionInitSql></connectionInitSql>
	<writeHost host="hostM1" url="192.168.163.98:3306" user="root"
			   password="root">
		<readHost host="hostM2" url="192.168.163.99:3306" password="root" user="root"/>
	</writeHost>
</dataHost>

ER分片表

mycat中ER分片表,需要满足以下几个特点
1、表和表之间存在主从关系
2、存在外键关联
需要把存在关联关系的id存储到同一个分片节点里面
schema.xml中配置如下:

<schema name="ruleDB" checkSQLschema="true" dataNode="dn88">
	<table name="t_order" dataNode="dn88,dn98"  primaryKey="orderId" rule="mod-long1">
		<childTable name="t_order_detail" primaryKey="orderDetailId" joinKey="orderId" parentKey="orderId"/>
	</table>
</schema>
<dataNode name="dn88" dataHost="host88" database="rule_db" />
<dataNode name="dn98" dataHost="host98" database="rule_db" />
<dataHost name="host88" maxCon="1000" minCon="10" balance="0"
		  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
	<heartbeat>select user()</heartbeat>
	<connectionInitSql></connectionInitSql>
	<writeHost host="hostM1" url="192.168.163.88:3306" user="root"
			   password="root">
		<readHost host="hostM2" url="192.168.163.89:3306" password="root" user="root"/>
	</writeHost>
</dataHost>
<dataHost name="host98" maxCon="1000" minCon="10" balance="0"
		  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
	<heartbeat>select user()</heartbeat>
	<connectionInitSql></connectionInitSql>
	<writeHost host="hostM1" url="192.168.163.98:3306" user="root"
			   password="root">
		<readHost host="hostM2" url="192.168.163.99:3306" password="root" user="root"/>
	</writeHost>
</dataHost>

解决跨库join

利用ShareJoin方式进行跨库JOIN
原理是解析SQL语句,拆分成单表的SQL语句执行,然后把各个节点的数据汇集
/*!mycat:catlet=io.mycat.catlets.ShareJoin /select b. from t_order a join t_order_detail b on a.orderId=b.orderId;

mycat-web

1、下载mycat-web二进制包
2、解压
在这里插入图片描述
3、启动zookeeper
在这里插入图片描述
4、修改mycat-web配置文件
vi /usr/local/mycat-web/mycat-web/WEB-INF/classes/mycat.properties
在这里插入图片描述
5、启动mycat-web
进入目录 cd /usr/local/mycat-web 执行启动脚本 ./start.sh
访问界面:
在这里插入图片描述

mycat命令行监控

mycat有两个端口
8066是数据端口,9066是管理端口

登录9066管理端口:
mysql -uroot -proot -P 9066
在这里插入图片描述
查询所有指令
show @@help;
在这里插入图片描述
加载配置文件,无需启动mycat(注意会阻塞mycat)
reload @@config

查看数据库
show @@database;
在这里插入图片描述
查看分片节点
show @@datanode;
在这里插入图片描述
查找对应的schema下面的dataNode列表
show @@datanode where schema = ruleDB;

报告心跳状态
show @@heartbeat;

获取Mycat的前端连接状态,即应用与mycat的连接
show @@connection;
用于杀掉连接
kill @@connection id,id,id

查看后端连接状态
show @@backend;

查看mycat缓存
show @@cache;
在这里插入图片描述
SQLRouteCache:SQL路由缓存
TableID2DataNodeCache : 缓存表主键与分片对应关系
ER_SQL2PARENTID : 缓存ER分片中子表与父表关系

查看数据源状态,如果配置了主从,或者多主可以切换
show @@datasource;

切换数据源:
switch @@datasource name:index;
name:schema中配置的dataHost中name
index:schema中配置的dataHost的writeHost index 位标,即按照配置顺序从上到下的一次顺 序,从0开始。

切换数据源时,会将原数据源所有的连接池中连接关闭,并且从新数据源创建新连接,此时mycat服务不可用
dnindex.properties 文件在记录了当前的活跃writer。

reload @@config,
switch @@datasource name:index ,
这两个命令再进行处理时,mycat服务不可用,谨慎处理,防止正在提交的事务出错

mycat扩容

1、新建用于扩容的newSchema.xml和newRule.xml文件
这两个文件是扩容以后的分片节点配置

2、修改dataMigrate.sh文件
该文件类型是dos的,需要修改为unix类型
查看.sh文件类型::set ff
修改.sh文件类型::set ff=unix 回车

3、修改dataMigrate.sh中的配置
基本上修改一个即可:
#mysql bin路径
RUN_CMD="$RUN_CMD -mysqlBin=/usr/bin"
这个是mysqldump文件的路径,
找该文件:find / -name mysqldump

4、修改migrateTables.properties配置文件,指定需要迁移的逻辑库和表

5、./dataMigrate.sh 执行迁移

注意事项
1、jdk不能用openJdk,需要自己安装,配置环境变量
2、之前的老的schema.xml和rule.xml老配置不能动
3、新增迁移后的节点新配置newSchema.xml和newRule.xml
4、migrateTables.properties中逻辑库的名称不能既有大些又有小写,必须全小写或全大写。
5、迁移类:DataMigrator

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值