форум vBSupport.ru > vBulletin > vBulletin 3.8.x > Вопросы по vBulletin 3.8
Register Меню vBsupport Изображения Files Manager О рекламе Today's Posts Search
  • Родная гавань
  • Блок РКН снят
  • Premoderation
  • For English speaking users
  • Каталог Фрилансеров
  • If you want to buy some product or script
  • Администраторам
VBsupport перешел с домена .ORG на родной .RU Ура! Пожалуйста, обновите свои закладки - VBsupport.ru
Блок РКН снят, форум доступен на всей территории России, включая новые терртории, без VPN
На форуме введена премодерация ВСЕХ новых пользователей

Почта с временных сервисов, типа mailinator.com, gawab.com и/или прочих, которые предоставляют временный почтовый ящик без регистрации и/или почтовый ящик для рассылки спама, отслеживается и блокируется, а так же заносится в спам-блок форума, аккаунты удаляются
for English speaking users:
You may be surprised with restriction of access to the attachments of the forum. The reason is the recent change in vbsupport.org strategy:

- users with reputation < 10 belong to "simple_users" users' group
- if your reputation > 10 then administrator (kerk, Luvilla) can decide to move you into an "improved" group, but only manually

Main idea is to increase motivation of community members to share their ideas and willingness to support to each other. You may write an article for the subject where you are good enough, you may answer questions, you may share vbulletin.com/org content with vbsupport.org users, receiving "thanks" equal your reputation points. We should not only consume, we should produce something.

- you may:
* increase your reputation (doing something useful for another members of community) and being improved
* purchase temporary access to the improved category:
10 $ for 3 months. - this group can download attachments, reputation/posts do not matter.
20 $ for 3 months. - this group can download attachments, reputation/posts do not matter + adds eliminated + Inbox capacity increased + files manager increased permissions.

Please contact kerk or Luvilla regarding payments.

Important!:
- if your reputation will become less then 0, you will be moved into "simple_users" users' group automatically.*
*for temporary groups (pre-paid for 3 months) reputation/posts do not matter.
Уважаемые пользователи!

На форуме открыт новый раздел "Каталог фрилансеров"

и отдельный раздел для платных заказов "Куплю/Закажу"

Если вы хотите приобрести какой то скрипт/продукт/хак из каталогов перечисленных ниже:
Каталог модулей/хаков
Ещё раз обращаем Ваше внимание: всё, что Вы скачиваете и устанавливаете на свой форум, Вы устанавливаете исключительно на свой страх и риск.
Сообщество vBSupport'а физически не в состоянии проверять все стили, хаки и нули, выкладываемые пользователями.
Помните: безопасность Вашего проекта - Ваша забота.
Убедительная просьба: при обнаружении уязвимостей или сомнительных кодов обязательно отписывайтесь в теме хака/стиля
Спасибо за понимание
 
 
 
 
Advantech
Простоузер
Default Нарушена целостность БД. Что делать в подобной ситуации?
0

Добрый день!

Форум 3.8.7. Работает, но есть проблема - нарушена целостность базы данных.

Краткая предыстория.
Не смог зайти на форум под админом, проверил таблицу базы юзеров, не нашёл там админской записи. Пропала. Начал трясти хостинг-провайдера, подняли мне последний бэкап, там админская запись была на месте, восстановил, успокоился. Через некоторое время стали поступать жалобы от пользователей, что не могут залогиниться. Стал проверять, оказалось, что было удалено или пропало много пользователей, учитывая то, что автоудаление на форуме отключено. Ещё через некоторое время обнаружилось, что у некоторых пользователей утеряна взаимосвязь с постами. Т.к. юзер существует, его посты существуют, но связи нет. Статус юзера в постах отображается как удалённый или незарегистрированный, соответственно, у пользователя в статистике ноль тем и сообщений. Из-за того, что пользователей и сообщений на форуме было много, проблема обнаружилась не сразу. Подозреваю, что у хостера были проблемы с целостностью данных, но он об этом умолчал, т.к. другой версии потери данных нет. Сейчас форум продолжает работу, регятся пользователи, создают сообщения. Т.к. база накоплена приличная, перезапускать форум с нуля как-то неохота, но при этом остаётся ощущение, что форум теперь нездоровый, где-то что-то не в порядке, а где - непонятно. Соответственно, вопрос - как жить дальше? Что можно или нужно предпринять в данной ситуации?

