思路
otter读取binlog中的日志信息,导入扩容后的dble中。当原库和dble中数据同步完成时切换到新的路由。
工具
- otter
-
dble(需做修改)
修改版修改部分代码以兼容otter的复合语句,dble基于Mycat修复了较多bug
前提条件
- 源数据库是 Mysql 并开启Row模式的Binlog(中途开启不仅丢失数据,还可能导致迁移失败)
- 数据库默认字符集为GBK、UTF8、UTF8MB4、ISO-8859-1(otter 默认数据源只支持这些)
- 如果进行扩容,源库不能有主键修改的相关操作
环境准备
- zookeeper搭建,自行百度
- otter搭建 QuickStart
- dble搭建 dble-docs
具体步骤
-
zookeeper配置
-
node配置
-
数据源和数据表配置
-
canal配置,设置位点信息为起始位置
-
添加Channel
-
添加Pipeline,高级设置中选择跳过ddl异常
-
添加映射关系
-
启动
注意事项
- 原版本dble DruidInsertParse.java :221 处理如下 插入语句会报包含主键异常,需修改以兼容otter
insert into `xxx`(`name` , `id`) values (1 , 1) on duplicate key update `name`=values(`name`) , `id`=values(`id`)
- 默认同步是从开启otter时binlog的当前位置开始,同步整个表需设置canal自定义位点为起始位点。
- 在Mysql中执行show binary logs 查看初始binlog
-
配置管理 > canal配置 > 位点自定义设置 > 位点信息: {"journalName":"mysql-bin.000001","position":0};
- 关于全量同步还可以通过canal的自由门来实现