大个Insert语句拆分脚本
在使用phpmyadmin导出mysql数据的时候,往往会把一张数据表中的数据导为一个很大的insert语句,造成导回mysql的时候报错。比如如下这样的错误:
ERROR 2006 at line 6080: MySQL server has gone away
因此完成了这个脚本对phpmyadmin导出的sql脚本进行处理,拆分所有大的insert语句,使每条insert语句只负责插入一个数据行,这样再导入mysql的时候出错的可能也会减小。
这是在nt系列内核下可以直接执行的二进制版本:
这是Python源代码:
使用方法为: 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
来扩大这个缓冲区的限制来解决。
这种情况常见于把图片存储在数据库里面的情况。