原有分片节点为2,此处扩容成3。
2.1.1 mycat 所在环境安装 mysql 客户端程序
2.1.2 mycat 的 lib 目录下添加 mysql 的 jdbc 驱动包
下载mysql-connect-jdbc-5.1.35.jar,下载地址:
https://mvnrepository.com/artifact/mysql/mysql-connector-java/5.1.35
把下载的jar包放到mycat lib目录下:/root/data/program/mycat/lib
2.1.3 对扩容缩容的表所有节点数据进行备份,以便迁移失败后的数据恢复
复制 schema.xml、rule.xml 并重命名为 newSchema.xml、newRule.xml 放于 conf 目录下。
newRule.xml中
<mycat:rule xmlns:mycat="http://io.mycat/">
<tableRule name="rule1">
<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">3</property>
</function>
</mycat:rule>
Count由原来的2改为3
newSchema.xml中添加db03节点,并配置到表的dataNode中
<dataNode name="node_db01" dataHost="dataHost01" database="test01" />
<dataNode name="node_db02" dataHost="dataHost01" database="test02" />
<dataNode name="node_db03" dataHost="dataHost01" database="test03" />
<table name="item" primaryKey="id" dataNode="node_db01,node_db02,node_db03" rule="rule1" >
2.1.4 配置conf/migrateTables.properties
migrateTables.properties
db_user=users
#schema1=tb1,tb2,…
#schema2=all(写all或者不写将对此schema下拆分节点变化的拆分表全部进行重新路由)
#…
#sample
#TESTDB=travelrecord,company,goods
#要扩容的逻辑库 对应的逻辑表
TESTDB=item
2.1.5修改bin/dataMigrate.sh,执行dataMigrate.sh
指定临时文件路径
#临时文件路径,目录不存在将自动创建,不指定此目录则默认为mycat根下的temp目录
RUN_CMD=“KaTeX parse error: Expected 'EOF', got '#' at position 78: …可以查看此过程中产生的sql #̲完成扩容缩容后是否删除临时文件…RUN_CMD -deleteTempFileDir=false”
通过命令"find / -name mysqldump"查找mysqldump路径为"/usr/bin/mysqldump",指定#mysql bin路径为"/usr/bin/"
#临时文件路径,目录不存在将自动创建,不指定此目录则默认为mycat根下的temp目录
RUN_CMD=“KaTeX parse error: Expected 'EOF', got '#' at position 40: …me/emeet/temp" #̲默认true:不论是否发生主备…RUN_CMD -isAwaysUseMaster=true”
#mysql bin路径
RUN_CMD="$RUN_CMD -mysqlBin=/usr/bin/"
mycat bin目录下执行脚本"./dataMigrate.sh" 报错:
Error: JAVA_HOME environment variable is not set.
这个问题折腾了好久,
网上的解决方案:不用openjdk,下载jdk解压配置环境变量解决的参考文档:https://blog.csdn.net/Haiyang_Duan/article/details/62099225
我自己的解决方案:
手动修改java路径:
#RUN_CMD="\"$JAVA_HOME/bin/java\""
RUN_CMD="/usr/local/jdk1.8.0_201/bin/java"
并屏蔽掉该文件顶部的验证JAVA_HOME代码。
2.1.6扩容缩容成功后,将 newSchema.xml 和 newRule.xml 重命名为 schema.xml 和 rule.xml 并替 换掉原文件,重启 mycat 服务,整个扩容缩容过程完成。
检查各库的数据是否符合预期。
此处有个问题,测试时候,发现历史数据没有重新路由,疑似原因是因为测试库都在本地mysql,需要验证。
重新插入的数据,都路由到三个节点了。