SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 15.07.2008 17:50:43

Fader
Завсегдатай
Зарегистрирован: 07.05.2008
Сообщений: 54

Объединение MySQL-инстансов

Есть 2 инстанса одного и того же java-приложения и по базе для каждого соответственно.

Возникла необходимость из двух сделать одно. С приложением все понятно.

А вот с базой? Как правильно одну базу залить в другую? Чтобы не напороться на дупликейты, конфликты ID'шников и т.п.?

По хорошему нужно писать скрипт для миграции, но скиллов для этого еще мало...

Неактивен

 

#2 15.07.2008 18:18:39

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Объединение MySQL-инстансов

Нужно писать скрипт для миграции.

С id можно обойтись просто - добавить ко всем id одной базы какое-нибудь большое число.
Например, миллион. И дальше тупо скопировать данные. Но только у Вас наверняка появятся
строки с одинаковыми другими значениями. Их хорошо бы вычистить.

Неактивен

 

#3 16.07.2008 11:26:41

Fader
Завсегдатай
Зарегистрирован: 07.05.2008
Сообщений: 54

Re: Объединение MySQL-инстансов

А нельзя ли поподробнее насчет самого скрипта? Ни разу не писал ничего подобного и с командами SQL знаком поверхносно. Всегда хватало ГУЯ.

Неактивен

 

#4 16.07.2008 20:20:26

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Объединение MySQL-инстансов

Ну, тут нужно сесть и подумать, что Вы хотите получить. Скорее всего, у Вас есть
несколько табличек, которые связаны по ID, вот некоторые ID будут дублироваться
между базами - их нужно будет ставить другие. Соответственно, во всех остальных
табличках, где эти ID используются, надо ставить новые значения.

Универсального скрипта, разумеется, нету, т.к. для этого надо знать, что же реально
хранится в таблицах.

Неактивен

 

#5 17.07.2008 00:26:25

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 845

Re: Объединение MySQL-инстансов

Вы примерно напишите, какая алгоритмизация должна быть.
Если самостоятельно не получается - структуру базы нам сюда в виде SHOW CREATE TABLE для таблиц.
А со скриптами поможем.

Неактивен

 

#6 17.07.2008 11:35:35

Fader
Завсегдатай
Зарегистрирован: 07.05.2008
Сообщений: 54

Re: Объединение MySQL-инстансов

Вот структура обеих баз:
ftp://filearea.ru/sql_nodata/
login: anonymous@filearea.ru


выложил обе т.к. они чуть-чуть отличаются

Что касается алгоритма, в итоге нужно получить единую базу на InnoDB, UTF-8. Вобщем за эталон взять базу BUILD и в нее перегнать все данные с табличек базы MEASUREMENT2

Отредактированно Fader (17.07.2008 16:47:11)

Неактивен

 

#7 23.07.2008 11:39:30

Fader
Завсегдатай
Зарегистрирован: 07.05.2008
Сообщений: 54

Re: Объединение MySQL-инстансов

хм... весьма сложная задача?

Неактивен

 

#8 23.07.2008 13:31:29

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Объединение MySQL-инстансов

Вы хотите, чтобы кто-то из нас написал за Вас этот сценарий. Я думаю, что просто ни у кого
нету достаточного количества свободного времени sad

Неактивен

 

#9 23.07.2008 16:56:01

Fader
Завсегдатай
Зарегистрирован: 07.05.2008
Сообщений: 54

Re: Объединение MySQL-инстансов

Мне хотябы черновик увидеть: как это должно выглядеть. До релиза скрипт я уже сам доведу.

Неактивен

 

#10 23.07.2008 18:30:18

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Объединение MySQL-инстансов

Как-то так wink
(подразумевается, что в b есть ссылки на элементы a)

Код:

#! /usr/bin/perl

use strict;
use DBI;

my $src = DBI->connect (...);
my $dst = DBI->connect (...);

my $a = $src->selectall_arrayref ("SELECT * FROM a", { Slice => {} });
foreach my $arow (@$a) {
  my $b = $src->selectall_arrayref ("SELECT * FROM b WHERE aref = $arow->{id}");

  $dst->do ("INSERT INTO a VALUES ($arow->{id}, ...)");
  my $id = $dbh->{'mysql_insertid'};

  foreach my $brow (@$b) {
    $dst->do ("INSERT INTO b VALUES ($id, $b->{...}, ...)");
  }
}

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson