Mysql导入大sql文件

时间:2012-08-15 13:34:18

标签: php mysql database phpmyadmin

  

可能重复:
  How to import LARGE sql files into mysql table

使用php我已经通过odbc导出了一些表,它有许多行,并且它的大小约为3GB。现在我需要将该表导入我的mysql数据库。但是当我试着

  

mysql -u root -p DB_development< HUGEdb.sql

经过一段时间后,它会说:杀了。

通过phpmyadmin界面,这很糟糕。

我的sql文件如下所示:

INSERT INTO `LINK_LA_TYP` VALUES
 ('1','8917181','1','24','2'),
 ('1','8934610','1','24','1'),
 ('1','9403766','1','30','1'),
 ('1','9422299','1','30','2'),
  many many many so far lines
 ('1','63139389','321','10017','1');

是否可以导入此类表格? (source和bigdump无济于事)

3 个答案:

答案 0 :(得分:2)

你正在杀死缓冲区!即使通过MyAdmin,您也必须增加PHP内存。尝试这个之前我有类似的东西: 写一个PHP代码,同时循环行,每次清除变量(每行记录一个变量) 然后从PHP.ini将PHP Exec Time更改为MAX

像这样的东西

$mysqlCode= "INSERT INTO `LINK_LA_TYP` VALUES ('1','8917181','1','24','2')";
mysql_query("$mysqlCode");
$mysqlCode=null;

PS:我强烈建议不要推送缓冲区,否则可能会过度加载服务器。最好是延长执行时间并保持刷新垃圾收集器,而不是杀死你的记忆。

答案 1 :(得分:2)

我不知道它对你有用但也许有帮助。只是一个建议;

mydump:https://github.com/qeremy/mydump

您可以使用“mydump”导出数据,它会按插入限制导出数据(请参阅_cfg.php:21)。导出后,将转储文件解压缩到例如local/muydump的目录,然后您将需要一些这样的简单脚本;

$files = glob("local/mydump/*.sql");
foreach ($files as $file) {
   $sql = file_get_contents($file);
   $db->query($sql);
}

我已经完成了一些db传输带有这个脚本的几个gb数据(但不记得它被删除了多久)。

答案 2 :(得分:1)

如果语句的长度超过max_allowed_packet,这是一个数据包或任何生成/中间字符串的最大大小,那么您将无法执行此语句。在这种情况下,您应该将这个非常大的语句拆分为许多小语句。