2010-04-20 7 views
1

Если у меня есть база данных MySQL с несколькими таблицами на реальном сервере, теперь я хотел бы перенести эту базу данных на другой сервер. Конечно, миграция, которую я подразумеваю здесь, включает в себя несколько таблиц базы данных, например: добавление нескольких новых столбцов в несколько таблиц, добавление некоторых новых таблиц и т. Д. Теперь единственным способом, который я могу придумать, является использование некоторого php/python (два скрипты, которые я знаю), подключить две базы данных, выгрузить данные из старой базы данных и затем записать в новую базу данных. Однако этот метод неэффективен вообще. Например: в старой базе данных таблица A содержит 28 столбцов; в новой базе данных таблица A содержит 29 столбцов, но дополнительный столбец будет иметь значение по умолчанию 0 для всех старых строк. Мой сценарий по-прежнему должен сбрасывать данные по строкам и вставлять каждую строку в новую базу данных.вопрос о миграции базы данных MySQL

Использование MySQLDump и т. Д. Не будет работать. Вот деталь. Например: у меня есть четыре старые базы данных, я могу назвать их «DB_a», «DB_b», «DB_c», «DB_d». Теперь в старой таблице A есть 28 столбцов, я хочу добавить каждую строку в таблицу A в новую базу данных с новым идентификатором столбца «DB_x» (x, чтобы указать, из какой базы данных он приходит). Если я не могу отличить идентификатор базы данных от содержимого строки, единственный способ идентифицировать их - это пройти через некоторые пользовательские параметры ввода.

Есть ли какие-либо инструменты или лучший способ, чем писать сценарий самостоятельно? Здесь мне не нужно беспокоиться о проблемах с многопоточными письмами и т. Д., Я имею в виду, что старая база данных будет недоступна (не открытая для общего использования и т. Д., Только для обновления).

Спасибо!

ответ

1

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

+0

ну, демпинг данных, а затем изменение схемы здесь не работает. Вся ситуация на самом деле такова: мне нужно объединить текущие 4 базы данных в 1. Я буду изменять свои вопросы более подробно. – WilliamLou

0

Уверены, что есть инструменты, которые помогут вам достичь того, что вы пытаетесь сделать. Mysqldump является главным примером таких инструментов. Просто взгляните сюда: http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html

Что вы можете сделать, это:

1) Вы делаете дамп текущей БД, используя туздЫшпр (с опцией --no-данных) для извлечения только схемы

2) вы изменить схему вы сбрасывали, добавляя новые колонки

3) вы создать новую схему (MySQL < dump.sql - только Google для резервного копирования туздо восстановлением для получения дополнительной справки по синтаксису)

4) Дамп данных с помощью опции туздЫшпр комплектно-вставки (см ссылку выше)

5) Импорт данных, используя MySQL < data.sql

Это должно сделать работу для вас, удачи !

0

Используйте mysqldump, чтобы сбросить данные, затем echo output.txt > msyql. Теперь старые данные находятся на новом сервере. Манипулировать при необходимости.

1

Обычно, когда вы переносите базу данных на новые серверы, вы не применяете множество изменений схемы одновременно, по причинам, с которыми вы работаете в настоящее время.

У MySQL есть инструмент для дампа, называемый mysqldump, который может использоваться для простого моментального снимка/резервного копирования базы данных. Затем снимок можно скопировать на новый сервер и установить.

Вы должны выяснить все изменения, которые были внесены в вашу «новую» базу данных, и выписать скрипт всех команд SQL, необходимых для «обновления» старой базы данных до новой версии, которую вы используете (например, ALTER TABLE a ADD COLUMN x и т. д.). После того, как вы уверены, что он работает, возьмите дамп старого, скопируйте его, установите, а затем примените сценарий изменений.

0

Добавление дополнительных строк может быть сделано на живой базе данных:

ALTER TABLE [table-name] ADD [row-name] MEDIUMINT(8) default 0; 

MySql будет по умолчанию все существующие строки в значение по умолчанию.

Так вот что я хотел бы сделать:

  1. сделать копию вы старую базу данных с MySql dump командой.

  2. запустите полученный файл SQL против новой базы данных, теперь у вас есть точная копия.

  3. напишите файл migration.sql, который изменит вашу базу данных с помощью команд таблицы изменений и для сложных преобразований некоторые временные процедуры MySql.

  4. проверить, что вы сценарий (при сбое, перейдите к (2)).

  5. Если все в порядке, то перейти (1) и перейти жить с вами новая база данных.

0

Все это действительные подходы, но я считаю, что вы хотите написать оператор sql, который записывает другие инструкции вставки, которые поддерживают новые столбцы, которые у вас есть.

Смежные вопросы