Total Pageviews

Friday, 4 January 2013

phpmyadmin无法导入大体积sql文件的解决方法

由于数据库颇大,用常用的phpmyadmin等软件无法正常导入数据库(其实也可以,只不过又要修改配置文件),当然可以在cli下命令导入,但这毕竟不是一般人玩的,另外也可以通过帝国备份王、mysqldumper等软件进行分包导出导入,不过略显麻烦。其实一个简单的页面操作就可以了。
点击下载-http://linux-trip.googlecode.com/files/importDB.php
使用:下载后编辑文件,修改基本参数中的相应参数,如修改数据库名test、用户名root、导入文件名test.sql等。保存后与导入文件一并上传到网站(记得2个文件统一路径),访问importDB.php即可。

    如果出现如下错误
    Fatal error: Allowed memory size of XXXXX bytes exhausted (tried to allocate XXXXXX bytes)

    说明php配置中的memory size值太小,把php.ini里的memory size值改大即可,如果是无法修改php.ini的,那就没办法了。

放上源码,来自这里http://www.storyday.com/html/y2009/2337_phpmyadmin-can-not-import-large-sql-solutions.html,我做了些修改。

<?php
//基本参数 Base Options
 define('DB_NAME', 'test');  //数据库名 DataBase Name
 define('DB_USER', 'root');  //数据库用户名 DataBase User
 define('DB_PASSWORD', 'root');  //数据库密码 DataBase Password
 define('DB_HOST', 'localhost');  //数据库地址 DataBase Address
 define('DB_CHARSET', 'utf8');  //数据库编码 DataBase Charset
 define('DB_FILE', 'test.sql');  //导入备份文件名 BackupFile Name

//核心代码 Core
 $mysql = mysql_connect(DB_HOST,DB_USER,DB_PASSWORD) or die("mysql connect fail!");
 mysql_select_db(DB_NAME) or die("select DataBase fail!");
 mysql_query("set names ".DB_CHARSET);

 $fp = fopen(DB_FILE,"r") or die('can not open file!');
 while( $s = fgets( $fp,100000 ) ){
  $m .= $s;
 }
 $sql_content = explode(";\n",$m);

 $i = 0;
 $max = count($sql_content) ;
 while( $i < $max ){
  mysql_query( $sql_content[$i] );
  if( mysql_error()) echo mysql_error()."<br />Error!";
  else{ 
   $n ++;
  }
  $i ++;
 }
 echo "<br />mysql queries:".$n."<br />Done!";

 fclose($fp);
?>