MySQL 日期字段被置为 NULL 如何排查?
在 spring boot 和 mysql 5.7 的项目中,某个表中的日期字段出现了被修改为 null 的问题,源自未知的环节。为了解决该问题,考虑以下排查途径:
监控表字段变动
确实可以考虑监控指定表的字段变动情况。一种方法是使用 mysql 的触发器(triggers)来记录每次字段值的修改。当字段被修改时,触发器可以向你发送电子邮件或其他通知。以下是示例触发器代码:
delimiter $$ create trigger trigger_name after update on table_name for each row begin -- 发送电子邮件通知 set @email = 'example@email.com'; set @subject = 'field updated to null'; set @message = concat('the field ', old.column_name, ' in table ', table_name, ' was updated to null.'); call mysql.rds_send_mail(@email, @subject, @message); end$$ delimiter ;
在触发器创建后,请记住在字段发生修改时检查你的通知。
检查二进制日志
mysql 的二进制日志记录了对数据库所做的所有更改。你可以查找特定表的关键字,看看哪条 sql 语句将字段改成了 null。要执行此操作,请转到 mysql 命令行并运行以下命令:
mysqlbinlog /path/to/binary-log.000001 | grep -E "table_name|column_name|NULL"
这将过滤二进制日志,仅显示与目标表和字段相关的条目,帮助你找出导致问题的 sql 语句。