VBsupport перешел с домена .ORG на родной .RU
Ура!
Пожалуйста, обновите свои закладки - VBsupport.ru
Блок РКН снят, форум доступен на всей территории России, включая новые терртории, без VPN
На форуме введена премодерация ВСЕХ новых пользователей
Почта с временных сервисов, типа mailinator.com, gawab.com и/или прочих, которые предоставляют временный почтовый ящик без регистрации и/или почтовый ящик для рассылки спама, отслеживается и блокируется, а так же заносится в спам-блок форума, аккаунты удаляются
Если вы хотите приобрести какой то скрипт/продукт/хак из каталогов перечисленных ниже: Каталог модулей/хаков
Ещё раз обращаем Ваше внимание: всё, что Вы скачиваете и устанавливаете на свой форум, Вы устанавливаете исключительно на свой страх и риск.
Сообщество vBSupport'а физически не в состоянии проверять все стили, хаки и нули, выкладываемые пользователями.
Помните: безопасность Вашего проекта - Ваша забота. Убедительная просьба: при обнаружении уязвимостей или сомнительных кодов обязательно отписывайтесь в теме хака/стиля
Спасибо за понимание
Сегодня пришлось повозиться.
Один юзер удалил свои сообщения, соответственно потерлись и все топики (со всеми сообщениями и аттачами) где он был топикстартером. (как это произошло отдельная история - тут ее обсуждать нет смысла).
Хватились не сразу. Прошло уже более недели, т.е. откат просто на недельной давности бекап был уже неприемлем.
Пришлось поизвращаться.
Выясняем ID пользователя.
Работаем напрямую с MySQL.
Разворачиваем во вторую базу бекап.
В нее в отдельные таблицы копируем нужные данные.
PHP Code:
CREATE TABLE Back_DB.vvv_access SELECT * FROM Back_DB.vb3_access WHERE userid=USER_ID; CREATE TABLE Back_DB.vvv_album SELECT * FROM Back_DB.vb3_album WHERE userid=USER_ID; CREATE TABLE Back_DB.vvv_attachment SELECT * FROM Back_DB.vb3_attachment WHERE userid=USER_ID; CREATE TABLE Back_DB.vvv_customavatar SELECT * FROM Back_DB.vb3_customavatar WHERE userid=USER_ID; CREATE TABLE Back_DB.vvv_customprofilepic SELECT * FROM Back_DB.vb3_customprofilepic WHERE userid=USER_ID; CREATE TABLE Back_DB.vvv_forumread SELECT * FROM Back_DB.vb3_forumread WHERE userid=USER_ID; CREATE TABLE Back_DB.vvv_infraction SELECT * FROM Back_DB.vb3_infraction WHERE userid=USER_ID; CREATE TABLE Back_DB.vvv_moderator SELECT * FROM Back_DB.vb3_moderator WHERE userid=USER_ID; CREATE TABLE Back_DB.vvv_passwordhistory SELECT * FROM Back_DB.vb3_passwordhistory WHERE userid=USER_ID; CREATE TABLE Back_DB.vvv_paymentinfo SELECT * FROM Back_DB.vb3_paymentinfo WHERE userid=USER_ID; CREATE TABLE Back_DB.vvv_picture SELECT * FROM Back_DB.vb3_picture WHERE userid=USER_ID; CREATE TABLE Back_DB.vvv_pm SELECT * FROM Back_DB.vb3_pm WHERE userid=USER_ID; CREATE TABLE Back_DB.vvv_pmreceipt SELECT * FROM Back_DB.vb3_pmreceipt WHERE userid=USER_ID; CREATE TABLE Back_DB.vvv_post SELECT * FROM Back_DB.vb3_post WHERE userid=USER_ID; CREATE TABLE Back_DB.vvv_postedithistory SELECT * FROM Back_DB.vb3_postedithistory WHERE userid=USER_ID; CREATE TABLE Back_DB.vvv_posthash SELECT * FROM Back_DB.vb3_posthash WHERE userid=USER_ID; CREATE TABLE Back_DB.vvv_visitormessage SELECT * FROM Back_DB.vb3_visitormessage WHERE userid=USER_ID; CREATE TABLE Back_DB.vvv_visitormessage_hash SELECT * FROM Back_DB.vb3_visitormessage_hash WHERE userid=USER_ID; CREATE TABLE Back_DB.vvv_reputation SELECT * FROM Back_DB.vb3_reputation WHERE userid=USER_ID; CREATE TABLE Back_DB.vvv_sigparsed SELECT * FROM Back_DB.vb3_sigparsed WHERE userid=USER_ID; CREATE TABLE Back_DB.vvv_thread SELECT * FROM Back_DB.vb3_thread WHERE postuserid=USER_ID; CREATE TABLE Back_DB.vvv_user SELECT * FROM Back_DB.vb3_user WHERE userid=USER_ID; CREATE TABLE Back_DB.vvv_useractivation SELECT * FROM Back_DB.vb3_useractivation WHERE userid=USER_ID; CREATE TABLE Back_DB.vvv_userlist SELECT * FROM Back_DB.vb3_userlist WHERE userid=USER_ID; INSERT IGNORE INTO Back_DB.vvv_post SELECT * FROM Back_DB.vb3_post WHERE threadid IN (SELECT threadid FROM Back_DB.vb3_thread WHERE postuserid=USER_ID)
И далее вставляем эти данные в нашу актуальную БД.
PHP Code:
INSERT IGNORE INTO Actual_DB.vb3_access SELECT * FROM Back_DB.vvv_access; INSERT IGNORE INTO Actual_DB.vb3_album SELECT * FROM Back_DB.vvv_album; INSERT IGNORE INTO Actual_DB.vb3_attachment SELECT * FROM Back_DB.vvv_attachment; INSERT IGNORE INTO Actual_DB.vb3_customavatar SELECT * FROM Back_DB.vvv_customavatar; INSERT IGNORE INTO Actual_DB.vb3_customprofilepic SELECT * FROM Back_DB.vvv_customprofilepic; INSERT IGNORE INTO Actual_DB.vb3_forumread SELECT * FROM Back_DB.vvv_forumread; INSERT IGNORE INTO Actual_DB.vb3_infraction SELECT * FROM Back_DB.vvv_infraction; INSERT IGNORE INTO Actual_DB.vb3_moderator SELECT * FROM Back_DB.vvv_moderator; INSERT IGNORE INTO Actual_DB.vb3_passwordhistory SELECT * FROM Back_DB.vvv_passwordhistory; INSERT IGNORE INTO Actual_DB.vb3_paymentinfo SELECT * FROM Back_DB.vvv_paymentinfo; INSERT IGNORE INTO Actual_DB.vb3_picture SELECT * FROM Back_DB.vvv_picture; INSERT IGNORE INTO Actual_DB.vb3_pm SELECT * FROM Back_DB.vvv_pm; INSERT IGNORE INTO Actual_DB.vb3_pmreceipt SELECT * FROM Back_DB.vvv_pmreceipt; INSERT IGNORE INTO Actual_DB.vb3_post SELECT * FROM Back_DB.vvv_post; INSERT IGNORE INTO Actual_DB.vb3_postedithistory SELECT * FROM Back_DB.vvv_postedithistory; INSERT IGNORE INTO Actual_DB.vb3_posthash SELECT * FROM Back_DB.vvv_posthash; INSERT IGNORE INTO Actual_DB.vb3_visitormessage SELECT * FROM Back_DB.vvv_visitormessage; INSERT IGNORE INTO Actual_DB.vb3_visitormessage_hash SELECT * FROM Back_DB.vvv_visitormessage_hash; INSERT IGNORE INTO Actual_DB.vb3_reputation SELECT * FROM Back_DB.vvv_reputation; INSERT IGNORE INTO Actual_DB.vb3_sigparsed SELECT * FROM Back_DB.vvv_sigparsed; INSERT IGNORE INTO Actual_DB.vb3_thread SELECT * FROM Back_DB.vvv_thread; INSERT IGNORE INTO Actual_DB.vb3_user SELECT * FROM Back_DB.vvv_user; INSERT IGNORE INTO Actual_DB.vb3_useractivation SELECT * FROM Back_DB.vvv_useractivation; INSERT IGNORE INTO Actual_DB.vb3_userlist SELECT * FROM Back_DB.vvv_userlist;
Запись создана по большому счету не как полный how-to.
Кому надо - тот поймет как сделать.
А так это заметка, чтобы самому в случае подобного уже знать как и что.
PS Огромное спасибо FractalizeR за помощь ;)
UPD
В принципе можно обойтись из без создания промежуточных таблицы в бекапной БД:
PHP Code:
INSERT IGNORE INTO Actual_DB.vb3_access SELECT * FROM Back_DB.vb3_access WHERE userid=USER_ID; .... и так далее...
Если у юзера были полномочия удалять сообщения физически, то в случае отсутствия бэкапа восстановить ничего невозможно по определению - потому что в базе уже нет этих данных.
Если же юзер удалил сообщения "мягко", то для их восстановления вовсе необязательно устраивать такие танцы с бубном - достаточно стандартных средств форума и прав администратора.
@FractalizeR
Знаток
Join Date: Aug 2006
Posts: 82
Версия vB: 4.0.6
Reputation:
Knowing 187
Репутация в разделе: 172
2
Вы пост-то прочитали прежде, чем высказываться?
Quote:
Originally Posted by PGP
Разворачиваем во вторую базу бекап.
Backup-то был, вот только полный откат на него неприемлем. Поэтому имеет смысл развернуть рядом старый backup, вытащить из него только посты удаленного пользователя и перенести их в актуальную базу. Только их.