Open ninglianjie opened 8 years ago
没测试过,需要分析一下online ddl的一些行为
会创建触发器,并且有rename操作。比如:
RENAME TABLE sbtest
.sbtest1
TO sbtest
._sbtest1_old
, sbtest
._sbtest1_new
TO sbtest
.sbtest1
pt-online-schema-change肯定不能用,大量的数据写入临时表会阻塞同步,另外触发器可能会造成环路,最后的rename table会造成同步端新写入的数据丢失
多谢指点, 不过对于你描述的三个问题,仍然有些疑问:
只要能保证一端osc,另一端不要DML就没问题,我测过.
对应osc如何不进行DML的同步?
固定写入点,osc只能在写入点机房执行。写入点的问题,可以制定一个路由策略。
如下是我对PT工具+DDL使用的理解,欢迎交流:
我在测试过程中,用pt-online-schema-change改表之后,同步就断了,报下面的错误:
pid:1 nid:2 exception:setl:com.alibaba.otter.node.etl.select.exceptions.SelectException: java.lang.NullPointerException at com.alibaba.otter.node.etl.select.selector.MessageParser.parse(MessageParser.java:209) at com.alibaba.otter.node.etl.select.selector.canal.CanalEmbedSelector.selector(CanalEmbedSelector.java:264) at com.alibaba.otter.node.etl.select.SelectTask.processSelect(SelectTask.java:236) at com.alibaba.otter.node.etl.select.SelectTask.access$300(SelectTask.java:94) at com.alibaba.otter.node.etl.select.SelectTask$1.run(SelectTask.java:208) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) at java.util.concurrent.FutureTask.run(FutureTask.java:262) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:744) Caused by: java.lang.NullPointerException at com.alibaba.otter.node.etl.select.selector.MessageParser.internParse(MessageParser.java:378) at com.alibaba.otter.node.etl.select.selector.MessageParser.parse(MessageParser.java:181) ... 9 more