2017-10-01 26 views
-5

我有数据库备份保存在3个不同的服务器。如何通过自动连接备份数据库来处理wordpress数据库故障

每当当前连接的数据库服务器发生数据库故障时,我希望我的站点自动连接到下一个指定的数据库服务器。此外,还应将错误通知给指定的电子邮件。

就像应该通过连接到下一个可用的数据库服务器来处理每个数据库故障,直到处理失败。如果所有三台服务器均失败,则可以显示Wordpress默认消息“建立数据库连接时出错”。

+1

我没有downvote它,但你的问题似乎不符合堆栈溢出指南。问题应该显示*研究证据和尝试自己解决问题*,*特定*编码相关问题的清晰提纲以及[最小,完整和可验证示例]中的任何相关代码(https:// stackoverflow .com/help/mcve),所以我们有足够的信息能够提供帮助。目前,您的问题看起来像是需求的购物清单。 – FluffyKitten

+0

如上所述。但我也希望改变主机,如果数据库连接错误不断发生,像你提到的...... -O – Matthew

+0

查找自动故障切换。您可以使用许多不同的技术,包括DNS故障转移。 AWS将此用于自己的RDS故障转移:http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.MultiAZ.html#Concepts.MultiAZ.Failover – Mazzy

回答

0

您可以使用许多开源工具进行故障转移,MySQL的自动故障转移,我会建议orchestrator

2

虽然我会尝试得到一个更稳定的环境,以及,你应该能够做到这一点。这是我的想法:

$ wpdb设置在require_wp_db()(wp-includes/load.php)。如果在WP_CONTENT_DIR(通常是wp-content)中存在一个名为“db.php”的文件,它将包含在$ wpdb创建之前。

添加类在WPDB扩展和db.php中覆盖db_connect与自定义代码来改变$this->reconnect_retries主机,凭证等依据,然后使用parent::db_connect()。用你的db-class实例化$ wpdb。

我没有测试过这个,但我不明白为什么它不应该工作。

+0

我不知道你为什么不喜欢这个,虽然它粗略的af,这个问题要求一个粗略的答案,而且这个应该确实如此,所以@Leo T Abraham,如果没有编辑核心文件的方法(坏主意),就是这样。您的自定义班级将能够在完全失败之前尝试不同的连接。 –

0

如果你试图从php一侧实现,那么我只能说的是,实现类似load balance或类似的分布式系统。

这是什么意思?

假设您有3个数据库服务器并且它们全部同步。当您建立与数据库的连接时,您可以在不同的用户/请求上使用不同的服务器。这样,您可以避免数据库服务器过载。

实施

你可以保持每个数据库服务器上的活动用户的日志,并根据您的新的请求/用户打开的连接。

0

这通常看起来像一个尴尬的解决方案,你应该考虑某种分布式系统或集群服务器/数据库。

但是,如果你坚持在代码中以编程方式实现它,那么你可以在连续的try/catch块中包含你的连接。

e.g如果你使用PDO,你可以

try { 
    $con = new PDO("mysql:host=$lang[dhost];dbname=$lang[db]", $lang['user'], $lang['pass']); 
} catch(PDOException $e) { 

    try{second connection.......... 
    ...................... 
} 
0

我认为,这个问题比你想象的更大。

我没有任何经验,但我可以告诉你,这种事情会影响你的系统当前的工作方式,并且需要真正的调查(实际的代码和服务器体系结构)。

我不认为这是StackOverflow应该为你做的那种事情。