Система управления базами данных (СУБД) в CRM Битрикс24, как и другие СУБД, не защищена от неожиданной остановки сервиса. Это может как вызвать сбой в работе самого сервиса, так и повлиять на дальнейшую целостность и работоспособность баз и отдельно взятых таблиц.
Рассмотрим, что делать в ситуации, когда мы видим ошибку, связанную с работой базы данных:
Рассмотрим, что делать в ситуации, когда мы видим ошибку, связанную с работой базы данных:
Случайно повредилась таблица b_iblock
На данном этапе необходимо узнать текущий статус сервиса и попробовать его перезапустить. В большинстве случаев проблема не критична и решается простым перезапуском. Чтобы пройти этот шаг, нужно:
Если сервис так и не смог стартовать, можно будет увидеть команды для просмотра логов:
- Проверить сервис mysql\mysqld
На данном этапе необходимо узнать текущий статус сервиса и попробовать его перезапустить. В большинстве случаев проблема не критична и решается простым перезапуском. Чтобы пройти этот шаг, нужно:
- Зайти в консоль управления сервером.
- Ввести команду service mysql status.
- Ввести команду service mysql restart.
Если сервис так и не смог стартовать, можно будет увидеть команды для просмотра логов:
2.Попытка аварийного включения сервиса БД
Если после шага 1 запустить сервис не удалось – необходимо включить его в аварийном режиме.
С увеличением числа сервис будет игнорировать всё больший объём ошибок.
Если после шага 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
Чтобы выполнить её, необходимо:
- Удалить всё, что находится в папке 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 и после чего перезагрузить сервис. Недостающие таблицы (если они не были созданы вручную при кастомизации системы) можно перенести с аналогичных проектов. Важно перенести именно структуру таблицы, без содержания.