MySQL — одна из самых популярных систем с открытым исходным кодом СУБД (реляционных систем управления базами данных). Она является неотъемлемой частью быстрорастущего стека LAMP и завоевала огромную популярность среди разработчиков и системных администраторов. По сравнению с нереляционными базами данных, SQL предоставляет отличные возможности для эффективного упорядочивания, хранения и управления данными. Отличительные функции организации таблиц и выдающиеся возможности базы данных SQL делают ее предпочтительным выбором на всех уровнях организации, как крупных, так и малых.
В редких случаях таблицы MySQL могут быть повреждены, что указывает на возникновение ошибки, из-за которой хранящиеся в них данные становятся нечитаемыми. При попытке чтения данных из поврежденной таблицы сервер аварийно завершает работу и выдает ошибку или список ошибок.
Потенциальные причины повреждения таблиц MySQL
Ниже приведены некоторые из наиболее типичных причин повреждения таблиц:
- Сбой службы MySQL после перезагрузки.
- Внезапное выключение компьютера из-за сбоя питания.
- Неисправная память или аппаратный сбой.
- Программные ошибки в ОС или коде SQL.
- Завершение работы MySQL во время записи.
- Система переходит в режим OFF во время обновления SQL.
Прежде чем исправлять таблицу, которую вы подозреваете в повреждении, создайте резервную копию каталога данных. Это поможет снизить вероятность потери данных. В этом кратком руководстве мы расскажем вам о шагах по устранению неполадок и восстановлению поврежденных таблиц в MySQL.
Предварительные требования
Для выполнения этого руководства вам понадобится следующее:
- Последняя версия установленной Ubuntu в вашей системе.
- Пользователи системы должны иметь привилегии sudo.
- Если у вас возникли трудности с доступом к учетной записи sudo, попробуйте изменить пароль root в MySQL.
- Установленная СУБД MySQL на вашем сервере.
Шаг 1. Остановка службы MySQL и резервное копирование данных
Сначала остановите службу MySQL с помощью команды systemctl:
|
1 |
sudo systemctl stop mysql |
После остановки службы SQL следующим шагом будет создание резервных копий всех существующих файлов в новом каталоге. Используйте каталог данных Ubuntu по умолчанию /var/lib/mysql/ для копирования всех системных данных:
|
1 |
cp -r /var/lib/mysql /var/lib/mysql_bkp |
Шаг 2. Идентификация ошибки
Далее мы начнем расследование и определим поврежденную таблицу. Если таблица использует движок хранения MyISAM, используйте инструкцию CHECK TABLE и проверьте состояние таблицы:
|
1 |
mysql> CHECK TABLE table_name; |
В качестве вывода вы увидите сообщение, подтверждающее повреждение таблицы или таблиц.
Шаг 3. Восстановление поврежденной таблицы
Если в таблице MyISAM обнаружена ошибка и вы ее идентифицировали, используйте инструкцию REPAIR TABLE, чтобы исправить ошибку:
|
1 |
mysql> REPAIR TABLE table_name; |
Если исправление прошло успешно, вы должны увидеть на выходе следующее сообщение об отсутствии ошибок:
|
1 2 3 4 5 6 7 8 9 10 11 |
Output: +--------------------------+--------+----------+----------+ | Table | Op | Msg_type | Msg_text | +--------------------------+--------+----------+----------+ | database_name.table_name | repair | status | OK | +--------------------------+--------+----------+----------+ |
Однако, если ошибка появится снова, следуйте официальному документу MySQL версии 8.0, чтобы перестроить или восстановить таблицы.
В отличие от движка хранения MyISAM, процесс восстановления таблиц в движке хранения InnoDB отличается. InnoDB является движком хранения по умолчанию в MySQL 8.0. Он поддерживает автоматическую проверку на наличие повреждений и операции восстановления. MySQL InnoDB проверяет наличие поврежденных страниц, выполняя контрольные суммы для каждой считываемой страницы. При обнаружении несоответствия сервер MySQL автоматически останавливается.
Суть в том, что необходимость в восстановлении таблиц InnoDB возникает крайне редко. InnoDB оснащен механизмом аварийного восстановления, который может решить большинство проблем путем перезапуска.
Попробуйте перезапустить службу MySQL, чтобы проверить, сможете ли вы получить доступ к серверу:
|
1 |
sudo systemctl restart mysql |
Если вам не удается восстановить поврежденную таблицу InnoDB даже после перезагрузки, попробуйте метод «Dump and Reload», предложенный в документации MySQL. Этот метод включает в себя восстановление доступа к поврежденной таблице с помощью утилиты mysqldump. Необходимо создать папку для хранения и сохранения логической резервной копии таблицы. Как только ошибка будет устранена, она заново загрузит таблицу обратно в базу данных.
Шаг 4. Использование параметра innodb_force_recovery
Если сервер по-прежнему не работает или недоступен, попробуйте использовать параметр force_recovery в InnoDB. Включение ON параметра force_recovery — отличный способ восстановления баз данных MySQL. Вы можете включить этот параметр, изменив файл mysqld.cnf в текстовом редакторе nano:
|
1 |
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf |
Вставьте следующую строку под разделом [mysqld]:

Сохраните и закройте файл после перезапуска службы MySQL.
Шаг 5. Создание файла mysqldump
Если у вас есть доступ к поврежденной таблице, используйте параметр mysqldump, чтобы поместить все дампы в новый файл. Назовите новый файл по своему усмотрению и обязательно добавьте расширение .sql в конце. Здесь мы назовем файл demo.sql:
|
1 |
mysqldump database_name table_name > demo.sql |
После этого используйте запрос DROP TABLE, чтобы удалить таблицу из базы данных. Вы можете использовать следующий синтаксис, чтобы избежать необходимости повторно открывать командную строку MySQL:
|
1 |
mysql -u user -p --execute="DROP TABLE database_name.table_name" |
Затем, используя только что подготовленный файл дампа demo.sql, восстановите таблицу:
|
1 |
mysql -u user -p --database=database_name < demo.sql |
Вы успешно исправили поврежденную таблицу MySQL и готовы к беспрепятственной работе с базой данных.
Заключение
Повреждения таблиц или непредвиденные сбои системы вполне вероятны, если вы работаете с большим объемом данных. Стоит отметить, что движок хранения MySQL InnoDB более отказоустойчив, чем предыдущий движок MyISAM. Таблицы, использующие движок хранения InnoDB, все еще могут быть повреждены, хотя опасность повреждения таблиц и сбоев значительно снижена благодаря его функциям автоматического восстановления.
Наконец, вы можете изучить множество тем и руководств по базам данных в нашем блоге:
- Как установить MySQL на CentOS 7
- Пользователь MySQL — создание и предоставление прав
- Настройка репликации в MySQL на Ubuntu
Приятной работы!
Комментарии
Комментариев пока нет. Будьте первым.