В частности, но не ограничиваясь:

1. Возможно ли как-то проверить целостность самой базы данных, что все таблицы и поля на месте?
2. Для чего нужен пункт в админке - Обслуживание - Восстановить/оптимизировать таблицы? Для чего или после чего необходимо восстановление таблиц и поможет ли это мне в чём-нибудь?
3. Имеет ли смысл вручную восстанавливать связи пользователей и сообщений? Есть ли какие-то автоматические средства, которые могут восстановить подобные нарушения связей?
4. Можно ли считать, что потеряны только пользовательские данные, а функционал форума не нарушен и продолжить работу, закрыв на эту потерю глаза?

Спасибо!
Bot
Yandex Bot Yandex Bot is online now
 
Join Date: 05.05.2005
Реклама на форуме А что у нас тут интересного? =)
 
 
Luvilla
Гость
Default

@Advantech, интересная ситуация... но не слишком экзотичная
для начала, прямо сейчас попробуйте сделать следующее:
- откройте пару страниц каких-то тем, где есть такие посты - которые как бы от юзеров, но "утеряна взаимосвязь" - просто чтобы видеть результат после выполнение процедуры
- сама процедура: Админка - Обслуживание - Обновление счётчиков
там найдите пункт Восстановить повреждённые профили пользователей и нажмите на кнопочку
это штатная процедура, проходит достаточно быстро
и проверьте, что получилось - в тех темах, которые были заранее открыты

поможет - хорошо, не поможет - будем думать дальше

у меня к Вам ещё будет пара вопросов, потом
 
 
Advantech
Простоузер
Default
1

Luvilla, сделал всё, как Вы написали, кроме этого дополнительно запустил:
- Обновить статусы пользователей (ничего не изменилось);
- Перестроить кэш сообщений (ничего не изменилось);
- Обновить имена пользователей (ничего не изменилось);
- Исправление уникальных индексов (всё индексы исправны);
- Восстановить/оптимизировать таблицы (все таблицы в порядке).

В общем, понял, что придётся шариться в таблицах. Открыл таблицу post, вижу там следующее - для вышеуказанных тем есть поле username - имя пользователя и поле userid - 0 (а должно быть не 0). Хорошо, что в этой таблице есть избыточность данных в виде поля username. Вытащил вручную userid из таблицы user для данного username (select userid from user where username = 'xxx'), сделал update таблицы post и пользователь в теме восстановился (update post set userid = 'yyy' where username = 'xxx';). Модифицировал запрос следующим образом: update post set userid = (select userid from user where username = 'xxx') where username = 'xxx';

Потом сделал select distinct username from post where userid = '0';, вылезло 466 пользователей (из более чем 3000), чьи взаимосвязи с постами утерялись. Насколько мне известно, sql циклы не поддерживает, поэтому придётся вручную запускать запрос для каждого юзера. Программинг-то я уже подзабыл.

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

А какие у Вас ещё были вопросы? ;)
 
 
cyberdaemon
Эксперт
 
cyberdaemon's Avatar
Default
0

Quote:
Originally Posted by Advantech View Post
sql циклы не поддерживает, поэтому придётся вручную запускать запрос для каждого юзера
за то PHP поддерживает, можно написать скрипт и запустить.
 
 
OldEr
Специалист
Master
 
OldEr's Avatar
Default
0

Quote:
Originally Posted by Advantech View Post
Насколько мне известно, sql циклы не поддерживает
Поддерживает, но лучше и правда скрипт написать.
 
 
tays
Эксперт
 
tays's Avatar
Default
1

