0

系统规格: VPS 运行 Windows Server 2008 R2 SP1 64 位双核 2.39GHz VCPU 2GB RAM 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 运行,它可以毫无问题地处理整个文件。

4

2 回答 2

0

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

于 2012-06-22T17:59:11.573 回答
0

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

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

于 2017-06-05T01:52:06.997 回答