我正在使用tidb同步器将数据从mysql复制到tidb。但是我不完全理解警告“将拆分alter table语句”的含义。
我刚刚在下面发布了简单的alter table查询。为什么会拆分该语句以及它如何影响tidb的架构或数据。
ALTER TABLE `agg_url_base` ADD COLUMN `price` INT NULL AFTER `consumption`
下面有tidb的同步器日志。
2019/02/11 07:45:44 meta.go:135: [info] save position to file, binlog-name:mysql-bin.000153 binlog-pos:15852122 binlog-gtid:
2019/02/11 07:45:46 ddl.go:103: [warning] will split alter table statement: ALTER TABLE `agg_url_base` ADD COLUMN `price` INT NULL AFTER `consumption`
2019/02/11 07:45:46 ast.go:508: [info] spec &{node:{text:} Tp:2 Name: Constraint:<nil> Options:[] NewTable:<nil> NewColumns:[0xc0003616c0] OldColumnName:<nil> Position:0xc0005d10a0 LockType:0 Comment: FromKey: ToKey: PartDefinitions:[] Num:0}
2019/02/11 07:45:46 ddl.go:107: [warning] splitted alter table statement: [ALTER TABLE `agg_url_base` ADD COLUMN `price` int(11) NULL AFTER `consumption`]
2019/02/11 07:45:46 syncer.go:745: [info] [query]ALTER TABLE `agg_url_base` ADD COLUMN `price` INT NULL AFTER `consumption` [current pos](mysql-bin.000153, 15852977) [next pos](mysql-bin.000153, 15853214) [current gtid set] [next gtid set]<nil>
2019/02/11 07:45:46 syncer.go:784: [info] [ddl][schema]adn [start]USE `adn`; ALTER TABLE `agg_url_base` ADD COLUMN `price` int(11) NULL AFTER `consumption`;
2019/02/11 07:45:47 meta.go:135: [info] save position to file, binlog-name:mysql-bin.000153 binlog-pos:15853214 binlog-gtid:
2019/02/11 07:45:47 syncer.go:792: [info] [ddl][end]USE `adn`; ALTER TABLE `agg_url_base` ADD COLUMN `price` int(11) NULL AFTER `consumption`;
答案 0 :(得分:0)
为什么要拆分语句
在TiDB中,应该一个一个地执行多个DDL。如果在上游MySQL中使用多个DDL执行一个查询(例如修改一个查询中的多列),则它将在Syncer中拆分为多个查询(一个查询中只有一个DDL),然后在TiDB中执行。
它如何影响我的tidb模式或数据
如果原始查询组合了多个DDL,则查询效果不会像逐个执行多个查询那样改变。实际上,您可以将此警告视为 info 。