Часто бьются таблицы (errno: 145)

Rishat

Guest
Часто бьются таблицы (errno: 145)

Подскажите пожалуйста - в случае возникновения ошибок с таблицами (Can't open file: 'таблица.MYD'. errno: 145) можно ли как-то создать автоматическое оповещение об этой проблеме? Т.е. если таблица какая-то побилась, чтобы автоматически письмо админу посылалось?

Мне хостер сказал, что это как-то делается. Не подскажете как? Буду благодарен за любые советы.
 

_RVK_

Новичок
Может стоит для начала разобраться отчего они бъются часто?

-~{}~ 31.01.05 11:44:

А когда ты с этим разберешься тебе помогут функции связанные с обработкой ошибок [m]error_log[/m], [m]set_error_handler[/m], [m]restore_error_handler[/m], [m]trigger_error[/m] и отсылки почты [m]mail[/m]
 

Rishat

Guest
Originally posted by _RVK_
Может стоит для начала разобраться отчего они бъются часто?[/size]

А как можно определить отчего они бьются? Мне хостер назвал две причины:
1) неправильный ввод информации в базу (отпадает, т.к. информация однотипная, сайт существует довольно давно, раньше - до переноса сайта на другой сервер - такого не было)
2) очень большая посещаемость (тоже отпадает, т.к. посещаемость небольшая, макс. 300 хостов, 3000 хитов)

Можно ли без определения причины решить эту проблему?
 

_RVK_

Новичок
Rishat
Определить причину глюков В ТВОЁМ коде можешь только ты, или админ, если дело в системе. Конечно можно еще посоветовать REPAIR TABLE но, еще раз повторюсь, здесь нужно искать причину, а не пытаться побороть следствие.
 

si

Administrator
никакой SQL код не должен (не может) приводить в поломке таблицы. Это проблема или самого mysqld или в ОС
 

Cougar

Кошак
Кстати, а ведь и в самом деле интересно - отчего они вообще могут биться? Скажем, была такая ситуация: постоянно рушились индексы... да и описанная выше проблема случалась... Правда, таблицы были огромными - порядка 50 млн. записей.
Есть что почитать по этому поводу?

-~{}~ 31.01.05 11:29:

updated:
FreeBSD 4.9
MySQL 3.23.* (разные версии пробовал).
 

_RVK_

Новичок
никакой SQL код не должен (не может) приводить в поломке таблицы.
Не в тему, просто пример.
допустим id автоинкрементное поле int(32)
INSERT INTO mytable SET id=4294967296

Попробуйте воспользоваться такой таблицей без её удаления/создания
 

Rishat

Guest
Originally posted by si
как можно лечить болезнь без диагноза ?
Под "проблемой" я имел в виду "создание автоматического оповещения о битой таблице".
Я сомневаюсь, что в моем случае можно определить и исправить причину возникновения битых таблиц, потому что скорее всего дело не в моем коде, а что-то на сервере у хостера, который не будет искать причину у себя из-за моего сайта.

Он лучше посоветует как исправить ошибку, вот что сказал он:
В логах такие ошибки не фиксируются. Можно написать
программу на php с вызовом команд mysql

check table <таблицы через запятую>

с установкой времени выполнения этой программы в crontab
и если программа возвращает ошибку, надо чинить побитую таблицу командой mysql

repair table <побитая таблица>

или все то же самое можно (и лучше) написать на shell.
Спасибо за обсуждение этой проблемы.
 

tony2001

TeaM PHPClub
с железом все в порядке?
файловая система проверена?
myisamchk не запускается по крону в тем моменты, когда идет обращение к таблицам?
 

Кром

Новичок
>с железом все в порядке?
>файловая система проверена?

Вряд ли от хостера можно получить объективную информацию по этим вопросам.

>Можно ли без определения причины решить эту проблему?
>как можно лечить болезнь без диагноза ?

У меня на одном хостинге случалась такая ошибка. Ломалась три раза, где то в течении двух лет, одна и таже таблица. Там хранились пользовательские сессии. Таблица небольшая, но очень активно обновляемая.
Я доказывал хостеру, что она ломается когда они делают бекап или перегружают сервер. Они утвержали, что это исключено, так как все службы останавливаются и запускаются как надо, база ключи на диск сбрасывает и т.д. и т.п. А ошибка в самой базе из за моих запросов. Типа множественные UPDATE, REPLACE и INSERT.
Пришлось решать проблему именно без определения причины.
 

_RVK_

Новичок
Rishat
Ну если выяснить причину нет никакой возможности я, мне кажется, дал исчервывающий ответ в первом и втором посте.
 

ONK

Пассивист PHPСluba
Встречался с подобной поломкой таблиц на полностью исправном и стабильном сервере, когда во время исполнения сложного UPDATE заканчивался лимит дискового пространства. Видимо мускул криво обрабатывает такие ситуации.
 
Сверху