CSDN 600万数据快速导入MYSQL

如何将CSDN的600万数据导入到MYSQL数据库?

看到文本格式后,首先想到的是用文本来读取文件,还是一个比较大的文件, 然后就写了PHP程序一行一行的读, 但是发现速度特慢。

再次看了看数据格式, 看有没有其它思路,突然发现数据格式跟之前备份数据的格式差不太多,只是分隔符不同,赶紧找了下LOAD DATA INFILE,发现确实可以实现,而且很快,下面是程序过程:

PHP程序:(在PHP命令行下执行了三个小时才写入100多W数据)

<?php
$fp = fopen('www.csdn.net.sql', 'r');
mysql_connect('127.0.0.1', 'root', '123456');
mysql_select_db('test');
while(!feof($fp)) {
$rs = null;
$rs = fgets($fp);
$rs = explode('#', $rs);
if(is_array($rs)) {
$name = trim($rs[0]);
$pass = trim($rs[1]);
$email = trim($rs[2]);
$sql = 'insert into csdnuser (username,userpass, useremail) values ';
$sql .= '("'.$name.'","'.$pass.'","'.$email.'");';
mysql_query($sql);
}
}
fclose($fp);
?>

SQL导入:(通过LOAD DATA INFILE实现,执行时间 1 min 14.72 sec)

mysql> CREATE TABLE `csdnuser` (
-> `id` INT(4) NOT NULL AUTO_INCREMENT,
-> `username` VARCHAR(255) NOT NULL,
-> `userpass` VARCHAR(255) NOT NULL,
-> `useremail` VARCHAR(255) NOT NULL,
-> PRIMARY KEY (`id`)
-> ) ENGINE=MYISAM DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.03 sec)

mysql> load data local infile 'D:/www.csdn.net.sql' into table csdnuser fields terminated by ' # ' (username,userpass,useremail);
Query OK, 6428632 rows affected, 295 warnings (1 min 14.72 sec)
Records: 6428632 Deleted: 0 Skipped: 0 Warnings: 295

mysql> select id, username from csdnuser order by id desc limit 5 \G
*************************** 1. row ***************************
id: 6428632
username: jxjaxa
*************************** 2. row ***************************
id: 6428631
username: fangchengli
*************************** 3. row ***************************
id: 6428630
username: suwei2007
*************************** 4. row ***************************
id: 6428629
username: yf0888
*************************** 5. row ***************************
id: 6428628
username: x11198
5 rows in set (0.00 sec)


那总结下MYSQL使用SELECT INTO OUTFILE和LOAD DATA INFILE来备份和恢复数据:

  文档整理中...

posted on 2011-12-22 14:56  BobbyPeng  阅读(1110)  评论(0编辑  收藏  举报

导航