PHP/MySQL 文件/数据库同步的神秘 503 错误

Posted

技术标签:

【中文标题】PHP/MySQL 文件/数据库同步的神秘 503 错误【英文标题】:Mysterious 503 Error with PHP/MySQL File/Database Sync 【发布时间】:2016-05-29 13:12:24 【问题描述】:

希望大家能帮帮我。我花了大约 7 个小时试图找到答案,并且到目前为止已经尝试了很多东西。

我有一个 php 脚本,用于在两台服务器之间同步文件/数据库数据。在你们问这个过程对于这个项目是必要的并且必须保持原位之前。

该脚本基本上会查找目录中在过去 72 小时内发生更改的所有文件,并将它们 SFTP 到另一台服务器,替换任何需要的文件。然后它会创建备份数据库的副本,删除某些表/行,更改其他表/行并导出 .sql 文件。然后,它将这个 .sql 文件 SFTP 到另一台服务器,并在第二台服务器上的文件上调用一个包含,该文件导入 .sql 文件,用更新的数据替换现有数据库。

所有这些都有效...

问题在于,无论我对 Apache 配置进行什么更改,脚本每次都会在 30 秒后给我一个 503 错误(准确地说是在 30.02 到 30.04 秒之间)。但是,PHP 脚本继续运行并成功完成所有操作,包括写入日志文件,大约需要 60-61 秒。 Apache 日志中也没有任何内容引用任何类型的错误。

我检查了所有使用的 .conf 文件,没有一个提到 30 秒超时。在我的 httpd.conf 中,我添加了以下几行:

TimeOut 300
ProxyTimeOut 300
KeepAlive On
KeepAliveTimeout 60

我还将 php 脚本的 max_execution_time 和 memory_limit 分别设置为 120 和 2048M,以确保在测试期间排除这种情况。

该页面应该向用户显示成功消息,并报告更改/更新的内容。但是,由于 503 错误,我无法做到这一点。所以我希望摆脱这个 503 限制,以便它可以正确显示同步的最终结果。老实说,我对 Apache 配置不太熟悉,所以任何关于什么会导致这个/在哪里查看的帮助/想法都会非常感激!

提前致谢!

【问题讨论】:

【参考方案1】:

不确定您是否尝试过,但我认为您可能需要在 Apache 使用的 php.ini 中调整 max_execution_time。在许多发行版中,它默认为 30。

http://php.net/manual/en/info.configuration.php#ini.max-execution-time

【讨论】:

感谢@bigmandan 的想法,但我已经将其设置为 120。脚本需要 60 多分钟才能完成,所以这应该不是问题。【参考方案2】:

在尝试了很多很多事情之后,我能够找出具体原因是什么。事实证明,这是由代理超时引起的。 Here is a link to the answer that explained what to add to the vhost conf file.

简而言之,这里是未来访问者的答案:

对于最新版本的 httpd 和 mod_proxy_fcgi,您可以简单地添加 timeout= 到 ProxyPassMatch 行的末尾,例如:

ProxyPassMatch ^/(.+\.php.*)$ fcgi://127.0.0.1:9000/<docroot>/$1 timeout=1800

对于旧版本,它有点复杂, 例如:

<Proxy fcgi://127.0.0.1:9000>
  ProxySet timeout=1800
</Proxy>
ProxyPassMatch ^/(.+\.php.*)$ fcgi://127.0.0.1:9000/<docroot>/$1

【讨论】:

以上是关于PHP/MySQL 文件/数据库同步的神秘 503 错误的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch PHP MYSQL的同步使用

Bigquery 返回内部错误 503:23 列 X 600,00 行

厨神秘录上下部的秘籍 要详细的流程任务的开始在哪接怎么做

(十万火急在线等)php mysql中数据插入A表时同步更新B表中数据用php如何实现?

主从复制之神秘的表丢失

怎么通过 Mysql 实现数据同步呢?