holydiver_777: icon (Default)
[personal profile] holydiver_777
gentoo_my
БД MySQL бывает «падают». С кем не бывает? Движки сайтов при этом ругаются страшными словами в красных рамках про пропавшие таблицы. Но не все так страшно. БД на то и созданы, чтобы все нажитое непосильным трудом не сливалось в Великое Никуда от банальной ошибки записи файла или отключения питания. Готовы? Тогда начнем...

Для этих целей используем утилиту командной строки - myisamchk. Она входит в любую штатную установку MySQL и работает с таблицами типа MyISAM.
Работа с файлами базы происходит напрямую, поэтому ремонт возможен только при остановленном сервере БД MySQL.
Заходим на сервер через терминал.
Посмотрим в файле конфигурации MySQL my.cnf, где MySQL хранит свой файлы. По умолчанию это /var/lib/mysql.
# cd /var/lib/mysql
Просмотр списка всех баз:
# ls
Останавливаем сервер БД, чтобы исключить блокировки таблиц:
# service mysql stop
или так
# /etc/init.d/mysql stop

Проверка таблиц данных
Проверка всех БД:
# myisamchk -css */*.MYI
Проверка одной БД:
# myisamchk -css имя_базы/*.MYI
Опцию -c можно опускать, она стоит по умолчанию. Двойная опция s заставляет myisamchk быть тихой (весь свой многословный вывод об исправных таблицах она сливает в /dev/null и выводит на экран только обнаруженные ошибки и предупреждения).

Восстановление данных
Битые таблицы найдены, приступаем к ремонту. Сперва делаем резервную копию тех БД, где обнаружены проблемы.
# tar -czvf имя_базы.tgz имя_базы
Потом дополнительно проверяем отдельные таблицы, имена которых получили на предыдущем этапе:
# myisamchk -с имя_базы/имя_таблицы.MYI
Может Вы и получите какую-то полезную информацию, но обычно myisamchk рекомендует чинить таблицу. :)
# myisamchk -r имя_базы/имя_таблицы.MYI
Иногда утилита не может этого сделать, тогда пробуем другой режим (safe):
# myisamchk -o имя_базы/имя_таблицы.MYI
Если все OK, то запускаем сервер и БД заработают снова.
# service mysql start
или
# /etc/init.d/mysql start
Не забываем удалить файл бэкапа, если он не нужен:
# rm имя_базы.tgz

Дополнение mysqlcheck
Есть и версия обработки всего вышеописанного процесса для очень ленивых :)
Это, обработает все MyISAM таблицы во всех БД, доступных указанному пользователю и работает без остановки сервера MySQL:
# mysqlcheck -u root -p --auto-repair --check --optimize --all-databases
или в конкретной БД:
# mysqlcheck -u root -p --auto-repair --check --optimize имя_базы_данных

Без оптимизации, только проверку и ремонт можно сделать и для таблиц типа InnoDB:
# mysqlcheck -u root -p --auto-repair --check —all-databases

Profit!

* В процессе восстановления создается дополнительная временная таблица равная по размеру исходной. Учитывайте это при расчете свободного места на HDD!

**Описание утилиты myisamchk myisamchk — MyISAM Table-Maintenance Utility.



Profile

holydiver_777: icon (Default)
holydiver_777

May 2017

S M T W T F S
 123456
78910111213
14151617181920
21222324252627
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 11th, 2025 11:59
Powered by Dreamwidth Studios