MySQL включает в себя несколько инструментов, которые можно использовать для проверки и восстановления таблиц базы данных. Для этого необходимо выполнить описанные ниже действия в том же порядке.
Шаг 1
Резервное копирование базы данных
Прежде чем восстанавливать базу данных или таблицу, необходимо сделать ее резервное копирование. Для этого нужно:
1. Войти на свой сервер по SSH.
2. Остановить сервер MySQL :
a. Для CentOS и Fedora введите:
service mysqld stop
b. для Debian and Ubuntu введите:
service mysql stop
3. Введите:
cp -rfv /var/lib/mysql /var/lib/mysql$(date +%s)
! Это команда копирует все файлы из всех ваших баз данных в имя каталога, созданного по текущему времени (точнее, количество секунд, прошедших с 1 января 1970 года). Это гарантирует, что каждая резервная копия базы данных будет храниться в каталоге с уникальным именем. Для дополнительной защиты вы можете (и должны) создавать резервные копии файлов базы данных в удаленном месте, а не на сервере.
4. Перезагрузите сервер MySQL :
Для CentOS и Fedora введите:
service mysqld startдля Debian and Ubuntu введите:
service mysql start
Шаг 2
Проверка и восстановление таблиц с MYSQLCHECK
После резервного порирования можно начинать устранение неисправностей. Программа mysqlcheck позволяет проверять и восстанавливать базы данных во время работы MySQL, она полезна, если вы хотите работать с базой данных, не останавливая сервис. Кроме того, mysqlcheck работает с таблицами, использующими двигатели базы данных MyISAM или InnoDB.
Для использования mysqlcheck:
Под пользователем root введите следующую команду
cd /var/lib/mysql
Введите следующую команду, заменив DATABASE именем базы данных, которую вы хотите проверить:mysqlcheck DATABASE
Предыдущая команда проверяет все таблицы в указанной базе данных. Кроме того, чтобы проверить конкретную таблицу в базе данных, введите такую команду (предварительно заменив базу данных именем базы данных и замените TABLE на имя таблицы, которую вы хотите проверить):
mysqlcheck DATABASETABLE
Mysqlcheck проверяет указанную базу данных и таблицы. Если таблица проходит проверку, mysqlcheck отображает OK для таблицы. Однако, если mysqlcheck сообщает об ошибке для таблицы, введите такую команду, чтобы попытаться ее восстановить (предварительно заменив базу данных именем базы данных и таблицей с именем таблицы)
mysqlcheck -r DATABASETABLE
Если mysqlcheck не может успешно восстановить таблицу или таблицы, перейдите к следующему шагу.
Шаг 3
Запуск специализированной диагностики
Если запуск mysqlcheck не устраняет проблему, следующим шагом будет запуск диагностики, специфичной для механизма, используемого таблицей или таблицами базы данных. Следуйте приведенной ниже процедуре для механизма хранения базы данных в вашей таблице.
Восстановление таблиц MyISAM с помощью myisamchk
Если вы используете механизм хранения MyISAM для таблицы, вы можете запустить программу myisamchk для ее исправления. Для этого выполните следующие действия:
! Программа myisamchk работает только для таблиц, в которых используется механизм хранения MyISAM и не работает для двигателя InnoDB.
Остановите сервер MySQL с помощью соответствующей команды для вашего дистрибутива Linux:
Для CentOS и Fedora введите:
service mysqld stop
Для Debian и Ubuntu введите:
service mysql stop
2. Введите следующую команду:
cd / var / lib / mysql
3. Перейдите в каталог, в котором находится база данных
4. Введите следующую команду, заменив TABLE именем таблицы, которую вы хотите проверить:
myisamchk TABLE
Чтобы проверить все таблицы в базе данных, введите следующую команду:
myisamchk * .MYI
Если предыдущая команда не работает, вы можете попытаться удалить временные файлы, которые могут препятствовать корректной работе myisamchk. Чтобы сделать это, вернитесь в каталог / var / lib / mysql и введите следующую команду:
ls * / *. TMD
Если есть какие-либо файлы .TMD, введите следующую команду для их удаления:
rm * / *. TMD
Затем попробуйте снова запустить myisamchk.
Чтобы попытаться восстановить таблицу, введите следующую команду, заменив TABLE именем таблицы, которую вы хотите восстановить:
myisamchk --recover TABLE
Перезагрузите сервер MySQL с помощью соответствующей команды для вашего дистрибутива Linux:
Для CentOS и Fedora введите:
service mysqld start
Для Debian и Ubuntu введите:
service mysql start
Проверьте восстановленную таблицу.
Запуск процесса восстановления InnoDB
Если вы используете механизм хранения InnoDB для таблицы базы данных, вы можете запустить процесс восстановления InnoDB. Для этого выполните следующие действия:
Используйте текстовый редактор, чтобы открыть файл my.cnf на вашем сервере. Местоположение файла my.cnf зависит от вашего дистрибутива Linux:
В CentOS и Fedora файл my.cnf находится в каталоге / etc.
В Debian и Ubuntu файл my.cnf находится в каталоге / etc / mysql.
В файле my.cnf найдите раздел [mysqld].
Добавьте следующую строку в раздел [mysqld]:
innodb_force_recovery = 4
Сохраните изменения в файле my.cnf, а затем перезапустите сервер MySQL, используя соответствующую команду для вашего дистрибутива Linux:
Для CentOS и Fedora введите:
service mysqld restartДля Debian и Ubuntu введите:
service mysql restart
5. Введите следующую команду для экспорта всех баз данных в файл databases.sql:
mysqldump --all-databases --add-drop-database --add-drop-table > databases.sql
6. Запустите программу mysql, а затем попытайтесь удалить поврежденную базу данных или базы данных с помощью команды DROP DATABASE.
! Если MySQL не может удалить базу данных, вы можете удалить ее вручную на пункте 8 ниже, после того как вы остановите сервер MySQL.
7. Остановите сервер MySQL с помощью соответствующей команды для вашего дистрибутива Linux:
Для CentOS и Fedora введите:
service mysqld stop
Для Debian и Ubuntu введите:
service mysql stop
8. Если вы не смогли удалить базу данных на шаге 6, введите следующие команды, чтобы удалить ее вручную. Замените DBNAME именем базы данных, которую вы хотите удалить:
cd /var/lib/mysql
rm -rf DBNAME
! Убедитесь, что вы не удаляете директории mysql или performance_schema!
9. Используйте текстовый редактор, чтобы открыть файл my.cnf на вашем сервере, а затем прокомментируйте следующую строку в разделе [mysqld], как показано:
#innodb_force_recovery=4
! Это отключает режим восстановления InnoDB.
10. Сохраните изменения в файле my.cnf, а затем запустите сервер MySQL, используя соответствующую команду для вашего дистрибутива Linux:
· Для CentOS и Fedora введите:
service mysqld start
· Для Debian и Ubuntu введите:
service mysql start
11. Введите следующую команду для восстановления баз данных из файла резервной копии, созданного на шаге 5:
mysql < databases.sql
12. Проверьте восстановленную базу данных.