【问题标题】:Imporing large sql file with extended inserts to mysql using PHP?使用PHP将带有扩展插入的大型sql文件导入mysql?
【发布时间】:2012-09-21 10:17:05
【问题描述】:

当我尝试导入大约 500MB 的大型 sql 文件时遇到问题。它有 100,000 个扩展插入查询。我已经到处搜索了,但还没有找到。 Bigdump 不支持扩展插入,因此没有用处。 我看到的每一个建议都失败了,因为他们都使用了 fopen() 或 file() 这会导致 PHP 中的 MEMORY EXHAUST,即使我已将 memorty_limit 增加到 512M。 我正在寻找一个可以读取 500MB 的 sql 文件并通过它并获取扩展插入的插入查询的代码。

谁能帮帮我???

【问题讨论】:

    标签: php mysqlimport large-data


    【解决方案1】:

    您不应该在 PHP 中执行此操作,从网络服务器运行。

    • 如果是一次性操作,请使用 phpmyadmin
    • 试试看能不能用mysql自带的工具解决这个问题
    • 如果你必须编程(因为文件需要每天运行),请在命令行模式下运行 PHP
    • 如果您无权访问命令行,请尝试读取插入的部分内容并处理这些部分。

    【讨论】:

    • 嗨@JvdBerg,感谢您的回复。但我正在创建一个用于备份大型数据库的脚本,我想通过 PHP 来完成。所以问题在于读取插入的部分,因为“;\n”可能存在于数据中,所以在我到达下一个插入之前,我无法找到如何读取特定部分的解决方案。我试过 fgets(FILE, 4096) 但在哪里停止并重新开始??
    【解决方案2】:

    file() 的问题在于它将整个文件读入一个大数组。根据文件的大小,这很容易达到刚刚发生的内存限制。

    这不是您通常想要的。相反,您想一一获取这些行。这就是iterators 的完美之处。

    我认为你应该看看http://php.net/manual/en/class.iterator.php 用它来读取文件并通过命令行运行它......

    【讨论】:

      猜你喜欢
      • 2012-12-19
      • 1970-01-01
      • 2014-01-06
      • 2016-11-29
      • 2011-04-16
      • 2014-03-15
      • 2013-02-23
      • 2011-08-09
      • 2019-09-17
      相关资源
      最近更新 更多