曼波中国
曼波社区
曼波知识库
曼波搜索

查看完整版本: [推荐]大数据量MySQL文件导入

Autoit 2005-6-3 14:06

[推荐]大数据量MySQL文件导入

很多使用mysql建站的朋友都会遇到一个问题,就是在向mysql中导入大量数据时遇到各种挫折。使用phpmyadmin导出数据库备份很容易,但是要执行相反的操作简直就是一场恶梦。

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


代码如下,请保存为.php文件:

[code]

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

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

set_time_limit(0); //设置超时时间为0,表示一直执行。当php在safe mode模式下无效,此时可能会导致导入超时,此时需要分段导入
$fp = at 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 "执行出错:" dot 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 = at fgets($fp, 40960)) {
$line = trim($line);
//以下三句在高版本php中不需要,在部分低版本中也许需要修改
$line = str_replace("\","\",$line);
$line = str_replace("\'","'",$line);
$line = str_replace("\r\n",chr(13) dot 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]
注:
1、此代码当php运行于safe mode的时候超时设置语句set_time_limit失效,可能会导致导入中途失败,解决办法是将要导入的文件分成多个,逐块导入。
2、原版作者不名,好象是 "落伍",特此申明。

zijie 2005-6-3 19:46

Re: [推荐]大数据量MySQL文件导入

[quote]原帖由 [i]Autoit[/i] 发表

1、此代码当php运行于safe mode的时候超时设置语句set_time_limit失效,可能会导致导入中途失败,解决办法是将要导入的文件分成多个,逐块导入。
[/quote]


这个问题郁闷的!
我安装新版wiki的时候就遇到这个问题,结果数据库创建一半超时出错...
不知道有没有解决办法啊?

jackbones 2006-1-1 18:12

大家新年快乐!

照抄了楼主这个代码,按提示进行了正确的数据库信息设置,但是运行时报错:

Parse error: parse error, unexpected T_STRING in /home/content/c/n/s/fdpsite/html/down/import.php on line 10

第10行代码是这个:
$fp = at fopen($file_name, "r") or die("不能打开SQL文件 $file_name");//打开文件

请问这是什么问题,需要怎么改才能正常运行呢?

acdc 2006-1-3 11:23

帮顶

genous 2006-2-19 15:16

导入大量MYSQL数据的方法

1,有服务器权限的。直接COPY文件。WIN一般是MYSQL安装目录的data下你的用户名。LINUX是安装目录下的var,其他系统不清楚。
2,如果是SQL格式的。有的可能上100M之类的。用source导入。source 文件名

解释:在导入之前先要选择好那个用户。
cd /mysql目录
cd bin
mysql -u root -p(LINUX基本要加上路径的。比如/usr/local/mysql/bin/mysql这样)
--密码
use 用户名
source 文件名(如果把文件放到MYSQL安装目录的bin下边的话。就直接加文件名就行了。否则要加上路径。比如source /home/www/test.sql)


3,自己写程序搞定(适合没有服务器权限的用户)。以PHP为例。可以先把结构导入。结构一般都很小,然后再把数据整理成一行行的。用file打开这个文件。循环。一行行的导入。当然也得先把文件传到服务器上。这样也很快。

4,以上都不行。没办法。只有把文件分成小块块。慢慢搞了

5,用PHPMYADMIN等工具。PHPMYADMIN其实算是不能用。大量数据是导不进去的

genous 2006-2-19 15:19

网上找的~

大数据量MySQL文件导入程序

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

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

注:
1、此代码当php运行于safe mode的时候超时设置语句set_time_limit失效,可能会导致导入中途失败,解决办法是将要导入的文件分成多个,逐块导入。

[code]<?

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

$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;
        }
?> [/code]

llw318 2006-2-24 22:44

留个名
以后好找

liyifeng 2006-3-27 09:57

标记一下,

wencasino 2006-4-20 15:45

[quote]原帖由 [i]llw318[/i] 于 2006-2-24 22:44 发表
留个名
以后好找 [/quote]
同上

chenming012 2006-8-7 22:24

同上.

[quote]原帖由 [i]wencasino[/i] 于 2006-4-20 15:45 发表

同上 [/quote]

denco 2006-10-31 00:56

为什么我打开这个文件时直接就是显示文本内容,而不执行操作?

zijie 2006-10-31 22:05

[quote]原帖由 [i]denco[/i] 于 2006-10-31 00:56 发表
为什么我打开这个文件时直接就是显示文本内容,而不执行操作? [/quote]

这个是php程序,注意文件开头和结尾的<?php和?>

把这个文件保存为.php后缀,然后放到服务器的执行目录(比如www)里面执行

七月十五 2007-1-25 17:28

vaman 2007-2-2 06:06

学习下~

sangern 2007-10-23 09:05

好文
学习

sky8848 2008-4-22 14:15


但是看不懂

binjiey 2008-4-29 19:23

顶!

moxiao 2008-8-7 18:58

看了1小时,有点懂了。希望有视频教程,先谢了。

anytimes1 2008-11-6 20:04

不断学习中。。。。
页: [1]
查看完整版本: [推荐]大数据量MySQL文件导入