Как обработать ошибку базы данных WordPress путем автоматического подключения к резервной базе данных

У меня есть резервная копия базы данных на 3 разных серверах.

Всякий раз, когда происходит сбой базы данных на подключенном в данный момент сервере базы данных, я хочу, чтобы мой сайт автоматически подключался к следующему указанному серверу базы данных. Также о сбое следует уведомить на указанный электронный адрес.

Таким образом, каждый сбой базы данных должен обрабатываться путем подключения к следующему доступному серверу баз данных, пока сбой не будет обработан. Если все три сервера отказывают, он может показать сообщение WordPress по умолчанию «Ошибка при установлении соединения с базой данных».

-5

Решение

Хотя я бы постарался найти более стабильную среду, вы должны это сделать. Вот моя идея:

$ 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-классом.

Я не проверял это, но я не понимаю, почему это не должно работать.

2

Другие решения

Вы можете использовать много инструментов с открытым исходным кодом для аварийного переключения, для автоматического переключения MySQL я бы порекомендовал оркестратором

0

Если вы пытаетесь добиться от php сторона, то единственное, что я могу сказать, это реализовать что-то вроде load balance или вид распределенной системы.

Что это значит ?

Предположим, у вас есть 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..........
......................
}
0

Я думаю, что эта проблема больше, чем вы думаете.

У меня нет никакого опыта, но я могу вам сказать, что такого рода вещи влияют на то, как ваши системы работают в настоящее время, и необходимы реальные исследования (фактического кода и архитектуры серверов).

Я не думаю, что это то, что StackOverflow должен сделать для вас.

0
По вопросам рекламы [email protected]