网站应如何处理数据库崩溃

时间:2011-03-03 19:31:05

标签: php database crash web

我目前在php中创建一个有数据库后端的网站(可以是MySQL或SQL Server),最近我意识到如果我的数据库随时崩溃,我的网站将无法正常运行,可能会引起一些麻烦。

那么,如果我的数据库(或任何关键的外部组件)出现故障,在网站上显示的内容是什么?我的特定网站在很大程度上依赖于它的数据库,没有它就几乎没用。

我被告知的一个选项是通过电子邮件发送网站管理员并显示错误500页面,其中显示服务器出现问题,并且基本上使网站无法使用,直到问题得到解决。我还能做些什么来解决这个问题吗?有没有办法设计一个网站,以便数据库(任何关键组件)崩溃不是一个问题?

我正在寻找一般的经验法则以及人们过去如何解决这个问题的具体例子。此外,这些示例不仅仅是我的网站示例。

3 个答案:

答案 0 :(得分:5)

如果你只有一个数据库服务器,并且没有它的数据库就无法运行网站,那就没有魔力:你必须显示某种漂亮的错误页面通知用户存在技术问题,网站很快就会回来。

一般来说:

  • 这种问题的可能性非常低
  • 如果您的网站是正常的,人们会偶尔接受一个问题,特别是如果您进行沟通。


如果你能负担得起(并具备设置它的技术知识),你可以使用两个数据库服务器,它们之间有复制(MySQL支持这个):一个主服务器,您使用的,以及奴隶,它被视为备份。

然后,如果主机掉线,您的应用程序将使用从机。


当然,这将大大降低数据库相关问题的风险(同时两个服务器崩溃的可能性很小),但是你仍然会遇到所有其他组件的问题 - 比如你的网络服务器:如果你只有一,你可能想考虑使用两个,第二个作为后备。

之后,如果您还有钱(并认为您的网站需要更好的正常运行时间),那么您需要考虑数据中心出现问题时的情况 - 设置在两个不同的位置启动服务器......

答案 1 :(得分:2)

  1. 显示的正确内容是一个简单的“oops”错误消息,它不会泄露任何对黑客有帮助的信息。 “我们遇到技术困难”或“网站不可用”的问题。 This is for security purposes

  2. 最好有一个错误记录和通知系统,以便在发生崩溃时通知管理员。编写起来相当简单,但我确信已经存在可以处理这个问题的库。 (http://net.tutsplus.com/tutorials/php/404403-website-error-pages-with-php-auto-mailer/有一个包含代码示例的教程,在http://www.w3schools.com/php/php_error.asp有一个更简单的示例

  3. 有多种方法可以设计网站的体系结构来处理数据库组件崩溃。它不是构建您的网站,它是整个环境中的架构师。例如,数据库集群具有高可用性(http://en.wikipedia.org/wiki/High-availability_cluster)。它并不便宜。

  4. 总的来说,您只需确保正确处理错误。数据库崩溃是我们需要错误处理的典型例子。有很多资源和指导。

    http://www.google.com/search?q=Error+Handling+Guidelines&rls=com.microsoft:en-us&ie=UTF-8&oe=UTF-8&startIndex=&startPage=1

    修改

    我发现了这一点,并认为这是一个非常好的资源来回答如何处理错误:

    http://www.nyphp.org/PHundamentals/7_PHP-Error-Handling

答案 2 :(得分:1)

在数据库关闭或任何其他残缺服务阻止您的网站正常运行的情况下,最佳做法是返回HTTP 500状态代码。根据您的网站功能,这可能是逐页或网站范围。例如,当您的搜索页面显示时,您的“关于我们”页面可能不需要数据库功能。因此,您可以保持“关于我们”页面的运行状态,但当有人进入您的搜索页面时,会返回500状态代码。

不要提供有关网站未向最终用户工作的原因的任何技术信息。这可能存在安全风险。

如果您使用的是apache,本文档将告诉您如何设置自定义错误页面:

http://httpd.apache.org/docs/2.0/custom-error.html

我建议您为500状态代码页使用纯HTML。您还可以通过header()函数让PHP页面发送500状态代码,如下所示:

http://php.net/manual/en/function.header.php