Введение
Иногда таблицы MySQL могут быть повреждены, что означает, что произошла ошибка и данные в них невозможно прочитать. Попытка чтения из повреждённой таблицы обычно приводит к сбою сервера.
Распространенные причины повреждения таблиц
- Служба MySQL останавливается во время записи данных
- Изменение таблицы внешним приложением во время ее изменения сервером
- Неожиданное отключение автомобиля
- Сбой компьютерного оборудования
- Ошибка в программном коде MySQL
Если вы подозреваете, что одна из ваших таблиц повреждена, перед началом восстановления или устранения неполадок следует создать резервную копию каталога данных. Это поможет минимизировать риск потери данных.
Действия по восстановлению поврежденной таблицы в MySQL
Сначала остановите службу MySQL:
sudo systemctl stop mysqlПримечание: в некоторых системах, таких как Rocky Linux, служба MySQL может называться mysqld Быть известным.
Затем скопируйте все данные в новый каталог для резервного копирования. В системах Ubuntu каталог данных по умолчанию — /var/lib/mysql/ является:
cp -r /var/lib/mysql /var/lib/mysql_bkpПосле создания резервной копии вы готовы проверить, действительно ли таблица повреждена. Если таблица не резервируется системой хранения, МойISAM Если вы используете MySQL, вы можете перезапустить его, выполнив команду ПРОВЕРИТЬ ТАБЛИЦУ Проверьте в командной строке MySQL:
sudo systemctl start mysqlCHECK TABLE table_name;Если таблица повреждена, вы увидите соответствующее сообщение. Если таблица MyISAM повреждена, её обычно можно исправить с помощью команды РЕМОНТНЫЙ СТОЛ Исправлено:
REPAIR TABLE table_name;Если восстановление прошло успешно, в выводе вы увидите сообщение, похожее на это:
Output
+--------------------------+--------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+--------------------------+--------+----------+----------+
| database_name.table_name | repair | status | OK |
+--------------------------+--------+----------+----------+Если таблица по-прежнему повреждена, в документации MySQL приведены альтернативные методы восстановления поврежденных таблиц.
Восстановление поврежденных таблиц с помощью хранилища InnoDB
Если таблица повреждена из-за механизма хранения ИнноДБ Процесс восстановления будет отличаться в зависимости от используемой версии MySQL. InnoDB используется в качестве движка хранения данных по умолчанию для MySQL, начиная с версии 8.0, и имеет функции автоматической проверки на наличие повреждений и восстановления. InnoDB обнаруживает поврежденные страницы, анализируя контрольные суммы каждой считываемой страницы, и автоматически останавливает сервер MySQL при обнаружении различий в контрольных суммах.
Необходимость в восстановлении таблиц InnoDB возникает редко, поскольку InnoDB имеет механизм восстановления после сбоя, который позволяет решить большинство проблем перезапуском сервера. Однако, если вам потребуется пересоздать таблицу InnoDB, инструкции по её выполнению см. в документации MySQL. Дамп и перезагрузка рекомендует. Этот метод включает восстановление доступа к повреждённой таблице с помощью инструмента mysqldump Он используется для создания логической резервной копии таблицы, которая сохраняет структуру таблицы и данные в ней, а затем повторно вставляет таблицу в базу данных.
Перезапустите службу MySQL.
Сначала попробуйте перезапустить службу MySQL, чтобы проверить, появится ли у вас доступ к серверу:
sudo systemctl restart mysqlЕсли сервер все еще не работает или недоступен, вы можете воспользоваться опцией force_recovery Включите InnoDB в настройках. Для этого создайте файл mysqld.cnf Редактировать. В системах Ubuntu и Debian этот файл обычно находится в /etc/mysql/ В системах Red Hat и Rocky этот файл обычно находится в /etc/my.cnf.d Он расположен.
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnfВ разделе [mysqld] Добавьте следующую строку:
. . .
[mysqld]
. . .
innodb_force_recovery=1После сохранения изменений и закрытия файла попробуйте снова запустить службу MySQL. Если вы можете получить доступ к повреждённой таблице, воспользуйтесь инструментом mysqldump Используйте его для резервного копирования данных таблицы. Вы можете назвать этот файл как угодно, но здесь он будет называться out.sql Мы называем это:
mysqldump database_name table_name > out.sqlЗатем удалите таблицу из базы данных. Для этого можно использовать следующую команду:
mysql -u user -p --execute="DROP TABLE database_name.table_name"Наконец, создайте таблицу, используя файл свалка Получите тот, который вы недавно создали:
mysql -u user -p < out.sqlОбратите внимание, что система хранения данных InnoDB в целом более устойчива, чем старая система MyISAM. Таблицы, использующие InnoDB, по-прежнему могут быть повреждены, но благодаря функциям самовосстановления риск повреждения таблиц и сбоев значительно ниже.
Результат
Следуя этому руководству, вы узнали, как восстанавливать повреждённые таблицы в MySQL, и использовали различные методы решения проблем в системах хранения данных MyISAM и InnoDB. Всегда создавайте резервные копии данных перед внесением любых изменений, чтобы избежать риска их потери.









