问题描述
insert into t1 values('aa','bb','cc;cc','dd');单条语句脚本source执行成功。但是如果几百万条数据,在数据库source的时候却执行到一段数据库后就会出现报错:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near cc,dd at line 1.
如果你是,这个问题你的第一思路是什么?和max_allowed_packet有关?我的判断是语意语法这关还没过,肯定是SQL文件有问题,而有的判断是和max_allowed_packet设置过小有关,那么我们带着这样的疑问来测试下吧!!
mysql> set global max_allowed_packet = 2;
Query OK, 0 rows affected, 2 warnings (0.06 sec)
那么答案已经有了,根据SQL的执行顺序,首先是要校验语意语法,这只是一段硬代码的校验,还涉及不到server层。
其实这个问题比较简单,首先你要对SQL执行顺序非常了解!
这个问题的排查思路
检查SQL文本,看是否有特殊字符,中文分号等等,那么按照这个思路原因也最终找到了