解决从phpmyadmin导入sql文件大小被限制的问题

昨天部署了一套考试系统,打算将原来考试系统的数据库直接导入新系统,省去录入数据的苦恼。无奈发现phpmyadmin导入数据限制大小为2M。网上搜索了很多解决办法,将其综合最终导入成功。具体步骤:

1、打开PHP配置文件php.ini。查找upload_max_filesize 和post_max_size 把他们的值修改的大一点(100M)。如果上传的文件很大,还需进行以下修改:

  • max_execution_time(php页面执行最大时间)
  • max_input_time(php页面接受数据最大时间)

  • memory_limit(php页面占用的最大内存)

这是因为phpmyadmin上传大文件时,php页面的执行时间、内存占用也势必变得更长更大,其需要php运行环境的配合,光修改上传文件大小限制是不够的。

2、打开 phpmyadmin 目录下的config.inc.php 文件,查找$cfg[‘ExecTimeLimit’]配置选项,默认值是300,需要修改为0,即没有时间限制。

实际上,在我的环境中$cfg[‘ExecTimeLimit’]的配置项在文件config.default.php中(612行)。

3、打开 phpmyadmin 目录下的import.php 文件 修改$memory_limit 的值

if(empty($memory_limit)){

$memory_limit=2*1024*1024;

}

if(($memory_limit)==-1){

$memory_limit=10*1024*1024;

}

都改成10010241024(根据自己实际情况)。

说明:首选读取php.ini配置文件中的内存配置选项memory_limit,如果为空则默认内存大小限制为2M,如果没有限制则内存大小限制为10M,你可以结合你php.ini配置文件中的相关信息修改这段代码。

注意此时重启服务,会发现文件限制的大小已经变成了100M。但是当我欣喜的导入的时候碰到了另一个问题:

Error: mysql server has gone away。

解决的方法就是找到mysql安装目录,找到my.ini文件,在文件的最后添加:max_allowed_packet = 100M(也可以设置自己需要的大小)。 max_allowed_packet 参数的作用是,用来控制其通信缓冲区的最大长度。

不得不说的是,我在配置这个参数之前,在my.ini中还添加了两个参数:

在my.cnf文件中添加或者修改以下两个变量:

wait_timeout=2880000

interactive_timeout = 2880000

关于两个变量的具体说明可以google或者看官方手册。

(虽然这里说的是my.cnf,但是我是在my.ini中添加的)

最后,成功导入了一个30多M的数据库备份。

标签:PHP 发布于:2019-11-15 14:43:37