目前在维护一个项目,有一个关于MySQL的问题。
问题的情景是这样的:有一个数据处理软件,会自动向mysql数据库中的指定表中插入数据。一次性插入20万行左右,这20万条数据是通过一条insert语句插入的20万条数据只用一次insert语句,插入的sql语句如下:
问题是:
有时候insert语句能执行成功,可以从这张表中查询到插入的数据,查询结果如下:
有时候insert语句执行不成功,不能从这张表中查询到数据,查询结果如下(查询结果为空):
1,我查看了msyql的通用日志general_log。发现对于查不到数据的情况,mysql也执行了insert语句。
2,然后我查看了mysql的二进制日志文件binlong,这个文件只记录了提交成功的sql语句,发现对于查不到数据的情况,在这个日志中找不到记录。
3,我查询了log_err日志文件,在这个文件中我没有找到查不到数据的相关记录
所以我现在怀疑mysql执行了insert语句,但是没有提交成功,磁盘上没有更新数据。
我该怎么解决这个问题呢?求大神给思路。
或者我该怎么查日志?去哪里找线索呢?
最可能的3个原因:
1.应用没有 commit(或异常退出)
2.大事务被中断(网络/超时)
3.其中一条数据错误,导致整条 SQL rollback
1.执行以下命令,如果是 0,说明必须手动提交。
2.执行
或者检查
如果有以下展示,会导致错误直接回滚
建议分批插入或者使用LOAD DATA INFILE