PHP 将数据导入 mysql 类型的 InnoDB 数据库时超时

PHP times out on importing data into mysql type InnoDB database

我正在开发一个需要自己的 mysql table 的 PHP/mysql 程序,我想包含一个用于 testing/learning 目的的示例数据库。

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

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

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

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

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

  2. 将记录从 csv 文件导入 MyISAM table - 使用 INSERT INTO $table_name ......

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

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

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

任何人都可以找出这种方法的错误吗?如果可以,您能提供一个简单的解决方案吗?

所有 apache php 和 mysql 安装都会发生这种情况。您需要增加 Apache 最大执行时间才能使 php 将大文件上传到 mysql。

我建议您仔细研究 php.ini 文件并了解其在后端的控制方式。

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

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;

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