MyCat数据迁移与扩容

工具目前从 mycat1.6 开始支持。
一、准备工作
1、mycat 所在环境安装 mysql 客户端程序
2、mycat 的 lib 目录下添加 mysql 的 jdbc 驱动包(mycat安装包中自带了
3、对扩容缩容的表所有节点数据进行备份,以便迁移失败后的数据恢复
二、扩容缩容步骤
 1、复制 schema.xml、rule.xml 并重命名为 newSchema.xml、newRule.xml 放于 conf 目录下
2、修改 newSchema.xml 和 newRule.xml 配置文件为扩容缩容后的 mycat 配置参数(表的节点数、
数据源、路由规则)
3、修改 conf 目录下的 migrateTables.properties 配置文件,告诉工具哪些表需要进行扩容或缩容,没有出现在此配置文件的 schema 表不会进行数据迁移,格式:


4、修改 bin 目录下的 dataMigrate.sh 脚本文件,参数如下:
tempFileDir 临时文件路径,目录不存在将自动创建
isAwaysUseMaster 默认 true:不论是否发生主备切换,都使用主数据源数据,false:使用当前数据源
mysqlBin:mysql bin 路径,也是是mysqldump命令所在的目录,通过命令"find / -name mysqldump"查找mysqldump路径为"/usr/local/mysql-5.7.18/bin/mysqldump",指定#mysql bin路径为"/usr/local/mysql-5.7.18/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 条
5、停止 mycat 服务(如果可以确保扩容缩容过程中不会有写操作,也可以不停止 mycat 服务)
6、通过 crt 等工具进入 mycat 根目录,执行 bin/ dataMigrate.sh 脚本,开始扩容/缩容过程:


7、扩容缩容成功后,将 newSchema.xml 和 newRule.xml 重命名为 schema.xml 和 rule.xml 并替
换掉原文件,重启 mycat 服务,整个扩容缩容过程完成。

但是我所测试的是MySQL单机多实例,启动时候报错,模式为db1,db3在3307,db2,db4在3308

但是把数据库节点放到一个数据库服务上,用软连接就可以正常做数据迁移扩容缩容

命令为:ln -s  /usr/local/mysql-5.7.18/data/3307/mysql.sock    /tmp/

语法:ln -s 源文件  目标文件

linux中软连接查看:http://www.cnblogs.com/kex1n/p/5193826.html

::::::::::::呵呵::::::::::::

::::::::::::呵呵::::::::::::

ER表也扩容不成功,头皮发麻哇


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

猜你喜欢

转载自blog.csdn.net/qq_39669058/article/details/86075451