MYCAT扩容

作者: adm 分类: mysql 发布时间: 2021-06-10

扩容是项目投入生产之后,经过一定的数据量的积累,达到一定的量级之后,需要执行的操作。

扩容配置下载地址

一、 离线扩容(摘自官方)

工具目前从 mycat1.6 开始支持。
一、准备工作
1、mycat 所在环境安装 mysql 客户端程序。
2、mycat 的 lib 目录下添加 mysql 的 jdbc 驱动包。
3、对扩容缩容的表所有节点数据进行备份,以便迁移失败后的数据恢复。
二、扩容缩容步骤
1、复制 schema.xml、rule.xml 并重命名为 newSchema.xml、newRule.xml 放于 conf 目录下。

2、修改 newSchema.xml 和 newRule.xml 配置文件为扩容缩容后的 mycat 配置参数(表的节点数、
数据源、路由规则)。

rule.xml

<function name=”mod-long” class=”io.mycat.route.function.PartitionByMod”>
<!– how many data nodes –>
<property name=”count”>4</property>
</function>

3、修改 conf 目录下的 migrateTables.properties 配置文件,告诉工具哪些表需要进行扩容或缩
容,没有出现在此配置文件的 schema 表不会进行数据迁移,格式:

4、修改 bin 目录下的 dataMigrate.sh 脚本文件,参数如下:
tempFileDir 临时文件路径,目录不存在将自动创建
isAwaysUseMaster 默认 true:不论是否发生主备切换,都使用主数据源数据,false:使用当前数据源
mysqlBin:mysql bin 路径
cmdLength mysqldump 命令行长度限制 默认 110k 110*1024。在 LINUX 操作系统有限制单条命令行的长度是 128KB,也就是
131072 字节,这个值可能不同操作系统不同内核都不一样,如果执行迁移时报 Cannot run program “sh”: error=7, Argument list too long
说明这个值设置大了,需要调小此值。
charset 导入导出数据所用字符集 默认 utf8
deleteTempFileDir 完成扩容缩容后是否删除临时文件 默认为 true threadCount 并行线程数(涉及生成中间文件和导入导出数据)默认为迁移程序所在主机环境的 cpu 核数*2
delThreadCount 每个数据库主机上清理冗余数据的并发线程数,默认为当前脚本程序所在主机 cpu 核数/2
queryPageSize 读取迁移节点全部数据时一次加载的数据量 默认 10w 条

指定临时文件路径

#临时文件路径,目录不存在将自动创建,不指定此目录则默认为mycat根下的temp目录
RUN_CMD=”$RUN_CMD -tempFileDir=/root/data/program/mycat/temp”
指定为false可以查看此过程中产生的sql

#完成扩容缩容后是否删除临时文件 默认为true
RUN_CMD=”$RUN_CMD -deleteTempFileDir=false”
 

通过命令”find / -name mysqldump”查找mysqldump路径为”/usr/bin/mysqldump”,指定#mysql bin路径为”/usr/bin/”

 

[root@localhost program]# cd mycat
[root@localhost mycat]# pwd
/root/data/program/mycat
[root@localhost mycat]# find / -name mysqldump
/usr/bin/mysqldump
[root@localhost mycat]# ^C
[root@localhost mycat]#
#mysql bin路径
RUN_CMD=”$RUN_CMD -mysqlBin=/usr/bin/” 这个一定得配置
5、停止 mycat 服务(如果可以确保扩容缩容过程中不会有写操作,也可以不停止 mycat 服
务)。
6、通过 crt 等工具进入 mycat 根目录,执行 bin/ dataMigrate.sh 脚本,开始扩容/缩容过程

7、扩容缩容成功后,将 newSchema.xml 和 newRule.xml 重命名为 schema.xml 和 rule.xml 并替
换掉原文件,重启 mycat 服务,整个扩容缩容过程完成。
三、注意事项:
1) 保证拆分表迁移数据前后路由规则一致。
2) 保证拆分表迁移数据前后拆分字段一致。
3) 全局表将被忽略。
4) 不要将非拆分表配置到 migrateTables.properties 文件中。
5) 暂时只支持拆分表使用 mysql 作为数据源的扩容缩容。
四、优化
dataMigrate.sh 脚本中影响数据迁移速度的有 4 个参数,正式迁移数据前可以先进行一次测
试,通过调整以下参数进行优化获得一个最快的参数组合。
threadCount 脚本执行所在主机的并行线程数(涉及生成中间文件和导入导出数据)默认为迁移程序所在主机环境的 cpu 核数*2
delThreadCount 每个数据库主机上清理冗余数据的并发线程数,默认为当前脚本程序所在主机 cpu 核数/2,同一主机上并发删
除数据操作线程数过多可能会导致性能严重下降,可以逐步提高并发数,获取执行最快的线程个数。
queryPageSize 读取迁移节点全部数据时一次加载的数据量 默认 10w 条
cmdLength mysqldump 命令行长度限制 默认 110k 110*1024。尽量让这个值跟操作系统命令长度最大值一致,可以通过以下过程
确定操作系统命令行最大长度限制:
逐步减少 100000,直到不再报错
/bin/sh -c “/bin/true $(seq 1 100000)” 获取不报错的值,通过 wc –c 统计字节数,结果即操作系统命令行最大长度限制(可能稍微小一些)

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!