大数据量MySQL文件导入程序

很多使用mysql建站的朋友都会遇到一个问题,就是在向mysql中导入大量数据时遇到各种挫折。使用phpmyadmin导出数据库备份很容易,但是要执行相反的操作简直就是一场恶梦。
这段代码就是针对这个问题而写的,起源于今天帮一个朋友恢复一个discuz论坛数据库。

使用前请首先按照代码注释修改要导入的SQL文件名、数据库主机名、数据库用户名、密码、数据库名,同时将数据库文件和本文本一起ftp导网站目录,然后以web方式访问此文件即可。

注:
1、此代码当php运行于safe mode的时候超时设置语句set_time_limit失效,可能会导致导入中途失败,解决办法是将要导入的文件分成多个,逐块导入。
2、本部分代码是今天刚刚出炉,只是经过简单的测试,证明其可运行于负翁自己的计算机和朋友的服务器上,并不一定适合所有的php/mysql环境。欢迎跟贴反馈意见。
3、落伍(www.im286.com)负翁版权所有,可随意使用,但请保留版权信息

[CODE]/******************************************/
/* PhyMyAdmin Data Importer */
/* www.ebugs.org */
/* Copyright 富翁 in im286.com 2005.04.09 */
/* 转载请注明出处 */
/******************************************/

//用来快速Mysql的大数据备份
//使用前请首先按照代码注释修改要导入的SQL文件名、数据库主机名、数据库用户名、密码、数据库名
//同时将数据库文件和本文本一起ftp导网站目录,然后以web方式访问此文件即可
//落伍(www.im286.com)负翁版权所有,可随意使用,但保留版权信息

$file_name="a.sql"; //要导入的SQL文件名
$dbhost="localhost"; //数据库主机名
$dbuser="anonymous"; //数据库用户名
$dbpass=""; //数据库密码
$dbname="test"; //数据库名

set_time_limit(0); //设置超时时间为0,表示一直执行。当php在safe mode模式下无效,此时可能会导致导入超时,此时需要分段导入
$fp = @fopen($file_name, "r") or die("不能打开SQL文件 $file_name");//打开文件
mysql_connect($dbhost, $dbuser, $dbpass) or die("不能连接数据库 $dbhost");//连接数据库
mysql_select_db($dbname) or die ("不能打开数据库 $dbname");//打开数据库

echo "正在执行导入操作
";
while($SQL=GetNextSQL()){
if (!mysql_query($SQL)){
echo "执行出错:".mysql_error()."
";
echo "SQL语句为:
".$SQL."
";
};
}
echo "导入完成";

fclose($fp) or die("Can't close file $file_name");//关闭文件
mysql_close();

//从文件中逐条取SQL
function GetNextSQL() {
global $fp;
$sql="";
while ($line = @fgets($fp, 40960)) {
$line = trim($line);
//以下三句在高版本php中不需要,在部分低版本中也许需要修改
$line = str_replace("","",$line);
$line = str_replace("'","'",$line);
$line = str_replace(" ",chr(13).chr(10),$line);
// $line = stripcslashes($line);
if (strlen($line)>1) {
if ($line[0]=="-" && $line[1]=="-") {
continue;
}
}
$sql.=$line.chr(13).chr(10);
if (strlen($line)>0){
if ($line[strlen($line)-1]==";"){
break;
}
}
}
return $sql;
}
?>[/CODE]

发表评论

