使用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无济于事)
答案 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,这是一个数据包或任何生成/中间字符串的最大大小,那么您将无法执行此语句。在这种情况下,您应该将这个非常大的语句拆分为许多小语句。