我将数据库备份保存在3个不同的服务器中。
每当当前连接的数据库服务器发生数据库故障时,我希望我的站点自动连接到下一个指定的数据库服务器。此外,应将失败通知给指定的电子邮件。
就像应该通过连接到下一个可用的数据库服务器来处理每个数据库故障,直到处理完故障。如果所有三个服务器都出现故障,它可以显示Wordpress默认消息“建立数据库连接时出错”。
答案 0 :(得分:2)
虽然我也试图进入一个更稳定的环境,但你应该能够做到这一点。这就是我的想法:
$ wpdb在require_wp_db()
中设置(wp-includes / load.php)。如果文件名为" db.php"存在于WP_CONTENT_DIR
(通常是wp-content)中,它将在创建$ wpdb之前包含。
在db.php中添加一个扩展wpdb的类,并使用自定义代码覆盖db_connect
,以根据$this->reconnect_retries
更改主机,凭据等,然后使用parent::db_connect()
。使用db-class实例化$ wpdb。
我还没有对此进行测试,但我不明白为什么它不应该工作。
答案 1 :(得分:0)
您可以使用许多开源工具进行故障转移,对于MySQL自动故障转移我建议orchestrator
答案 2 :(得分:0)
如果你试图从php
方面实现,那么我唯一能说的就是实现类似load balance
或类型的分布式系统。
这意味着什么?
假设您有3台数据库服务器并且它们全部同步。当您建立与数据库的连接时,您可以在不同的用户/请求上使用不同的服务器。这样,您可以避免数据库服务器过载。
<强>实施强>
您可以在每个数据库服务器上维护活动用户的日志,并根据您打开新请求/用户的连接。
答案 3 :(得分:0)
这通常看起来像一个尴尬的解决方案,你应该考虑某种分布式系统或集群服务器/数据库。
但是如果你坚持在代码中以编程方式实现它,那么你可以在连续的try / catch块中包含你的连接。
例如,如果您使用PDO,则可以
try {
$con = new PDO("mysql:host=$lang[dhost];dbname=$lang[db]", $lang['user'], $lang['pass']);
} catch(PDOException $e) {
try{second connection..........
......................
}
答案 4 :(得分:0)
我认为这个问题比你想象的要大。
我没有任何经验,但我可以告诉您,这类事情会影响您当前系统的工作方式,并且需要真正调查(实际代码和服务器架构)。
我不认为这是StackOverflow应该为你做的事情。