Соединение двух БД в одну

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Ответить
alex4php
Сообщения: 33
Зарегистрирован: 2011.11.05, 22:58

Соединение двух БД в одну

Сообщение alex4php »

Добрый вечер.

Возникла необходимость соеденить две БД MySQL с одинаковой структурой таблиц в одну.
Как это можно сделать? Как избежать проблем с внешними ключами, которые могут повторятся?

Имел ли кто подобный опыт?
esche
Сообщения: 1054
Зарегистрирован: 2010.11.24, 03:39

Re: Соединение двух БД в одну

Сообщение esche »

Префиксами?
Если нет - при соединении обрабатывать все повторяющиеся данные (не забывать про связанные данные)
...
alex4php
Сообщения: 33
Зарегистрирован: 2011.11.05, 22:58

Re: Соединение двух БД в одну

Сообщение alex4php »

А как быть с первичными ключами - ведь они будут повторяться у одинаковых таблиц? Префикс для них не подойдет...или?
TM123
Сообщения: 608
Зарегистрирован: 2011.06.09, 11:18

Re: Соединение двух БД в одну

Сообщение TM123 »

Принципиально соединить можно только очень просты базы, как только у вас появятся автоинтременты, внешние ключи, триггеры и хранимые функции - такие базы будет соединить невозможно, т.к. логику все указанных механизмов придется класть на то средство что обеспечивает связь, а на PHP это оооооооооочччччччччееееееееенннннннннннььььььььь сложно, не считая тех ограничений в программировании что вам придется на себя наложить. Любые действия с базой только через PHP который обеспечивает связь.
PixoiD
Сообщения: 111
Зарегистрирован: 2009.09.25, 10:14

Re: Соединение двух БД в одну

Сообщение PixoiD »

Я пользуюсь http://spiderformysql.com/ кластеризация и маштабируемость в полне оправдывает себя.
Сила аргументов, аргументы силы!
alex4php
Сообщения: 33
Зарегистрирован: 2011.11.05, 22:58

Re: Соединение двух БД в одну

Сообщение alex4php »

TM123 писал(а):Принципиально соединить можно только очень просты базы, как только у вас появятся автоинтременты, внешние ключи, триггеры и хранимые функции - такие базы будет соединить невозможно, т.к. логику все указанных механизмов придется класть на то средство что обеспечивает связь, а на PHP это оооооооооочччччччччееееееееенннннннннннььььььььь сложно, не считая тех ограничений в программировании что вам придется на себя наложить. Любые действия с базой только через PHP который обеспечивает связь.
Тогда что уж говорить про базу, которая содержит 72 таблицы и сотни тысяч записей )))
esche
Сообщения: 1054
Зарегистрирован: 2010.11.24, 03:39

Re: Соединение двух БД в одну

Сообщение esche »

alex4php писал(а):А как быть с первичными ключами - ведь они будут повторяться у одинаковых таблиц? Префикс для них не подойдет...или?
Если речь о соединении двух БД в одну (в смысле хранить две базы в одной без объединения данных - можно для всех таблиц одной из баз установить префиксы и физически работать как с разными базами. т.е. a.table и a.pfx_table)

Если речь об объединении данных двух БД (т.е. перенос записей так, что записи из таблиц a.table и b.table будут лежать в одной таблице) - достаточно исключить конфликт ключей. самый простой способ - к ID-шникам (первичным и вторичным ключам.. думаю, по структуре их отследить не сложно) всех таблиц одной из баз добавить 100500 (подставить нужный) - чтоб минимальный ключ второй базы был больше максимального ключа второй базы (см поля автоинкремента - они подскажут нужную разницу) Возможно, пересечений не так много (или вообще нет) и можно просто слить их "потаблично"

Если же речь о том, что базы останется две, но ID-шники не должны пересекаться...
...
alex4php
Сообщения: 33
Зарегистрирован: 2011.11.05, 22:58

Re: Соединение двух БД в одну

Сообщение alex4php »

Если речь об объединении данных двух БД (т.е. перенос записей так, что записи из таблиц a.table и b.table будут лежать в одной таблице) - достаточно исключить конфликт ключей. самый простой способ - к ID-шникам (первичным и вторичным ключам.. думаю, по структуре их отследить не сложно) всех таблиц одной из баз добавить 100500 (подставить нужный) - чтоб минимальный ключ второй базы был больше максимального ключа второй базы (см поля автоинкремента - они подскажут нужную разницу) Возможно, пересечений не так много (или вообще нет) и можно просто слить их "потаблично"
Речь именно об этом. Чтобы было более понятно - речь идет о объединении данных 2х игровых серверов в один.
Про ID понял. Насчет пересечений - почти все 72 таблицы связаны друг с другом )
Возможно ли еще в таком случае избежать нарушения этих связей?
esche
Сообщения: 1054
Зарегистрирован: 2010.11.24, 03:39

Re: Соединение двух БД в одну

Сообщение esche »

пересечения - имел ввиду одинаковые ID-шники в одинаковых таблицах разных баз. Не совсем корректно выразился))
Связи сохранить несложно -

Код: Выделить всё

SET FOREIGN_KEY_CHECKS = 0;
update table1 set id = id+100500; 
update table2 set id=id+100500,id_table1=id_table1+100500;
...

SET FOREIGN_KEY_CHECKS = 1;
Ещё можно всё это дело обрамить в

Код: Выделить всё

ALTER TABLE table1,table2... DISABLE KEYS; 
ALTER TABLE table1,table2... ENABLE KEYS;
 
Я бы до боевой базы попрактиковался на кошках... главное не пропустить какие-нибудь FK-ID-шники..(свеженький бэкап, в любом случае, уже сделан ;) и будет сделан перед обновляшкой - ;))

Ну и, если редиректы нужны (сео-всякое :)) - не забыть..
...
alex4php
Сообщения: 33
Зарегистрирован: 2011.11.05, 22:58

Re: Соединение двух БД в одну

Сообщение alex4php »

Спасибо, буду терзать кошек ))
Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: Соединение двух БД в одну

Сообщение Ekstazi »

Я имел, проблем не заметил. Скрипт считывает с одной бд те данные что нужны и построчно создает их в рабочей БД (сперва родители, потом потомки).
Ответить