Как исправить поврежденные таблицы MySQL баз данных шаг за шагом

В современном мире компании не полагаются исключительно на определенную платформу базы данных. Существует множество платформ баз данных, которые адекватны для обработки средних нагрузок и требований к высокой доступности и восстановлению после катастроф. MySQL является одной из этих платформ баз данных, которая предоставляет множество функций и высокую производительность.

Как и у других RDBMS, у MySQL также есть тенденция к порче базы данных и таблиц. Последняя неплановая остановка, вызванная Microsoft и CrowdStrike, также повлияла на сервера баз данных MySQL. Вследствие сбоев операционной системы таблицы базы данных или вся база данных могут быть повреждены.

В этой статье я покажу, как мы можем портить и исправить таблицу базы данных MySQL. Эта статья помогает DBAs для имитации сбоев и помогает им определить лучший возможный способ восстановления или ремонта поврежденной таблицы MySQL.

Общее понимание порчи базы данных MySQL

Поражение базы данных MySQL может проявляться по-различным способам, включая:

Недоступные таблицы

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

Ошибки несогласованности данных

Если таблица повреждена, вместо смысловых данных ваш запрос может возвращать какие-либо мусорные значения или непоследовательные или неполные результаты.

Неожиданные остановки

В некоторых случаях MySQL может вылететь при обращении к таблице или во время выполнения резервных копий с помощью mysqldump. Однажды я встретил этот ошибку во время имитации сценария повреждения. Я порчил файл данных таблицы. После запуска службы, когда я попытался получить доступ к таблице с помощью запроса SELECT, служба MySQL автоматически вылетела.

Ошибки во время операций с базой данных

При обращении к поврежденной таблице можете встретить следующие ошибки:

Plain Text

 

Эти ошибки указывают на то, что файл данных или связанные файлы индексов повреждены.

Очень важно понять root cause of the corruption, чтобы предотвратить будущие вспышки и обеспечить целостность данных.

Предварительные условия ремонта таблиц MySQL

Перед выполнением каких-либо ремонтных работ убедитесь, что у вас есть:

  • Полная резервная копия базы данных MySQL
  • Достаточно дискового пространства
  • Административный доступ к серверу MySQL

Теперь посмотрим, как имитировать повреждение таблицы.

Поврежденная таблица MySQL

Перед тем как мы узнаем о процессе исправления базы данных, нам нужно понять, как можно портить ее. Для демонстрации я создал базу данных под названием “CorruptDB” на сервере MySQL. Также я создал таблицу corrupt_table в базе данных CorruptDB.

Вот код для создания базы данных и таблицы.

MySQL

 

Я добавил миллион записей в таблицу, выполнив следующий запрос.

MySQL

 

Обратите внимание, что имитация порчи таблицы осуществляется на моем ноутбуке. Не попробуйте этого на производстве, разработке или в других средах. Таблица, которую я использую в этой демонстрации, создана с использованием движка базы данных MyISAM. Вы можете прочитать о альтернативных Storage Engines, чтобы leaned more about the database engines of MySQL Server.

Я выполнил следующие шаги, чтобы портить таблицу.

Шаг 1: Остановите услуги MySQL Server

вам нужно остановить сервер MySQL. Для этого запустите PowerShell с правами администратора и выполните следующийCOMMAND.

Plain Text

 

Alternately, you can also stop it from Services.

Шаг 2: Порче Index File of the Table

Теперь мы должны портить index файл таблицы. Когда вы создаете любую таблицу в движке базы данных MyISAM, три файла создаются, когда вы создаете таблицу с использованием движка базы данных MyISAM.

  • MYD files: This file contains actual data.
  • MYI files: This is an index file.
  • Файлы Frm: Файл содержит структуру таблицы.

Мы будем портить индексный файл. Данные файлы находятся в default-позиции, что является “C:\ProgramData\MySQL\MySQL Server 8.0\Data\corruptdb.” Чтобы портить, мы используем шестый редактор.

Скачайте и установите шестый редактор. Откройте MYI файлы с его помощью. Файл выглядит следующим образом:

Замените первые 5 байт на какие-то случайные значения. Сохраните файл и закройте редактор.

Теперь, начнем службу и попробуем получить доступ к таблице.

Шаг 3: Запустите MySQL Службы и Получите доступ к Таблице

Сначала, запустите MySQL Службы с помощью следующего команды в PowerShell.

Plain Text

 

После запуска служб, выполните следующий запрос на MySQL командной строке.

MySQL

 

Запрос вернул следующий ошибку:

Ошибка указывает, что индекс corrupt_table был порчен и должен быть исправлен.

Ручные методы исправления MySQL Таблиц

Есть несколько методов, которые можно использовать для исправления поврежденной MySQL таблицы. Первый метод – это использование команд CHECK TABLE и REPAIR TABLE.

Команды CHECK TABLE и REPAIR TABLE

