【问题标题】:500 Internal Server Error when performing large MySQL Insert with PHP / IIS7使用 PHP / IIS7 执行大型 MySQL 插入时出现 500 内部服务器错误
【发布时间】:2012-06-23 15:09:59
【问题描述】:

系统规格: 运行 Windows Server 2008 R2 SP1 的 VPS 64位双核2.39GHz VCPU 2GB 内存 Parallels Plesk for Windows 10.4.4 IIS 7.5 PHP 5.2.17 MySQL 5.1.56

我有一个 PHP 脚本来循环遍历一个静态文件并将每一行作为一行导入 MySQL。如果将文件一次拆分为数千行,则此方法可以正常工作,但这会产生大量手动操作。

整个文件包含大约 160,000 行要导入的行。该脚本当前通过mysql_connect / mysql_select_db连接数据库,使用mysql_query处理循环,并在循环结束时断开连接。但是,在大约 55 秒 - 1 分 35 秒之间的任何时间,客户端浏览器都会返回一个 500 Internal Server Error 页面,其中不包含任何有用的诊断信息。

我尝试增加 MySQL、PHP、IIS 的最大连接时间,甚至是 winsock 的最大用户套接字,但无济于事。

我尝试为每个插入查询执行与 MySQL 的连接/断开连接,但这会导致与服务器的数千个连接随后卡在“TIME_WAIT”状态,并返回“无法连接到服务器”错误,大概是由于剩余的插槽不足。我也尝试过 mysql 和 mysqli 扩展。

我查看了所有可以找到的 IIS 和 MySQL 日志,但没有看到任何有助于找到原因的信息。

最后两次尝试分别插入了 33,979 和 78,173 行。

谁能提供帮助?

谢谢。

** 更新 **

这一定是 IIS 问题。我已将脚本转换为通过命令行 PHP 运行,它可以毫无问题地处理整个文件。

【问题讨论】:

    标签: iis-7.5 php-5.2 mysql-5.1 windows-server-2008-web


    【解决方案1】:

    使用 LOAD DATA INFILE 而不是尝试通过 PHP 执行 INSERTs。它将运行得更快,从而避免 500 错误。

    甚至不要考虑使用 mysql_* 接口。切换到 mysqli 或 PDO。它已被弃用并在最新的 PHP 版本中消失。

    【讨论】:

      【解决方案2】:

      听起来像是 IIS 问题。我发现的大多数都位于 Web.config 文件中。我会看一下并确保设置正确且语法正确。很多时候我忘记关闭标签并收到 500 错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-05
        • 2012-08-14
        • 1970-01-01
        • 1970-01-01
        • 2016-03-26
        • 2017-10-04
        相关资源
        最近更新 更多