goInception icon indicating copy to clipboard operation
goInception copied to clipboard

和mycat之类的分布式数据库中间件打通

Open xujinhua01 opened this issue 5 years ago • 8 comments

描述您想要的功能: 希望能和mycat之类的分布式数据库中间件打通,这样在配置数据源的时候可以直接连接mycat,数据库分库后,上线SQL,就可以直接一次性将其路由到所有分库去执行相同的SQL。

描述您考虑过的解决/替代方案:

可参考文档,资料,引用等:

xujinhua01 avatar Aug 27 '19 03:08 xujinhua01

审核和执行还好,主要麻烦在备份上,如果多个分库执行的话,binlog回滚比较难做。

hanchuanchuan avatar Aug 27 '19 03:08 hanchuanchuan

备份回滚,应该也是根据分库路由配置,然后去具体的物理库去备份和进行回滚吧?或者做一个说明,分库执行的SQL不宜过大的说明或者限制。或者这个不支持备份,回滚。不然分库太多的话,一个个去执行比较费劲啊。

xujinhua01 avatar Aug 27 '19 04:08 xujinhua01

如果分库太多的话,怎么确定是谁执行了某条SQL呢,或者是一条update影响了多个分库,这时做binlog解析就需要去所有的分库都检查一下是否有数据变更。 如果不做备份,只是执行的话倒还好。

hanchuanchuan avatar Aug 27 '19 10:08 hanchuanchuan

可以通过select去查询备份。

swords1999 avatar Nov 15 '19 07:11 swords1999

备份文件就不是DML的逆向操作,只是单纯的select结果。这是一个同行的办法。

swords1999 avatar Nov 15 '19 07:11 swords1999

类似可以支持DRDS这些中间件

zwunix avatar Aug 18 '20 03:08 zwunix

那目前支持能在mycat执行DDL?不需要备份的话

wing731 avatar Jul 01 '21 02:07 wing731

那目前支持能在mycat执行DDL?不需要备份的话

现在是支持的,我目前有在用,不过有一个问题,goinception每次执行的时候会判断数据库是否是read_only模式,如果mycat是读写分离模式的话,goinception可能会直接返回,不执行了,参见代码 if s.checkIsReadOnly() { s.appendErrorMessage("当前数据库为只读模式,无法执行!") return }

quanbisen avatar Dec 10 '21 01:12 quanbisen