Вы можете восстановить таблицу с помощью встроенных команд CHECK TABLE и REPAIR TABLE MySQL. Эти команды используются для диагностики и исправления любой таблицы MyISAM.

команда проверки таблицы проверяет целостность таблицы. Она проверяет структуру таблицы, индексы и данные на наличие повреждений и показывает подробности. Syntax is below:

Plain Text

 

You can specify the different options.

  1. QUICK: This option quickly checks and identifies issues like corrupted indexes.
  2. FAST: It checks tables that are not closed properly.
  3. CHANGED: This option checks only those tables that are changed after the last CHECK TABLE execution.
  4. MEDIUM: This option checks the records and verifies that the links between the table and data are correct.
  5. EXTENDED: This option thoroughly scans and verifies the table structure and contents.

Here in this demo, we will perform a quick scan. Here is the command.

Plain Text

 

Screenshot:

As you can see in the above screenshot, the error indicates that the index of the corrupt_table is corrupted and needs to be fixed. 

We will use the REPAIR TABLE command to fix the corruption in the table. The REPAIR TABLE command is used to recover the table structure and data from corruption, especially the table that has the MyISAM database engine. In case the index of the table is corrupted, the REPAIR TABLE command rebuilds the indexes.

The syntax of REPAIR TABLE is as follows:

Plain Text

 

You can specify the following options:

  • QUICK: It repairs only the index file of a table. It does not access the data file of a table.
  • EXTENDED: При использовании этой опции команда выполнит полное восстановление. Она также восстанавливает или создает файл индекса, просматривая все записи таблицы.

В этой демонстрации мы испортили индекс таблицы; поэтому мы будем использовать опцию QUICK. Выполните следующую команду.

Plain Text

 

Скриншот:

Как видно на скриншоте выше, таблица corrupt_table успешно восстановлена. Чтобы проверить, выполните следующий запрос в MySQL Workbench:  

MySQL

 

Результат запроса:

Как видно, таблица теперь доступна.

Восстановление таблицы с помощью команды mysqldump

Второй метод заключается в восстановлении всей таблицы из резервной копии. Этот метод может быть использован, когда таблица сильно повреждена и не может быть восстановлена с помощью команды REPAIR TABLE

Для восстановления таблицы MySQL из резервной копии мы можем использовать команду mysqldump. Вы можете прочитать статью “mysqldump — программа резервного копирования баз данных” для более подробной информации о том, как использовать команду mysqldump. Синтаксис для восстановления таблицы приведен ниже.

MySQL

 

В синтаксисе:

  • Username: Введите имя пользователя, которое вы используете для подключения к базе данных MySQL.
  • -p: Укажите пароль. Если оставить поле пустым, MySQL запросит пароль.
  • [database_name]: Укажите имя базы данных, в которой вы пытаетесь восстановить таблицу.
  • Tablica_dump.sql: указать полное имя файла备份.

Для демонстрации я сделал резервную копию базы данных CorruptDB, которая находится в каталоге C:\MySQLData\Backup.

Чтобы восстановить corrupt_table, мы можем использовать следующий командный запрос.

MySQL

 

После успешного выполнения команды, вы сможете получить доступ к таблице. Выполните следующий запрос для проверки.

MySQL

 

Вывод запроса:

Как вы можете видеть на приведенном выше скриншоте, таблица успешно восстановлена.

Использование phpMyAdmin

Вы также можете использовать инструмент phpMyAdmin для исправления любой поврежденной базы данных MySQL. phpMyAdmin это графический интерфейс для управления и обслуживания MySQL и MariaDB. Для демонстрации я установил его на моем ноутбуке.

  • Чтобы исправить таблицу, запустите phpMyAdmin и перейдите к базе данных, в которой создана поврежденная таблица.
  • В правом pane вы можете увидеть список таблиц, созданных в базе данных CorruptDB.
  • Выберите Corrupt_table из списка и выберите опцию Исправить таблицу из выпадающего списка.

Вот скриншот для сравнения:

После исправления таблицы, статус corrupt_table сможете увидеть, что он стал OK. Вот скриншот:

Заключение

В этой статье мы узнали о возможных причинах повреждения базы данных MySQL и о том, как их исправить. Я объяснил пошаговый процесс повреждения таблиц MySQL с использованием шестнадцатеричного редактора. Я также рассмотрел, как их исправить с помощью команды CHECK TABLE и REPAIR TABLE. Мы также узнали, как восстановить таблицу с помощью утилиты mysqldump.

Восстановление поврежденной таблицы MySQL может быть сложной задачей, но с правильными инструментами и методами это возможно. Ручные методы предоставляют базовое решение, в то время как phpMyAdmin предлагает всесторонний и надежный вариант восстановления. Всегда обеспечивайте регулярное создание резервных копий и поддерживайте здоровье вашей базы данных, чтобы минимизировать риск повреждения.

Source:
https://dzone.com/articles/repair-corrupt-mysql-database-tables-step-by-step