81  /  97

Проблемы при восстановлении БД и их решения

Просмотров: 6943
Дата последнего изменения: 23.09.2021
Сложность урока:
4 уровень - сложно, требуется сосредоточиться, внимание деталям и точному следованию инструкции.
1
2
3
4
5

Проблема: разрушились диски или файловая система на master-сервере БД (fsck не помогает).

Решение. Делаем slave-сервер master-сервером. Редактируем необходимым образом файл dbconn.php (можно скриптом или переключаем IP). Далее выполняем одно из следующих действий:

  • или клонируем master-сервер (Xtrabackup),
  • или поднимаем slave-сервер, «переливаем» (mysqldump) в него данные из нового master-серверa,
  • или восстанавливаем базу данных из snapshot'а и «догоняем» по бинарным логам,
  • или разворачиваем последний логический бекап со slave-сервера и «догоняем» его по бинарным логам нового master-серверa (CHANGE MASTER TO MASTER_LOG_FILE=…, MASTER_LOG_POS=… ).

Таким образом, всегда полезно иметь рядом «горячую» копию БД, на которую можно быстро переключиться.


Проблема: случайно испорчена часть данных на master-сервере БД.

Например, в результате ошибки администратора или разработчика удалены поля в таблице заказов посетителей. Конечно, испорченные данные уже есть и на slave-сервере.

Решение. В приложении необходимо заблокировать часть функционала, написать, что в ближайшее время все будет починено, и выполнить следующие действия:

  • Развернуть рядом БД из snapshot'а (делается это достаточно быстро) или из логического бекапа (будет медленнее).
  • «Догнать» таблицу заказов до ошибочного запроса по бинарным логам master-серверa (man mysqlbinlog).
  • Перенести восстановленную таблицу заказов на «боевую» БД (можно через Xtrabackup).
  • Восстановить функционал приложения в полном объеме.

Проблема: случайно испорчена большая часть данных на master-сервере БД.

Например, в результате ошибки администратора или разработчика испортилось большое количество данных (заказы, счета, каталог). Конечно, на slave-сервер изменения уже ушли.

Решение. Необходимо заблокировать сайт, написать, что в ближайшее время все будет восстановлено, и выполнить следующие действия:

  • Развернуть рядом БД из последнего snapshot'а либо из бинарного инкрементального бекапа (Xtrabackup).
  • «Догнать» базу до ошибочного запроса по бинарным логам «испорченного« master-серверa (man mysqlbinlog).
  • Открыть сайт (обычно максимальный простой занимает несколько часов).

Иногда использование логического бекапа и бинарных логов позволяет быстрее развернуть БД. Желательно проводить учения по восстановлению системы.


Курсы разработаны в компании «1С-Битрикс»

Если вы нашли неточность в тексте, непонятное объяснение, пожалуйста, сообщите нам об этом в комментариях.
Развернуть комментарии