Quote:
Originally Posted by Advantech View Post
4. Можно ли считать, что потеряны только пользовательские данные, а функционал форума не нарушен и продолжить работу, закрыв на эту потерю глаза?
Нет, конечно нельзя.
Если это какой-то сбой в БД (во что лично мне не очень верится), то вряд ли он избирательно ограничился удалением записей в таблице user и частичным обнулением userid в таблице post.
Но для меня это больше похоже на специальную или случайную порчу. Поэтому, как минимум, хостинг я бы сменил, плюс проверил бы сайт на наличие дор-шелов и прочих атрибутов несанкционированного доступа.
 
 
Luvilla
Гость
Default

Quote:
Originally Posted by eska View Post
Если это какой-то сбой в БД (во что лично мне не очень верится), то вряд ли он избирательно ограничился удалением записей в таблице user и частичным обнулением userid в таблице post.
+ 1!
действительно, очень уж странно

// хотя... не так давно на одном из форумов, за который я "присматриваю", произошёл довольно интересный глюк: был сбой на сервере, что-то у них там весьма серьёзно попортилось, и когда работу восстановили, оказалось, что пропал один раздел (с подразделами и всеми темами).
Но при внимательном рассмотрении оказалось, что "попортилась" запись в одной-единственной ячейке таблицы forum, это легко восстанавливается. Так что не пришлось выколупывать из бекапа все темы и посты

===
Quote:
Originally Posted by Advantech View Post
А какие у Вас ещё были вопросы? ;)
Прошу прощения, немного выпала из жизни... можем продолжить разговор

Судя по описанной ситуации - нет записей в таблице user, а в таблице post нет юзерИДа (то есть, там 0, но это всё равно что нет) - пользователи были удалены, причём вряд ли это какая-то сиквел-инъекция, уж очень "чистенько" всё, так вобле удаляет юзеров штатно, проходится по всем связанным таблицам

Отсюда вопросы... самый первый возник тут:

Quote:
Originally Posted by Advantech View Post
автоудаление на форуме отключено
а оно было когда-то включено? что за "автоудаление"? по каким критериям "автоудаляет"? не могло получиться так, что юзера были именно удалены этим автоудалением?

Ведь сейчас у Вас на руках фактически "гибридная" база: таблицы тем и постов не соответствуют таблице юзеров, раз таблица была поднята из бекапа (кстати, для корректной работы нужно поднимать три таблицы с записями о юзерах)

И второй вопрос (пачка вопросов)): со-администраторы есть? лог действий в админке - смотрели? странностей с собственным аккаунтом - не замечали? (дата последнего визита, например)

Ваши вопросы:
Quote:
Originally Posted by Advantech View Post
1. Возможно ли как-то проверить целостность самой базы данных, что все таблицы и поля на месте?
только формально, на соответствие структуре
если отсутствует/побилась запись внутри ячейки, это никак не ловится
Но при отсутствии чего-то, что нужно движку для работы, будь то таблица или поле в таблице, происходит "ошибка базы данных" и, если администратор вписал куда надо свой е-мейл и не отключил функцию "слать ошибки", уведомление про такие ошибки вобла шлёт очень тщательно

Quote:
Originally Posted by Advantech View Post
2. Для чего нужен пункт в админке - Обслуживание - Восстановить/оптимизировать таблицы? Для чего или после чего необходимо восстановление таблиц и поможет ли это мне в чём-нибудь?
"Восстановить" - она проверяет вот то самое формальное соответствие, если что-то ей не нравится - чинит в меру своего разумения
Отсутствующую таблицу, разумеется, не восстановит, это только вручную
"Оптимизировать" - я бы вообще не рекомендовала трогать... это уже ближе физическим механизмам, чем к движку... да и, в случае с таблицами в InnoDB само понятие "оптимизации" уже бессмысленно

Quote:
Originally Posted by Advantech View Post
3. Имеет ли смысл вручную восстанавливать связи пользователей и сообщений? Есть ли какие-то автоматические средства, которые могут восстановить подобные нарушения связей?
да, имеет
про автоматику - не слышала

Quote:
Originally Posted by Advantech View Post
4. Можно ли считать, что потеряны только пользовательские данные, а функционал форума не нарушен и продолжить работу, закрыв на эту потерю глаза?
а юзера? они готовы закрыть глаза на потерю всего, что нажито непосильным трудом постов, репутации, статусов?
 
 
Advantech
Простоузер
Default
2

