大个Insert语句拆分脚本

在使用phpmyadmin导出mysql数据的时候,往往会把一张数据表中的数据导为一个很大的insert语句,造成导回mysql的时候报错。比如如下这样的错误:

ERROR 2006 at line 6080: MySQL server has gone away

因此完成了这个脚本对phpmyadmin导出的sql脚本进行处理,拆分所有大的insert语句,使每条insert语句只负责插入一个数据行,这样再导入mysql的时候出错的可能也会减小。

这是在nt系列内核下可以直接执行的二进制版本:

Attach:SplitInsert_Bin.zip

这是Python源代码:

Attach:SplitInsert_Src.zip

使用方法为: SplitInsert 源sql文件名 目的sql文件名

处理后的sql脚本可以使用mysql附带的命令行工具导入数据库:

mysql -u USER_NAME -p DATA_BASE_NAME < SQL_FILE_NAME

之后输入用户密码,就会开始数据导入过程。


mysql自带的mysqldump工具导出的sql脚本一般可以正常导入,不需要我这个程序的处理。使用方法大致是这样的:

mysqldump 要导出的数据库名 > 导出文件名

在恢复备份的时候可以这样:

mysql -u 用户名 -p 恢复后的数据库名 < 脚本文件名


用phpmyadmin导入sql脚本有时候会说“没有sql语句”,这是因为php环境和phpmyadmin设置了最大上传文件大小,如果要导入的sql脚本的大小超过了这个限制,那么会造成脚本上传失败,因此无法执行。


有时候会发现拆分insert语句之后还是出现“ MySQL server has gone away ”错误,这可能是因为其中一些insert语句的大小超出了mysql目前设置的缓冲区大小。

可以在mysql的配置文件的“[mysqld]”段增加类似:

set-variable = max_allowed_packet=16M

来扩大这个缓冲区的限制来解决。

这种情况常见于把图片存储在数据库里面的情况。

GlossyBlue theme adapted by David Gilbert
Powered by PmWiki