Меню

Mysql как отремонтировать таблицу

MySQL – восстановление повреждённых таблиц

Как известно, любые повреждения происходят в результате каких-либо внешних факторов. Состояние внутренней структуры таблиц баз данных (БД), в данном случае таблиц MySQL, всецело определяет, насколько надёжным будет использование самой БД. На высоконагруженных серверах БД повреждение таблиц отнюдь не редкость. Администраторам, да и самим пользователям порой приходится прибегать к починке структуры таблиц своих БД. О том, по каким причинам повреждаются таблицы и какие существуют методы решения данной проблемы на примере MySQL и будет изложено в данной статье.

Причины повреждения таблиц

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

  • аппаратный сбой, когда произошло внезапное отключение системы, например из-за сбоев в электропитании;
  • внезапная остановка работы сервера MySQL, когда в этот момент осуществлялись доступ к БД и/или чтение и запись таблиц;
  • несанкционированный доступ к файлам БД со стороны сторонних программ.

В любом случае, первое, что нужно сделать — это остановить работу MySQL-сервера, сделать резервные копии файлов таблиц, которые по умолчанию находятся в каталоге /var/lib/mysql:

Для выполнения этой команды могут потребоваться привилегии суперпользователя или пользователя, имеющего доступ к каталогу /var/lib/mysql. Только после этого можно приступить к разбору ситуации и проверить, действительно ли таблицы повреждены. Для этого можно воспользоваться командной консолью MySQL. Но предварительно необходимо снова запустить MySQL-сервер. И авторизоваться на нём (от имени пользователя-администратора) с помощью команды:

Здесь username – имя пользователя-администратора в системе MySQL.

Проверка таблиц на предмет повреждений

Проверить таблицы на предмет повреждения можно встроенными средствами MySQL, если для них используется движок MyISAM. Для этого используется специальный запрос «CHECK TABLE». Итак, для начала, после авторизации в системе MySQL (как описано в предыдущей главе) необходимо выбрать интересующую БД:

Здесь db_name – имя требуемой базы данных, таблицы которой нужно проверить. Для получения списка всех имеющихся на сервере БД можно выполнить следующий запрос:

Теперь можно выполнить, собственно, саму проверку:

Как нетрудно догадаться, «db_table» здесь — это имя требуемой таблицы. В данном случае вывод в столбце «Msg-text» говорит о том, что с таблицей всё в порядке.

Восстановление MyISAM-таблиц

В случае, когда повреждения таблиц всё же есть. То с большой степенью вероятности таблицу можно починить, используя запрос «REPAIR TABLE»:

Теперь, если починка завершилась нормально, будет получен следующий вывод:

Как можно видеть, всё довольно просто. Однако, если повреждённых таблиц много, то процесс восстановления может быть довольно трудоёмким. Ну а если же данный способ успеха не принёс, то следует обращаться к более сложным методам починки таблиц, рекомендованных самими разработчиками MySQL.

Читайте также:  Обвалилась стена как отремонтировать

Восстановление InnoDB-таблиц

В случае, если повреждённые таблицы обслуживались движком InnoDB, то придётся использовать более сложный метод восстановления. Дело в том, что движок InnoDB сам способен следить за исправностью таблиц и устранять повреждения. Однако, если он по каким-либо причинам не справляется с этой задачей, то сервер MySQL останавливается.

Метод восстановления для InnoDB-таблиц рекомендуется разработчиками MySQL и суть его в следующем:

  • необходимо сначала восстановить доступ к повреждённой таблице, поскольку сервер в этом случае останавливается;
  • выполнить резервную копию в виде дампа повреждённых таблиц, используя утилиту mysqldump, которая сохраняет структуру таблицы и данные;
  • удалить повреждённую таблицу;
  • выполнить загрузку дампа таблицы, но уже во вновь созданную таблицу БД, что будет сделано утилитой mysqldump автоматически.

Для восстановления доступа к таблицам можно сначала попытаться перезагрузить сервер MySQL. Если это не помогло, то можно запустить его с опцией innodb_force_recovery. Для этого необходимо отредактировать конфигурационный файл /etc/mysql/mysql.conf.d/mysqld.cnf , например, используя текстовый редактор nano:

Необходимо сделать изменения в разделе [mysqld], добавив в него строку:

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

Дамп back.dump будет сохранён в подкаталоге backups домашнего каталога текущего пользователя.

Теперь необходимо удалить из БД повреждённую таблицу. Для этого после авторизации в командной консоли MySQL (как описано в главе «Причины повреждения таблиц»), нужно выполнить следующий запрос:

Если БД была предварительно выбрана командой use, то в запросе следует указать только таблицу:

Теперь можно выйти из командной консоли MySQL командой exit. И выполнить загрузку дампа таблицы в БД:

В данном случае вместо «/home/username/backups/back.dump» следует использовать местоположение, куда ранее был сохранён дамп.

Заключение

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Источник

Как починить таблицу в базе данных MySQL

Если вдруг, Вы обнаружите на своём сайте ошибки базы данных MySQL, не спешите восстанавливать “Backup”, попробуйте сначала отремонтировать поврежденную таблицу, используя команду “myisamchk”.

Как правило при получении следующих ошибок (ниже), удачное восстановление гарантировано в 99% случаев.

  • `tbl_***.frm’ is locked against change
  • Can’t find file `tbl_***.MYI’ (Errcode: ***)
  • Unexpected end of file
  • Record file is crashed
  • Got error *** from table handler

Вы спросите, как узнать повреждена таблица базы данных или это что-то другое?

Запустите phpMyAdmin, выберите из списка (если у вас их несколько) нужную вам базу данных и посмотрите структуру таблицы. Поврежденная запись в таблице базы данных сразу выделяется, а при попытке просмотра структуры конкретной записи, показывает ошибку.

Читайте также:  Как отремонтировать затопленную квартиру

Определившись с именем (wp_options) поврежденной таблицы, запускаем на сервере терминал, затем переходим в папку, где MySQL хранит свои файлы, путь по умолчанию: /var/lib/mysql и нужная вам база данных (aawru).

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

1. Запускаю “Терминал”.

2. Ввожу команду myisamchk -r wp_options.MYI (Вместо “wp_options”, подставьте нужную вам таблицу для восстановления).

3. Нажимаю кнопку “Выполнить”.

Команда находит и исправляет ошибки поврежденной таблицы, если восстановления не произошло повторите, используя команду myisamchk -o. Команда myisamchk имеет множество опций, которые всегда могут пригодится.

Автор: Ruterk
10 июня 2016 г.

Все опции myisamchk

Для того чтобы получить дополнительную информацию по команде, стоит использовать помощь:

Общие опции:

-s: только вывод ошибок;
-v: вывод большего количества информации;
-V: вывод версии и выход;
-w: ждать, если таблица заблокирована.

Опции проверки:

-c: проверка таблиц на ошибки;
-е: очень «грубая» проверка. Стоит использовать только в крайнем случае, если в обычном режиме ошибки не обнаруживаются;
-F: быстрая проверка, проверяются только таблицы, которые не закрывались правильно;
-С: проверка только таблиц, которые изменились со времени последней поверки;
-f: автоматический перезапуск myisamchk с опцией -r, есть обнаружены ошибки;
-i: вывод статистики по проверенным таблицам;
-m: облегченный режим проверки, быстрее, чем обычный, находится 99,99% ошибок;
-U: обновление статуса: пометка таблиц как поврежденных, если обнаруживаются любые ошибки;
-T: не помечать таблицы как проверенные.

Источник

Восстановление или ремонт таблиц или индексов mysql

Бывают ситуации, когда таблица или индекс могут повредиться. Это может быть обусловлено изменениями в mysql или в наборе обрабатываемых данных. Например, ошибка в сортировке, требуется восстановить таблицу для обновления индексов для символьных столбцов, которые используют параметры сортировки. Так же восстановление таблиц может потребоваться после проверки целостности таблиц коммандами CHECK TABLE , mysqlcheck или mysql_upgrade.

Для восстановления, пересоздания таблиц в случает обновления БД mysql или понижения версии используйте только метод dump-and-reload (создание бэкапа таблицы с последующем восстановлением из него). Таким образом прежде чем обновлять базу mysql или понижать версию БД, необходимо создать дамп базы данных, например используя mysqldump. После обновления или понижения версии восстановить базу из файла дампа. Если Вы используете этот метод только для пересоздания индексов, то дамп и восстановление, можно делать как до так и после обновления или отката версии.

