工作中遇到的问题,记录一下。
在进行大数据库导入中经常出现错误:
1、[Err] 1231 - Variable 'foreign_key_checks' can't be set to the value of '1'
2、[Err] 1153 - Got a packet bigger than 'max_allowed_packet' bytes
对与错误1,一般是由于SQL中的注释引起的错误,所以,在导入前,最好使用工具去除这些注释。
对与错误2,这个是由于Mysql的max_allowed_packet配置不当造成的,Win下你可以找到my.ini,Unix环境下对应的是my.cnf,检查配置中的max_allowed_packet设置是否过小,将其调整为匹配你SQL文件的大小。
比如我要处理的SQL文件是200M,于是我的My.cnf中max_allowed_packet设置为:
max_allowed_packet = 250M
回过头还来说注释的问题,SQL注释分两种:
a: 形式为 /* mmm */; /* nnn */;
b: 形式为 -- mmm
下面给出正则,我常使用的是Sublime Text和Notepad++,前者是打码神器,但对大文件处理效率不佳,后者我常用来处理大文件,比如手下的这的SQL约700M。
使用Notepad++,以正则匹配对应MySQL文件中的注释,替换删除:
去除注释a的正则:
/\*.*\*/;
去除注释b的正则:
^\-\-.+
最后去除多余空行
^\r\n+
Done!