今天帮一个朋友导入一个开发中的.sql文件到数据库,因为他的sql文件足有12M之多而且是从mysql5.0备份过来的,用phpmyadmin导入老提示gone away,顺便找了些资料,总结如下:
Notice::以下问题不仅仅包含于通过phpmyadmin导入sql出现,条目后会有注明(source---表示通过mysql客户端导入,phpmyadmin表示通过phpmyadmin的web界面导入)
1、Mysql5.5 版本不支持 TYPE=MyISAM 这样的语句【phpmyadmin、source】
这个问题其实也就是mysql存储引擎的指定语句问题,因为mysql5.5不再支持type=enginName的sql语句,故而导致导入错误。
MYSQL的sql语句写法TYPE=MyISAM的语言很古老了,在MYSQL 5.5上已经被禁用,在新导入sql到mysql5.5中时,sql文件中的sql语句中的TYPE=MyISAM | InnorDB 需要全部改动ENGINE=MyISAM | InnorDB ,这样才能正常导入,简单点说就是指定存储引擎的sql语句问题。
2、web服务器限制了post数据大小以及php配置文件中限制了post文件的大小的问题导致导入错误【phpmyadmin】
典型的例子就是采用nginx作为web服务器,并且通过cgi方式跑php的时候,phpmyadmin将无法导入大于1M的sql文件,老提示413错误(提示信息:413 Request Entity Too Large),其原因就在于nginx默认限制最大的文件体大小为1M(主要是post,当然put之类的不常见的类型也包含)。这个问题具有通用性,其原理就是web服务器限制了通过post方式上传文件的大小,那么大于这个限制大小的sql文件通过phpmyadmin上传导入自然是失败了,这里不讲太多的解决方法;不同的web服务器软件有不同的配置,需要另行查找资料了。ps:nginx的话,为nginx的配置文件的http下添加client_max_body_size 8M;之类的选项即可,意思就不多解释了,客户端最大的文件体大小,我给的这个例子是8M
关于php限制post文件大小就不多解释了,修改php的配置文件php.ini中的post_max_size、upload_max_filesize以及memory_limit大小即可,稍微解释下,第一个是限制post方式提交的数据大小,第二个是限制上传文件的大小,第三个是php执行代码时的内存使用限制大小,第三个依据你的实际内存写,一般512M就比较大了。
3、mysql的max_allowed_packet限制【phpmyadmin | source】
由于对mysql了解的不够彻底,暂时没办法讲解的太多,开发环境的话,临时将这个限制改动为32M也不无不可。对mysql的配置文件中的max_allowed_packet参数进行修改即可,这个只是临时解决方法,生产环境修改有风险,请酌情处理。
4、不断添加中.....
若您遇到类似问题可以留言我们一起解决 ,解决问题的过程实际也是学习的过程.
哟嚯,本文评论功能关闭啦~