使用的是 Mycat 提供的 dataMigrate 脚本进行对数据进行迁移和节点扩容,目前支持的 Mycat 是1.6 版本,由于 Mycat 是由 Java 编写的因此在做数据迁移及节点扩容时需要安装JDK等,还有相关的依赖数据库驱动程序等
准备工作
- 对扩容表的所有数据节点进行备份,以便迁移失败后的数据恢复
- 安装JDK 1.8 版本,并设置好环境变量
- 在 Mycat 的 lib 目录中,增加 MySql 的 JDBC 驱动包
- 在 Mycat 的环境中安装 MySql 的客户端程序
- 使用 root 用户登陆 mycat 环境系统
扩容步骤
- 复制 schema.xml 和 rule.xml 文件并重命名为 newSchema.xml 和 newRule.xml,存放于 conf 目录
- 修改 newSchema.xml 和 newRule.xml 配置文件为扩容后的 mycat 配置参数(表的数据节点、数据源、路由规则)
-
修改 conf 目录下的 migrateTables.properties 文件,该配置文件用于告知工具,那些表需要进行扩容或收缩,如果不在该配置文件的表,不会进行数据迁移,示例如下:
-
修改 bin 目录下的 dataMigrate.sh 脚本文件,参数说明如下:
- tempFileDir:临时文件路径,如果目录不存在则会自动创建
- isAwayUseMaster:默认 true,不论是否发生主备切换,都使用主数据源
- deleteTempFileDir:默认 true,完成数据迁移后是否删除临时文件
- threadCount:默认主机环境CPU核心数量 * 2,并行线程数量(用于生成中间文件和导入导出数据)
- delThreadCount:默认主机环境CPU核心数量 / 2,清理冗余数据的并发线程
- queryPageSize:默认10万,读取迁移节点全部数据的每次加载数据量
- 停止 mycat 服务,需要保证数据库不会再有写操作
-
通过 PuTTY 工具进入 mycat 根目录下的 bin 目录,执行 dataMigrate.sh 脚本,开始进行扩容,
显示迁移信息和迁移数据(此处不需要迁移,因此显示的是[0 , 0],正常情况应该显示需要迁移的数据量)
显示数据迁移验证结果
- 脚本执行完成,如果最后的数据迁移验证通过,就可以将之前的 newSchema.xml 和 newRule.xml 替换之前的 schema.xml 和 rule.xml 文件,并重启 mycat即可。
存在问题
- 目前 Mycat 1.6 提供的数据迁移脚本,只能支持分片字段的值必须是唯一的,不能重复,因此在使用时尽量使用唯一的字段来做分切字段。