标题说起:
首先感谢您能点击到这篇文章,对于一个不算新手的我来说,这个标题在学校刚学习数据库的时候,大家都不陌生了,经常出现的场景在一些select、update、insert 列名写的不对,都有可能出现这样的error 提示,但是对于我个人来说,生产上一个运行了很久的insert 语句突然接收到了elk 的一个报警,插入时列找不到,让我很是懵* 啊 ,有点丈二和尚摸不着头脑的感觉。
场景再现:
elk 报警信息大致如下 INSERT INTO table_name (userId,birth) VALUES (?,00000000); ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'userPersonalInfoId' in 'field list' ;
运行了很长时间的简单的sql ,怎么会出现这中问题呢,当时就找了dba ,dba 给的解释是可能是跨库插入(系统操作两个库,双写),这个解释很敷衍,我觉得不应该会有问题,带着好奇和敷衍,在这个周日我还是带着问题,一探究竟;
问题排查:
可能出现原因:
1. sql 本身错误(排除)2. 其他被触发的sql(spring aop /触发器)
第一种不可能,第二种spring aop 也不可能,报错代码行数明显是执行插入语

在生产环境中,一个长期运行的INSERT SQL突然因为'Unknown column'错误引发ELK报警。经过排查,问题可能源于新增的触发器导致的跨库插入错误。创建了一个触发器,在表test_table插入数据后,会向同结构的test_table_ins插入数据,但由于字段名称不匹配导致错误。
最低0.47元/天 解锁文章
1153

被折叠的 条评论
为什么被折叠?



