1

可能重复:
如何将 LARGE sql 文件导入 mysql 表

使用 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');

有什么方法可以导入这样的表吗?(来源和 bigdump 没有帮助)

4

3 回答 3

2

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

像这样的东西

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

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

于 2012-08-15T13:43:08.273 回答
2

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

我的转储: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 的数据(但不记得花了多长时间)。

于 2012-08-15T14:07:25.720 回答
1

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

于 2012-08-15T13:47:06.423 回答