这个事情怎么产生的库分
MyCat作为经典的分库分表中间件,在长时间内被广泛认为是表实步管理超大MySQL数据库集合的有效解决方案。近来接到客户需求,时同需要将MyCat集群迁移到GreatSQL中,库分并且在一段时间内需要实时从MyCat中同步数据到GreatSQL中,表实步全量同步数据比较容易操作,时同增量同步有如下两个棘手的库分问题:多个server,不同的WordPress模板表实步库名字,都要同步到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,时同复制会异常中断。
为了解决上面两个问题,服务器托管经过查询资料,发现有两个不常用,官方也不建议使用的功能,刚好能够满足需求

为解决库名映射问题:需要在配置文件中添加参数 复制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