Rate this post

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

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

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

mysqldump db_name table1 > dump_table.sql

mysql db_name < dump_teble.sql

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

 

mysqldump db_name > dump.sql

mysql db_name < dump.sql

Для восстановления всех таблиц во всех базах данных mysql используйте опцию —all-databases

 

mysqldump —all-databases > dump.sql

mysql < dump.sql

Для пересоздания таблицы с помощью команды ALTER TABLE не изменяйте механизм хранения, используйте тот, что уже имеется, например lдля MyIsam:

ALTER TABLE table1 ENGINE = MyISAM

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

SHOW CREATE TABLE для отображения параметров таблицы.

Если необходимо пересоздать таблицу, поскольку проверка таблицы выдала сообщение о том, что таблица повреждена используйте команду: REPAIR TABLE, только если данный тип хранения таблицы поддерживает эту операцию. Например MyISAM поддерживает, поэтому выполняем:

REPAIR TABLE table1

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

mysqlcheck —repair — предоставляет возможность восстановления таблиц аналогично REPAIR TABLE, только данное выражение удобнее так как можно использовать опции  —databases или —all-databases для починки сразу всех таблиц в конкретных базах данных и во всех базах данных mysql соответственно:

mysqlcheck —repair —databases db_name1 db_name2 …

mysqlcheck —repair —all-databases 

В MySQL 5.1.24 присутствует ошибка Bug #27877  utf8_general_ci and ucs2_general_ci кодировки (сотрировки), он был исправлен в версии MySQL 5.1.62, 5.5.21 и 5.6.5. Установите любую из версий с исправлением, затем конвертируйте таблицы используя один из следующих методов:

  • Измените кодировку (сортировку) на utf8_general_mysql500_ci и ucs2_general_mysql500_ci, что соответствует  utf8_general_ci and ucs2_general_ci в версии MySQL 5.1.24

    Для преобразования таблиц пострадавших после обновления измените настройки используя новые значения параметра сортировки. Предположим таблица содержит один или несколько проблемных столбцов utf8. Для преобразования таких таблиц используйте команду:

    ALTER TABLE table1 CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_mysql500_ci;

    Для применения изменений для столбцов используйте такуюже команду только без COLLATE:

    ALTER TABLE table1 MODIFY c1 CHAR(N) CHARACTER SET utf8 COLLATE utf8_general_mysql500_ci;

  • Для обновления с помощью процедуры дампа и восстановления. Создайте файл дампа, измените в нем кодировку для выражений CREATE TABLE, это можно сделать авто заменой, затем восстановите из фала дампа.

После проделанных исправлений CHECK TABLE не должна выдавать ошибок.

Если у Вас проблемы с Базой данных mysqlи Вы не можете их решить, обращайтесь к нам (контакты), мы с радостью Вам поможем.