Блог об it, программировании и интернет-маркетинге

Делюсь наблюдениями и личным опытом в области программирования и интернет-маркетинга

MySQL ERROR 145 (HY000)

Posted on | November 20, 2013 | No Comments

Если у вас DB function failed with error number 145 или
ERROR 145 (HY000): Table ‘./mydb/mytable’ is marked as crashed and should be repaired
при попытках выполнить запрос на MyISAM таблице в MySQL, то вы по адресу.
Немного теории. MyISAM таблица хранится в трех файлах, tablename.frm с описанием струтуры/формата таблицы, tablename.myd для самих данных и tablename.myi для индексов. Нештатное закрытие таблицы (чаще всего из-за системной ошибки) порой приводит к ошибкам.
Посмотрим что не так с таблицей.

[root@k0r1 ~]# mysqlcheck -c mydb mytable
mydb.mytable
warning : Table is marked as crashed
warning : 2 clients are using or haven't closed the table properly
error : Record at pos: 3347144 is not remove-marked
error : record delete-link-chain corrupted
error : Corrupt

Прогоним более подробную проверку консольной утилитой myisamchk (с указанием директории до файла):
/var/db/mysql/mydb# myisamchk mytable
Checking MyISAM file: mytable
Data records: 1210 Deleted blocks: 1600
myisamchk: warning: Table is marked as crashed
myisamchk: warning: 2 clients are using or haven't closed the table properly
- check file-size
- check record delete-chain
myisamchk: error: Record at pos: 3347144 is not remove-marked
myisamchk: error: record delete-link-chain corrupted
- check key delete-chain
myisamchk: error: Invalid key block position: 143552350688196721 key block size: 1024 file_length: 369664
myisamchk: error: key delete-link-chain corrupted
- check record links
myisamchk: error: Record-count is not ok; is 1233 Should be: 1210
myisamchk: warning: Found 3341600 deleted space. Should be 3341856
myisamchk: warning: Found 4168 key parts. Should be: 4164
MyISAM-table 'mytable' is corrupted
Fix it using switch "-r" or "-o"

Ну раз говорят – значит надо делать. Следуем совету мудрой утилиты и запускаем ее с флагом -r
(note: если у вас очень большая таблица, то для увеличения скорости починки можно добавить флаг –sort_buffer_size=XX, значение в байтах, по умолчанию 2Mb)

/var/db/mysql/mydb]# myisamchk -r mytable
- recovering (with sort) MyISAM-table 'mytable'
Data records: 1210
- Fixing index 1
- Fixing index 2
- Fixing index 3
- Fixing index 4
Data records: 1233

SEO Community Ваау! News2.ru SMI2 Google Bookmarks I.ua Закладки Yandex Ruspace Web-zakladka Zakladok.net delicious БобрДобр.ru Memori.ru rucity.com МоёМесто.ru Mister Wong

Comments