Система управления базами данных (СУБД) в CRM Битрикс24, как и другие СУБД, не защищена от неожиданной остановки сервиса. Это может как вызвать сбой в работе самого сервиса, так и повлиять на дальнейшую целостность и работоспособность баз и отдельно взятых таблиц.
Рассмотрим, что делать в ситуации, когда мы видим ошибку, связанную с работой базы данных:
Случайно повредилась таблица b_iblock
Проверить сервис 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:
Логин, пароль и название базы можно найти в файле .settings.php в директории bitrix/.
На этом шаге может произойти ошибка экспорта, в нашем случае – это как раз та самая «битая» таблица. Можно прибегнуть к её пропуску при экспорте, для этого необходимо ввести:
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 и после чего перезагрузить сервис. Недостающие таблицы (если они не были созданы вручную при кастомизации системы) можно перенести с аналогичных проектов. Важно перенести именно структуру таблицы, без содержания.