Mysql import big sql file


Mysql import big sql file

可能的重复项:
如何将大型 sql 文件导入 mysql 表

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

mysql -u root -p DB_development

过了一会儿,它说:被杀了。

通过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');

有什么方法可以导入这样的表吗?(源和大转储无济于事)

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

像这样的东西

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

PS:我强烈建议不要推送缓冲区,您可能会使服务器过载。 最好最大化执行时间并不断刷新垃圾收集器,而不是杀死您的内存。

我不知道

它对你有什么用,但可能会有所帮助。只是一个建议;

我的转储: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);
}

我已经用这个脚本完成了一些数据库传输几 GB 数据(但不记得花了多长时间)。

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