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

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

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

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

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

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

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

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

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

这个三步过程可以更快地完成,并在PHP脚本超时之前完成 .

我已经使用phpmyadmin检查了InnoDB表和数据,所有看起来都没问题 .

任何人都可以找到这种方法的错误,如果是这样,你能提供一个简单的解决方

回答(2)

2 years ago

如果你没有做那么多工作,处理速度会更快 .

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;

没有循环,没有OPEN,没有解析 .

2 years ago

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

我建议你仔细研究php.ini文件,并了解它在后端的控制方式 .