昨天部署了一套考试系统,打算将原来考试系统的数据库直接导入新系统,省去录入数据的苦恼。无奈发现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;
}
都改成100*1024*1024(根据自己实际情况)。
说明:首选读取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的数据库备份。