Как правильно смежить таблицы одной бд? Полетели текушие , форуп пхпбб!

M
На сайте с 20.08.2004
Offline
376
892

Вообщем есть проблема.

Сегодня несколько полетела бд форума.

Что случилось я понять не могу, знаю что исчезли как минимум пару пользователей (причем подчистую) и нескоко тем (аналогично)...

(это то что я только заметил) Оследить остальные изменения и проблемы, к сожалению не могу, потому как в большом море информации трудно все запомнить. Но увеврен что на этом прболемы не закончатся.

Вообщем есть дампы несколько дневной давностию.. Так вот, как ГРАМОТНО смержить старую базу в новую, и не возникнет ли других каких-то проблем?

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

Проблема критичная и не требует отлагательств.

Спасибо.

отец сыночка, лапочки дочки и еще одного сыночка
A
На сайте с 10.10.2007
Offline
25
#1

Можно взять дампы текущей базы и бэкапной и сравнить diff'ом

diff -uP old.sql curr.sql > lost+found.sql

дальше изучать lost+found.sql, утерянные сообщения и пользователи должны найтись под минусами

экспериментировать лучше на тестовой базе

------ это не завуалирование предложение себя в качестве эксперта. это мнение. Поведение в споре должно быть простым: (с) Стили спора (http://www.jvanetsky.ru/data/text/t7/stili_spora/?print=1) М.М.Ж.
M
На сайте с 20.08.2004
Offline
376
#2

спасибо , разобрался.

решил проблему по другому.

кстати, дифом при таки объемах базы как у меня не советую пользоваться, да и я задолбался бы сравнивать :)

noHup
На сайте с 19.06.2006
Offline
87
#3
Miracle:
решил проблему по другому.

Поделитесь идей, как :) Мне вот, к примеру, интересно ☝

SmartApe - хостинг по цене бананов (http://www.smartape.ru/?utm_source=se&utm_medium=cpm&utm_campaign=noHup)
Lupus
На сайте с 02.11.2002
Offline
241
#4

Как вариант: если есть уникальные индексы на таблицах, влить через INSERT IGNORE.

There are two types of people in this world: 1. Those who can extrapolate from incomplete data.
K
На сайте с 12.07.2006
Offline
295
Kpd
#5
noHup:
Поделитесь идей, как Мне вот, к примеру, интересно

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

noHup
На сайте с 19.06.2006
Offline
87
#6
Kpd:
Например, создать новую базу, залить в неё старый дамп, поверх него залить новый дамп (естественно, без удаления/создания таблиц), проверить получившийся коктейль и если всё ок - перелить в рабочую базу.

это то понятно, я то думал, может чо нить поумнее придумали 😎

M
На сайте с 20.08.2004
Offline
376
#7

подошел к вопросу несколько проще, с одной стороны...

если полетели пользователи и их данные, то проще всего сделать следующее

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

- экспортировать эти данные

- импортировать

что бы понять смысл

select * from phpbb_users where username ='USER_NAME';

select * from phpbb_favorites where user_id = 3586;

select * from phpbb_medal_user where user_id = 3586;

select * from phpbb_posts where poster_id = 3586;

select * from phpbb_posts_text where post_id in (select post_id from phpbb_posts where poster_id = 3586);

select * from phpbb_privmsgs where privmsgs_from_userid = 3586 || privmsgs_to_userid = 3586;

select * from phpbb_privmsgs_text where privmsgs_text_id in (select privmsgs_id from phpbb_privmsgs where privmsgs_from_userid = 3586 || privmsgs_to_userid = 3586);

select * from phpbb_topics where topic_poster = 3586;

select * from phpbb_topics_watch where user_id = 3586;

select * from phpbb_user_group where user_id = 3586;

select * from phpbb_users where user_id = 3586;

select * from phpbb_vote_voters where vote_user_id = 3586;

а вот и экспорт данных

create table _favorites select * from phpbb_favorites where user_id = 3586;

create table _medal_use select * from phpbb_medal_user where user_id = 3586;

create table _posts select * from phpbb_posts where poster_id = 3586;

create table _posts_text select * from phpbb_posts_text where post_id in (select post_id from phpbb_posts where poster_id = 3586);

create table _privmsgs select * from phpbb_privmsgs where privmsgs_from_userid = 3586 || privmsgs_to_userid = 3586;

create table _privmsgs_text select * from phpbb_privmsgs_text where privmsgs_text_id in (select privmsgs_id from phpbb_privmsgs where privmsgs_from_userid = 3586 || privmsgs_to_userid = 3586);

create table _topics select * from phpbb_topics where topic_poster = 3586;

create table _topics_watch select * from phpbb_topics_watch where user_id = 3586;

create table _user_group select * from phpbb_user_group where user_id = 3586;

create table _users select * from phpbb_users where user_id = 3586;

create table _vote_voters select * from phpbb_vote_voters where vote_user_id = 3586;

если пользователей много, все делается через переменную или просто через ИЛИ :)

мне помогло, надеюсь кому-то тоже...

не стал рисковать и мержить все , сильно опастно было.

A
На сайте с 10.10.2007
Offline
25
#8
Miracle:

кстати, дифом при таки объемах базы как у меня не советую пользоваться, да и я задолбался бы сравнивать :)

Да, на быстро растущей базе плохой способ. Лучше тогда на будущее включить bin-log и потом отслеживать утерянные изменения по нему.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий