MyCat分库分表实时同步到GreatSQL

时间:2025-11-04 19:45:44来源:极客码头作者:人工智能

这个事情怎么产生的库分

MyCat作为经典的分库分表中间件,在长时间内被广泛认为是表实步管理超大MySQL数据库集合的有效解决方案。近来接到客户需求,时同需要将MyCat集群迁移到GreatSQL中,库分并且在一段时间内需要实时从MyCat中同步数据到GreatSQL中,表实步全量同步数据比较容易操作,时同增量同步有如下两个棘手的库分问题:多个server,不同的亿华云计算表实步库名字,都要同步到GreatSQL一个库中,时同即同步关系如下 复制server1:db1.tab->gdb:db.tab; server2:db2.tab->gdb:db.tab; server3:db3.tab->gdb:db.tab;1.2.3. ddl同步多次执行会冲突。库分当MyCat的表实步表中添加一个索引、添加一个字段时,时同实际上是库分后端所有db都会执行这个DDL,同步到GreatSQL时,表实步多次执行DDL,时同复制会异常中断。

为了解决上面两个问题,WordPress模板经过查询资料,发现有两个不常用,官方也不建议使用的功能,刚好能够满足需求

MyCat分库分表实时同步到GreatSQL

为解决库名映射问题:需要在配置文件中添加参数 复制replicate_rewrite_db="channel_1:test_rep1->test_rep" replicate_rewrite_db="channel_2:test_rep2->test_rep" replicate_rewrite_db="channel_3:test_rep3->test_rep"1.2.3. 为了解决DDL同步后重复执行导致复制中断问题,在配置文件中添加 复制slave-skip-errors=ddl_exist_errors1.

验证一下

为了简化问题,MyCat集群咱们就不搭建了,简化为多源同步复制问题。

1.初始化4个实例,同步关系如下

源端口

源DB_NAME

目标端口

目标映射DB

channel_name

3306

test_rep1

3309

test_rep

channel_3306

3307

test_rep2

3309

test_rep

channel_3307

3308

test_rep3

3309

test_rep

channel_3308

2.在3309的实例配置文件中,添加库映射关系配置和DDL冲突忽略参数

复制replicate_rewrite_db="channel_3306:test_rep1->test_rep" replicate_rewrite_db="channel_3307:test_rep2->test_rep" replicate_rewrite_db="channel_3308:test_rep3->test_rep" slave-skip-errors=ddl_exist_errors1.2.3.4.

4.在3309实例中,免费源码下载配置三个channel

复制greatsql> change master to MASTER_HOST = 172.17.137.91,MASTER_USER = greatsql,MASTER_PASSWORD = greatsql,MASTER_PORT = 3306,MASTER_AUTO_POSITION = 1 FOR CHANNEL channel_3306; greatsql> change master to MASTER_HOST = 172.17.137.91,MASTER_USER = greatsql,MASTER_PASSWORD = greatsql,MASTER_PORT = 3307,MASTER_AUTO_POSITION = 1 FOR CHANNEL channel_3307; greatsql> change master to MASTER_HOST = 172.17.137.91,MASTER_USER = greatsql,MASTER_PASSWORD = greatsql,MASTER_PORT = 3308,MASTER_AUTO_POSITION = 1 FOR CHANNEL channel_3308; greatsql> start slave;1.2.3.4.5.6.7.

3.检查channel配置状态

复制greatsql> show slave status \G

相关内容