Как восстановить поломанную таблицу SMF

Автор Шура О, 06 августа 2013, 20:57:28

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Шура О

Здравствуйте.
Проблема аналогична теме http://www.simplemachines.ru/index.php?topic=15528 - регулярно портися  таблица messages.
Версия 2.0.4, MySQL.
Адрес форума: forum.lenizdat.org
Локализация форума windows-1251
Используемая тема оформления: стандартная.

Лечить таблицы я умею; на хостинге даже есть стандартная кнопка. 

Задача: поймать момент падения и автоматически послать сообщение админу, то есть мне (делать это я тоже умею). 

Вопрос: известно ли в принципе, в каком месте (модуле, функции) происходит обрушение, если на экране появляется только надпись " Table '...smf_messages' is marked as crashed and last (automatic?) repair failed"? Никак не могу отловить момент сбоя. :(  Крах происходит где-то раз в месяц, иногда раз в неделю, бывает и подряд через пару дней. А бывает и три месяца все живет.  Иногда эта надпись появляется на фоне загруженной темы, но чаще  вообще на пустом экране, где кроме нее ничего нет. Поставил сторожки во всех функциях, имеющих отношение к сбоям базы - но пока безуспешно; непредсказуемость падений затрудняет отладку сторожей. Форум довольно активный, поэтому от души повозиться с отладкой  не получается - поковыряюсь часок, да и запускаю лечение, чтобы пользователей не слишком раздражать. Узнаю о крахе далеко не сразу, бывает, и через сутки - а хотелось бы в реальном времени.   
Можно, конечно, запустить по крону "пинг" базы каждые пять минут- но это как-то неизящно. Может быть, кому-то известно, где происходит вылет, чтоб там его и перехватить? Если никто не знает, не посоветуете ли, как это можно выяснить по ходу?
Сейчас у меня пишутся в отдельный лог все ошибки, какие форум может распознать - но этого вот "любимого" сбоя пока не было. Сможет ли моя система его отловить, хз;  жду.
Спасибо.

digger®

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

P.S. Принудительные русские логины и windows-1251 это неудачная комбинация.

Шура О

#2
Спасибо, что перенесли мой вопрос в правильное место :) извините, не разобрался сразу.
Цитата: digger® от 07 августа 2013, 00:11:00сменить хостинг на другой
Хостинг менять не буду. Другие в сто раз хуже :) пробовал.

Цитата: digger® от 07 августа 2013, 00:11:00сервер БД на горячую перезагружают, отчего базы бьются
Не думаю, что так уж его (сервер БД) прям перезагружают регулярно. Вы считаете, это единственная возможная причина?  Хотя, конечно, моих знаний тут не хватает. C другой стороны, при гарантированном аптайме 99,9% они имеют право на 45 минут ежемесячно... а на большее число девяток, боюсь, моих денег не хватит. 

Когда был последний по времени сбой, в логе ошибок образовалась такая цепочка сообщений:
1. Ошибка базы данных: Lost connection to MySQL server during query
(несколько записей)
2. Ошибка базы данных: Incorrect key file for table smf_messages.MYI; try to repair
(тоже несколько записей подряд)
3. Ошибка базы данных: Table smf_messages is marked as crashed and should be repaired
(много раз, вперемешку с Incorrect key)
Сообщение "Table smf_messages is marked as crashed and and last (automatic?) repair failed" в лог ошибок не попадает, но на экране вылезает в какой-то момент (я не видел живьем, как оно происходит последовательно во времени, попадал уже на последнюю стадию).

Вероятно, это подтверждает вашу мысль: отвалися сервер, порушилась таблица. Но это только один случай, статистики у меня пока нет - более ранние записи, о предшествующих сбоях, отсутствуют - лог, что ли, автоматом чистился?  А, нет, кажется, параметр $db_error_send не был включен - это оно, да?

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

Цитата: digger® от 07 августа 2013, 00:11:00русские логины и windows-1251 неудачная комбинация

А чем может быть плохо 1251 и русские логины? все работает. (этот форум я принял as is, что дали, то и ем). С другой стороны, если будут проблемы, ну, переведу на utf - вроде бы есть такая кнопка в админке? Но без необходимости не хотелось бы ничего трогать. 

Возвращаясь к сути заданного мной вопроса: из ваших слов получается, что надо сторожить Lost connection, как первопричину краха базы? А я-то пытался ловить как раз последнее сообщение, про Table is...

И заодно уж: не знаете ли стандартных (встроенных или подключаемых) средств, чтобы подавать сигналы при определенных ошибках? А то я самоделок наплодил... может, зря? :))

digger®

Цитата: Шура О от 07 августа 2013, 03:21:28Не думаю, что так уж его (сервер БД) прям перезагружают регулярно. Вы считаете, это единственная возможная причина?
Научите, как можно sql-запросом порушить таблицу.

Цитировать
Хотя, конечно, моих знаний тут не хватает. C другой стороны, при гарантированном аптайме 99,9% они имеют право на 45 минут ежемесячно... а на большее число девяток, боюсь, моих денег не хватит.  Когда был последний по времени сбой, в логе ошибок образовалась такая цепочка сообщений:1. Ошибка базы данных: Lost connection to MySQL server during query (несколько записей)
На сервере БД висят коннекты сотен или тысяч сайтов хостинга. Чтобы его передернуть в холодную, нужно дождаться пока пройдут все запросы из очереди, а это минуты, в которые все сайты не пашут. Если передернуть на горячую, то быстро, но могут побиться таблицы которые обновлялись в этот момент.
Ну или просто, может он виснет периодически :)

Цитата: Шура О от 07 августа 2013, 03:21:28А чем может быть плохо 1251 и русские логины? все работает. (этот форум я принял as is, что дали, то и ем). С другой стороны, если будут проблемы, ну, переведу на utf - вроде бы есть такая кнопка в админке? Но без необходимости не хотелось бы ничего трогать.
С русскими логинами не "может быть", с ними "есть" разные известные косяки.
И php 5.3 закончился, а на php 5.4 вы получите множество разных косяков с cp1251. Лучше уже сейчас начинать думать о конвертировании в юникод.

Шура О

Спасибо.
Понял.

Цитата: digger® от 07 августа 2013, 03:39:25С русскими логинами есть разные известные косяки.

Попробовал поиск по форуму, но  ничего по этой теме не нашел. :(  Может, плохо сформулировал?  Не подскажете, что искать?  или ссылочку, вдруг есть под рукой...