【问题标题】:PHP times out on importing data into mysql type InnoDB databasePHP 在将数据导入 mysql 类型的 InnoDB 数据库时超时
【发布时间】:2016-01-17 11:09:04
【问题描述】:

我正在开发一个需要自己的 mysql 表的 PHP/mysql 程序,并且我想包含一个示例数据库以用于测试/学习目的。

我想使用 PHP 安装脚本来自动创建 mysql 表并插入示例数据库。

最新版本的 mysql 现在将引擎类型设置为 InnoDB,我可以使用 PHP 成功创建 mysql 数据库 - 默认为 InnoDB 类型。

当我尝试导入示例数据库(从 csv 文件)时出现问题 - 在 PHP 超时之前,1800 条记录中只有 500 条记录被导入。

我想出了一个可能的解决方案。

  1. 使用 MyISAM 类型创建 mysql 数据库 - 使用 CREATE TABLE $table_name ...... ENGINE=MyISAM

  2. 将 csv 文件中的记录导入 MyISAM 表 - 使用 INSERT INTO $table_name ......

  3. 最后将数据库类型从 MyISAM 更改为 InnoDB - 使用 ALTER TABLE $table_name ENGINE = InnoDB

这三步过程运行得更快,并且在 PHP 脚本超时之前完成。

我已经使用 phpmyadmin 检查了 InnoDB 表和数据,一切似乎都正常。

谁能找到这个方法的错误,如果可以,你能提供一个简单的解决方案。

【问题讨论】:

标签: php mysql innodb myisam


【解决方案1】:

如果你不做这么多工作,处理会更快。

LOAD DATA INFILE ...

将一步加载整个 CSV 文件,无需您逐行打开 + 读取 + 解析 + INSERT

如果您需要操作任何列,那么这些步骤更通用,但仍比您的任何一种方法快得多:

CREATE TABLE tmp ... ENGINE=CSV;  -- and point to your file
INSERT INTO real_table
    SELECT ... the columns, suitably manipulated in SQL
        FROM tmp;

没有循环,没有打开,没有解析。

【讨论】:

    【解决方案2】:

    这发生在所有 apache php 和 mysql 安装中。您需要提高 Apache 的最大执行时间才能使 php 将大文件上传到 mysql。

    我建议您仔细研究 php.ini 文件并了解它在后端是如何控制的。

    【讨论】:

    • 谢谢。我不希望更改默认值的最大执行时间,因为我不希望我的程序的用户能够在他们自己的服务器上对 php.ini 进行更改。如果这是唯一的选择,那么我认为没有理由不能使用方法 2,因为它在没有对 php.ini 进行任何修改的情况下运行 - 除非有原因导致从 MyISAM 更改为 InnoDB 的表存在“隐藏问题”输入?
    • 顺便说一句 - 我已经能够通过将例程包含在以下内容中来执行方法 1: set_time_limit(0); .... 例程 ...... set_time_limit(60);但是,我不喜欢走这条路,因为我不确定托管公司是否会批准。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-02
    • 1970-01-01
    • 2016-04-08
    • 2020-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多