新版如何落伍 | 站长知道 | 落伍预告页 | 站长运营 | 站长赚钱 | 站长代码 | 站长任务 | 站长招聘 | 落伍T恤 | 积分说明 | 帐号保护和激活
91ivr火爆点歌联盟 效果最强体育产品注册, 每个2元。提升流量, 赚钱, 上开心搜揽众浙江电信15M,广东电信10M,549起
黑马联盟2008年新品新举措!中客: 空间产品随时可无条件退款!0168.com 24小时现机租用百独托管1000起,电信租用499
乐乐联盟—最好的图铃联盟英拓酷睿机器+1元,升级为2G内存九天智能建网站 2008投资好项目盟者Q币 独家奥运抢票 比点歌更强
DNSPod智能DNS,我们一直在免费莆阳:E4500/2G年付6999元送产权雅唐网络酷睿服务器499元/月256M内存VPS主机138/月
 43 12345
发新话题
打印

【原创】大数据量MySQL文件导入程序

【原创】大数据量MySQL文件导入程序

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

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

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

下载地址(因为目前512j空间限制了泛域名解析导致下载失效,与客服沟通未果:(,等找到好的空间后再提供下载吧)
http://temp.ebugs.org/temp/im286/importsql.rar
复制内容到剪贴板
代码:
<?
/******************************************/
/*          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 "正在执行导入操作<span><br>";
        while($SQL=GetNextSQL()){
                if (!mysql_query($SQL)){
                        echo "<font color=red>执行出错:".mysql_error()."</font><br>";
                        echo "SQL语句为:<br>".$SQL."<br>";
                };
        }
        echo "导入完成</span>";

        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("\\r\\n",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;
        }
?>
累了,想歇一下了

可以导入那些工具导出的sql

落花有意随流水,流水无心恋落花。
个人博客:  http://hxs.fd.fj.cn   http://www.yoyo.cn

TOP

嗯,是啊。就是为了解决这个问题的。
但是测试不充分,因为php和mysql的版本太多了,交叉测试很罗索。
且php和mysql的配置也许还会影响效果。
累了,想歇一下了

TOP

先来支持一下

TOP

谢谢!~
累了,想歇一下了

TOP

提示: 作者被禁止或删除 内容自动屏蔽
[寻php的房产开源程序!我也做了狗狗广告了有空进去!!]

  QUOTE:
 http://www.5inb.com
【盘古部落】

TOP

占位先
163.COM
整站开发制作/程序插件定制/服务器优化安全配置/各种论坛数据升级合并转换及其相关Q841168

TOP

提示: 作者被禁止或删除 内容自动屏蔽
我自由了!

TOP

引用:
Originally posted by long_9 at 2005-4-9 22:31
我是说,能导入从哪些工具导出的数据库?还是任何工具导出的数据库都可以恢复,执行导入?
现在用MYSQL_TOOL导,任何工具下导出的都可以执行导入?你的??????
能导入phpmyadmin导出的数据,如果是写的规范的SQL理论上也应该能导入。
你的MySQL_Tool导的意思是说mysql提供有导入工具吧?
是啊,mysql命令行一句source a.sql就可以实现,但是我们平时做网站是没有机会接触控制台的。
给我们的只有一个ftp+web。
累了,想歇一下了

TOP

我一般用FAISUNSQL
还有帝国备份也不错
打抱不平是大色狼 

TOP

 43 12345
发新话题