У меня есть резервная копия базы данных на 3 разных серверах.
Всякий раз, когда происходит сбой базы данных на подключенном в данный момент сервере базы данных, я хочу, чтобы мой сайт автоматически подключался к следующему указанному серверу базы данных. Также о сбое следует уведомить на указанный электронный адрес.
Таким образом, каждый сбой базы данных должен обрабатываться путем подключения к следующему доступному серверу баз данных, пока сбой не будет обработан. Если все три сервера отказывают, он может показать сообщение WordPress по умолчанию «Ошибка при установлении соединения с базой данных».
Хотя я бы постарался найти более стабильную среду, вы должны это сделать. Вот моя идея:
$ wpdb установлен в require_wp_db()
(WP-включает / load.php). Если файл с именем «db.php» существует в WP_CONTENT_DIR
(обычно это wp-контент), он будет включен до создания $ wpdb.
Добавьте класс в db.php, который расширяет wpdb и переопределяет db_connect
с пользовательским кодом для изменения хоста, учетных данных и т. д. в зависимости от $this->reconnect_retries
а затем использовать parent::db_connect()
, Создайте экземпляр $ wpdb с вашим db-классом.
Я не проверял это, но я не понимаю, почему это не должно работать.
Вы можете использовать много инструментов с открытым исходным кодом для аварийного переключения, для автоматического переключения MySQL я бы порекомендовал оркестратором
Если вы пытаетесь добиться от php
сторона, то единственное, что я могу сказать, это реализовать что-то вроде load balance
или вид распределенной системы.
Что это значит ?
Предположим, у вас есть 3 сервера баз данных, и все они синхронизированы. Когда вы устанавливаете соединение с базой данных, вы можете использовать другой сервер для другого пользователя / запроса. Таким образом, вы можете избежать перегрузки сервера базы данных.
Реализация
Вы можете вести журнал активного пользователя на каждом сервере базы данных и в соответствии с вашим открытым подключением для нового запроса / пользователя.
Как правило, это выглядит как неуклюжее решение, вы должны рассмотреть какую-то распределенную систему или кластерные серверы / базы данных.
Но если вы настаиваете на программной реализации этого в своих кодах, то вы можете включать свои соединения в последовательные блоки try / catch.
например, если вы используете PDO, вы можете
try {
$con = new PDO("mysql:host=$lang[dhost];dbname=$lang[db]", $lang['user'], $lang['pass']);
} catch(PDOException $e) {
try{second connection..........
......................
}
Я думаю, что эта проблема больше, чем вы думаете.
У меня нет никакого опыта, но я могу вам сказать, что такого рода вещи влияют на то, как ваши системы работают в настоящее время, и необходимы реальные исследования (фактического кода и архитектуры серверов).
Я не думаю, что это то, что StackOverflow должен сделать для вас.