最新日记

  • 身体不适 回归健身房

    手断了也快3个月了,国庆长假期间去了一次健身房,惊喜的发现终于能卧推了,当然重量下去很多,只能推两片菜园小饼了。这意味着我能恢复训练了,用到手腕的动作都可以恢复了。不过发现一个很悲剧的情况,最近腰不太好,可能是每天折叠车拿上拿下,我的腰好像前所未有的不舒服,涂了黄道益,没见好转,真让人沮丧,需要慢慢的恢复训练,并且补充营养品了。...

  • 伤筋动骨确实需要100天手终于恢复过来了

    骨折到现在一直很失落,因为骨折让我感觉到自己不那么健康,因为骨折让自己失去篮球和其他运动的能力,失去去健身房锻炼的权利。今天,距离716骨折已经2个多月了,做了下俯卧撑,不痛了,太好了我很激动,我知道手腕快好了,恩。我要更注意自己的保护了。 西藏北路的房子有优点也有缺点,优点是感觉房子蛮大的,没有厅所以房间很大,个人空间大,离开8号线站头步行3分钟,交通便捷,去哪里都很方便,自行车到四川路也就8分钟,离开公司那就更近了,舒服。缺点是,虽然马路边风景好了,但是很吵闹,尤其低音从骨骼传递而已,让人感觉很难过,睡觉不好,不过现在已经适应了,无法停车汽车或者电瓶车都没有位置停,停楼下肯定要被偷,不过我发现八号线门口好像有停车场,可以免费停业不错。ADSL还没有转移过来,有线电视倒是好了。最后希望拆迁顺利点。...

  • 车车终于买好了,明锐1.8t

    又是一段时间没写blog,可能是装上MT之后更新频率最慢的一段时间吧。我也不知道为什么,但是总是不能有精神的写。可能自己手腕还没完全恢复,很沮丧吧。 最近的大事就是车子买好了,上海大众斯柯达新明锐2010款1.8t,灰色的,7速dsg变速箱,逸俊版,j加装了ESP,安全很重要。真是相当相当的喜欢,完美的地盘完美的动力配置,外加新款的造型,让人很满意,安全方面假装ESP。比较可惜就是方向盘是全塑料的,没有选择价值3500的选装包5,包含更多的两个喇叭,大点阵的仪表显示屏,一个触摸屏CD机,真皮带蓝牙方向盘,有点点后悔。但是有了更好的选择,RS的真皮方向盘,带拨片式换挡片,配合DSG时王道般的选择。CD,DVD,GPS这种纯娱乐电子的东西是完全不需要,原厂的贵的不行,哪怕国产的都是很贵,一个本本才多少钱,花个几千买电子产品是很不划算的行为,不过也有选择,比如西门子的VDO和明锐的CAN盒完美匹配。还需要一套金属的踏脚板,便宜的很,一套固德的8件套金属件,包含迎宾踏板等。性能方面改装要很多钱,但是可以设想下,仿BBS的轮毂一套,17寸的米其林轮胎一套,b12避震一套完全用不着更好的产品,淘一套拆车的尚酷或者随便什么PQ35系大尺寸刹车,完美车车立即呈现。恩。开心点吧...

  • 一个月拉 身体在快速的康复中

    一下就一个多月没写blog,没有记录生活。不为别的,只是老夫的手骨折了,三角骨撕脱性骨折。这一个月经历了很多事情,尤其一个月前七月十七日。老夫领了结婚证,成为已婚人士。当然是带着手腕的剧痛领的,领完就去瑞金医院绑了石膏。领证前一天想娱乐娱乐,冒着大雨去打篮球,只怪闸北IC的地板太光滑,动作一做出来就摔了,很惨,三角骨就这样骨折了。还好是小伤,大前天拆掉了石膏,恢复中。每天一副云南白药,带上一个护腕,这两天恢复下来,感觉明显好转。从刚拆的有轻微的牵扯静脉的感觉,到现在基本很OK,云南白药对我帮助很大。希望身体快点恢复。这1个多月没有去健身房,有点脂肪堆积了,要开始强化的有氧了。...

  • 几乎一个月没有写blog了 已经完全夏天了 不过没感觉到热....

    上海已经完全夏天了,不过最近雨季,没有前些日子那么闷热。每天家,公司,健身房三点一些,好在都有空调,所以没有感觉到不舒服。但是肚子好像不争气,肠胃不是很好,虽然吃东西已经很注意了。 夏天到来最大的一个好处就是电瓶车的行驶里程大了很多,明显比冬天的时候行程更长,持久高电压带来更高的速度,铅酸电池真是难伺候。不过话说GIANT上的三洋电池用了三年还是如此坚挺,感觉很欣慰。 本周结束,为期一个月的停止供应的补剂,也要准备恢复,迫不及待的想尝试肌肉科技的那绝对美味的蛋白粉了。 然后,7月17要经历一个大事件了。...

关闭