Чтобы пересоздать таблицу использую дамп и восстановление выполните следующие действия:

mysqldump db_name table1 > dump_table.sql

mysql db_name dump.sql

mysql db_name dump.sql

УСЛУГИ

О КОМПАНИИ

Наша компания состоит из команды Linux/Windows администраторов с опытом более 15 лет, DevOps инженеров, специалистов в области информационной безопасности, виртуализации и облачных систем. Занимаемся круглосуточной поддержкой высоконагруженных сайтов и серверов. Выполняем проектирование, построение и поддержку наземных, облачных и гибридных инфраструктур.

Источник

Mysql как отремонтировать таблицу

REPAIR TABLE работает только на таблицах типа MyISAM и эквивалентна выполнению на таблице myisamchk -r table_name .

Читайте также:  Как отремонтировать датчик движения самому

При обыкновенной работе запускать эту команду не приходится, но если случится катастрофа, то с помощью REPAIR TABLE практически наверняка удастся вернуть все данные из таблицы MyISAM . Если таблицы сильно повреждены, то следует постараться выяснить, что послужило этому причиной! Обращайтесь к разделам Раздел A.4.1, «Что делать, если работа MySQL сопровождается постоянными сбоями» и See Раздел 7.1.3, «Проблемы с таблицами MyISAM .».

REPAIR TABLE ремонтирует таблицу, которая, возможно, повреждена. Команда возвращает таблицу со следующими столбцами:

Столбец Значение
Table Имя таблицы
Op Всегда «repair»
Msg_type Одно из значений status , error , info или warning .
Msg_text Само сообщение.

Заметим, что по каждой ремонтируемой таблице может быть выдано много строк информации. Последняя строка будет представлять Msg_type status и, как правило, должна содержать OK . Если выдается что-либо отличное от OK , то следует попробовать исправить таблицу с помощью myisamchk -o , поскольку в REPAIR TABLE пока реализованы не все опции myisamchk . В скором будущем мы сделаем команду более гибкой.

Если указан QUICK , то MySQL будет пытаться сделать REPAIR только индексного дерева.

Если используется EXTENDED , то MySQL будет создавать индекс строка за строкой вместо создания по одному индексу единоразово с помощью сортировки; такая техника может работать лучше сортировки для ключей фиксированной длины, если речь идет о хорошо сжимаемых ключах типа CHAR большой длины. Это такой же ремонт, как делается с помощью myisamchk —safe-recover .

Что касается MySQL 4.0.2, то тут для REPAIR существует режим USE_FRM . Используйте его, если отсутствует файл .MYI или поврежден его заголовок. В этом режиме MySQL воссоздаст таблицу, используя информацию из файла .frm . Этот вид исправления в myisamchk недоступен.

Источник

Как восстановить базу MySQL

В данном примере показано восстановление из заранее сделанного dump-файла (с помощью mysqldump). Если нужна инструкция по созданию резервной копии, читайте Как сделать дамп базы MySQL.

Подготовка базы

Подключаемся к командной оболочке mysql:

* данной командой мы подключимся к СУБД под пользователем root. Опция -p потребует ввода пароля.

Для восстановления базы сначала необходимо ее создать:

> CREATE DATABASE db DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

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

> GRANT ALL PRIVILEGES ON db.* TO dbuser@localhost IDENTIFIED BY ‘password’ WITH GRANT OPTION;

Подробнее про создание баз читайте на странице Создание и удаление баз в MySQL/MariaDB.

Из файла через командную строку

Команда выполняется из UNIX-shell:

mysql -v -u root -p db SHOW VARIABLES LIKE ‘max_allowed_packet’;

Чтобы увеличить значение параметра, открываем конфигурационный файл my.cnf:

* в некоторых версиях СУБД конфиг может находится по пути /etc/my.cnf.d/server.cnf.

В разделе [mysqld] редактируем или добавляем:

[mysqld]
.
max_allowed_packet = 512M

* значение для данного параметра не обязательно должно быть таким большим.

systemctl restart mariadb || systemctl restart mysql

Источник