@eska, я так и сделал - сменил хостинг. Целостность файлов проверил через встроенные стредсва VB и во время апгрейда. Тут всё в порядке. Схема базы тоже целая. Все основные функции работают, глюков пока не замечено. Будем надеяться, что проблема устранена. Конечно, есть вероятность, что потеряно содержимое самих сообщений, но проверить каждое - это уже нереально.


Luvilla,

Quote:
Originally Posted by Luvilla View Post
что за "автоудаление"
Сейчас точно не могу подсказать, т.к. в последний раз настраивал форум давно. Если не изменяет память, должна быть где-то настройка автоудаления пользователя, если он не входил на форум какое-то время.
В данном случае эта функция не могла сработать, т.к. были удалены активные пользователи. А обнаружена пропажа данных была чисто случайно, потому что был удалён заодно и админ, юзер под номером 1, который, к тому же, прописан в config.php как неудаляемый

Quote:
Originally Posted by Luvilla View Post
таблицы тем и постов не соответствуют таблице юзеров
На этапе восстановления данных столкнулся со следующей проблемой - имена некоторых удалённых юзеров были заняты вновь зарегистрировавшимися юзерами. В случае автоматического восстановления связей можно было бы по ошибке не тем юзерам присвоить сообщения. Обнаружилось это не сразу и тоже случайно при ручной проверке (такой вариант изначально не был мной учтён в плане восстановления). В связи с чем в каждом случае принималось индивидуальное решение - какого юзера оставить - старого или нового. Ситуация упростилась тем, что многие такие юзеры не имели сообщений или давно не посещали форум. Удалённые юзеры восстанавливались простым insert-ом, взятым из дампа SQL. Это не считаеся корректным восстановлением, потому что в профиле юзера через админку пустота, чтобы юзер окончательно восстановился, необходимо после insert-а в админке запустить восстановление повреждённых профилей, после чего юзер реанимируется полноценно со всеми данными в анкете. Единственное, кажись не восстановились аватары. Далее для восстановления связей используются два запроса - один для восстановления связи юзера с темами, другой - с постами:

PHP Code:
update thread set postuserid = (select userid from user where binary username 'xxx'where binary postusername 'xxx' and postuserid '0';
update post set userid = (select userid from user where binary username 'xxx'where binary username 'xxx' and userid '0'
Quote:
Originally Posted by Luvilla View Post
со-администраторы есть? лог действий в админке - смотрели? странностей с собственным аккаунтом - не замечали?
Со-администраторов нет, логи не смотрел, да и не сообразил как-то сразу. Странностей с аккаунтом не замечал, но замечал много странностей с хостингом. В частности, часто приходили ошибки доступа к БД. Во время перезда обнаружил множество левых файлов на аккаунте - например, папка, в ней 32 тысячи html-файлов с разным seo-мусором. Похоже, что сервак хостинга взламывали или порутили. В общем, очень кривой хостинг оказался. Что удивительно - после переезда на другой хостинг увеличилась посещаемость.

Quote:
Originally Posted by Luvilla View Post
а юзера? они готовы закрыть глаза на потерю
Дело в том, что авария призошла несколько лет назад. С тех пор форум жил самостоятельной вялотекущей жизнью, т.к. не было смысла вкладываться в развитие проекта из-за боязни опять потерять данные, пока не сменится хостинг. Теперь, наконец, дошли руки. Будем надеяться, что дела пойдут в гору.


На данный момент почти все пользователи и их связи восстановлены, форум был проапгрейжен до 3.8.9. Работает в штатном режиме. Посмотрим, что будет дальше
Большое всем спасибо за помощь, подсказки и поддержку!

Advantech добавил 06.01.2016 в 19:18
binary в запросе необходим чтобы различать регистр в имени пользователя.

Last edited by Advantech : 01-06-2016 at 08:18 PM. Reason: Добавлено сообщение
 


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off




All times are GMT +4. The time now is 03:21 AM.


Powered by vBulletin® Version Kerk Edition
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.