Перейти к контенту

IPB database integrity


Рекомендуемые сообщения

Вообще говоря в порядочных базах данных положено поддерживать целостность данных. Я конечно понимаю, внешние ключи немного геморно. Триггера и хранимые процедуры мы не умеем (мускул точнее). Однако у меня тут пару раз сервер падал в очень неподходящие моменты в результате чего пропадали посты, темы и даже целые разделы. Восстанавливается все элементарно, мне вот интересно, кому-нибудь будет интересен скрипт проверки целостности базы, ну т.е. на утраченные связи и т.п. или только у меня такие проблемы?
Ссылка на комментарий
Поделиться на других сайтах

гм.. только у тебя имхо.

копай в сторону хостера.

на сорсах база огромная но падает очень редко. Очень редко бывает что слетает индекс.

Причём база очень востребована, долбит её куча запросов из разных скриптов.

Ссылка на комментарий
Поделиться на других сайтах

Не, падает не база, а сервер. А в результате в таблицах пропавшие строчки. Не часто бывает, что строчки пропадают, но бывает. Да и вообще, мало ли мусора может быть в базе без поддержки целостности ссылок :D
Ссылка на комментарий
Поделиться на других сайтах

У меня на компе сервер... При отключении электричества база глючит.

Вот сейчас висит на форуме 6 юзеров "онлайн" с датой онлайна - январь 2031 года. Так и будут висеть, пока снова не зайдут (или до 2031-го..)

А со временем реальным все ок вроде бы..

 

Что сбилось, понять не могу ((

Ссылка на комментарий
Поделиться на других сайтах

d1pro

хм.. очень даже интересно :D

то есть ты хочешь использовать несколко основнх таблиц, которые в основе свей задествованы на форуме и искать выпадающие ключи? или скрипт будет за точку отсчета брать одну таблицу и бежать по базе ища дырки?(честно говоря этот вариант я мало представляю себе потому что в базе не все таблици связаны возмем например ipb_faq? вроде бы ни с чем она не связана, хотя за точку отсчета можно взять ibf_posts, от этой таблици можно найти путь до любой другой)

в общем очень интере6сен алгортм поиска ;)

Ссылка на комментарий
Поделиться на других сайтах

-SAT-

Не, проверяться будут только связанные таблицы. А алгоритм крайне прост. Вот например поиск потерянных постов:

SELECT DISTINCT p.topic_id FROM ibf_posts p LEFT JOIN ibf_topics t ON (p.topic_id=t.tid) WHERE t.tid IS NULL

Ну и т.д. Просто хочу чтобы это дело автоматом делалось и автоматом восстанавливались потерянные строки.

Ссылка на комментарий
Поделиться на других сайтах

d1pro

:D) весьма полезный скрипт, а у меня была идея сегодня на счет создания таблицы индексов и потом по этой таблице проверять целостность ;) геморно но все же :)

 

кстати, а может стандартный insert бликировать и складывать в очередь что бы не бились таблицы?

INSERT DELAYED

понимаю тормазить будет нормально, но все же...

Ссылка на комментарий
Поделиться на других сайтах

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

это из "области сам не знаю о чем пишу"?

Покурим маны? http://dev.mysql.com/doc/refman/4.1/en/tra...l-commands.html

 

4-ка уже не редкость...

Ссылка на комментарий
Поделиться на других сайтах

это из "области сам не знаю о чем пишу"?

 

неа :D как раз по этому поводу консультировался, как это было уже реализовано, и какие проблеммы при этом возникают когда происходит восстановление талицы

Ссылка на комментарий
Поделиться на других сайтах

таблица индексов ведется самим MySQL...

 

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

 

для поддержки целостности уже давно придуман механизм транзакций.

Ссылка на комментарий
Поделиться на других сайтах

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

 

именно это и имелось ввиду, просто другой идеи небыло как бежать по всей базе скриптом...

Ссылка на комментарий
Поделиться на других сайтах

Если не ошибаюсь, то транзакция это определенная последовательность команд, переводящих базу данных из одного неконфликтного состояния в другое неконфликтное. Могу и ошибаться :D
Ссылка на комментарий
Поделиться на других сайтах

повторю вопрос - вы знаете что такое транзакции?

 

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

 

ЗЫ: а что??

 

START TRANSACTION;
SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
UPDATE table2 SET summary=@A WHERE type=1;
COMMIT;

именно вот этого синтаксиса не знал, спасибо :D

Ссылка на комментарий
Поделиться на других сайтах

Не, не cron. Просто пройтись по базе и посмотреть, чего там у нас потерялось. У меня и лишние строки от удаленных пользователей были (в смежных таблицах) и исчезнувшие темы (посты есть, а темы нет) и т.п. Чтоб быстро можно было просканить на весь этот мусор и убрать/восстановить.
Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.