81  /  97

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

Просмотров: 16665
Дата последнего изменения: 06.07.2023
Сложность урока:
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);
  • Открыть сайт (обычно максимальный простой занимает несколько часов);

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



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

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