Инструкция: Аварийное восстановление баз данных Битрикс24

Система управления базами данных (СУБД) в CRM Битрикс24, как и другие СУБД, не защищена от неожиданной остановки сервиса. Это может как вызвать сбой в работе самого сервиса, так и повлиять на дальнейшую целостность и работоспособность баз и отдельно взятых таблиц.

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

Случайно повредилась таблица b_iblock

1. Проверить сервис mysql\mysqld

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

  • Зайти в консоль управления сервером.
  • Ввести команду service mysql status.
  • Ввести команду service mysql restart.

Если сервис так и не смог стартовать, можно будет увидеть команды для просмотра логов:

2. Попытка аварийного включения сервиса БД

Если после шага 1 запустить сервис не удалось – необходимо включить его в аварийном режиме.

  • Для этого нужно зайти в директорию, где содержится конфигурация mysql, найти файл my.cnf (/etc/my.cnf), и вписать туда innodb_force_recovery = n, где n – число от 1 до 7.

С увеличением числа сервис будет игнорировать всё больший объём ошибок.

  • После чего нужно сохранить файл и попытаться запустить БД:

Service mysql start

3. Попытка экспортировать резервную копию при аварийном режиме БД

Далее нам нужно попытаться «вытянуть» всю информацию из базы.

  • Для этого воспользуемся стандартной командой mysqldump:

mysqldump –u %user% -p %database_name% > %directory%/file.sql

Логин, пароль и название базы можно найти в файле .settings.php в директории bitrix/.

  • На этом шаге может произойти ошибка экспорта, в нашем случае – это как раз та самая «битая» таблица. Можно прибегнуть к её пропуску при экспорте, для этого необходимо ввести:

mysqldump -u %user% -p %database_name% --ignore-table=%database_name%.%table_name% > %directory%/file.sql

  • Чтобы пропустить несколько таблиц, просто повторяйте опцию столько раз, сколько потребуется:

mysqldump -u %user% -p %database_name% --ignore-table=%database_name%.%table1 % --ignore-table=%database_name%.%table2 % > %directory%/file.sql

В итоге дамп базы будет создан.

4.Попытка импорта бэкапа

После того, как мы сделали бэкап, его нужно закачать обратно в базу.

Для этого нужно ввести команду:

mysql -u %user% -p %database_name% < %directory%/file.sql

Результатом будет восстановленная (лишь на часть) база.

Все недостающие таблицы необходимо будет создать вручную.

5.Как быть, если импорт заканчивается с ошибкой?

В этом случае поможет полная переустановка сервиса MySQL

Чтобы выполнить её, необходимо:

  1. Удалить всё, что находится в папке mysqld:

rm -rf /var/lib/mysqld

2. Инициализируем новую БД (параметр force_recovery должен быть предварительно убран из my.cnf):

mysqld --initialize-insecure --basedir=/usr --datadir=/var/lib/mysql

3. Создаём сокет и даём права на файл пользователю MySQL

mkfifo /var/lib/mysqld/mysqld.sock

chown -R mysql /var/lib/mysqld/mysqld.sock

4. Запускаем mysql

systemctl start mysqld mysql -u root

5. Меняем root-пароль

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';

Далее необходимо заново пройти шаг №4, после чего выключить аварийный режим mysql и перезагрузить сервис. Недостающие таблицы (если они не были созданы вручную при кастомизации системы) можно перенести с аналогичных проектов. Важно перенести именно структуру таблицы, без содержания.

Системный аналитик ITGRADE ltd Эдуард Шмелёв

0
1 комментарий
Предприятие Гальваник

А что делать с пропущенными таблицами? и данными в них?

Ответить
Развернуть ветку
-2 комментариев
Раскрывать всегда