一条看起来正常的建表语句执行报语法错误,错误位置指向字段名附近。日志里能对上时间点,这种反而好排。

字段名用了 keys、order、group 这类保留字,没有加反引号导致解析歧义。这一点先确认清楚,后面就不用反复试。

CREATE TABLE t (
  `id` INT PRIMARY KEY,
  `order` INT,
  `group` VARCHAR(20)
);

这次卡住的地方就在「MySQL 语法错误」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。

日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。权限不要一口气开到最大,先加到够用再往上试,范围小才好收。

把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。

处理上按这个顺序:给保留字字段加反引号;批量检查表结构;新表命名避免使用保留字。

结果对不对很好判断,语句执行成功,表和字段都能正常插入与查询。

作者 9823189