вопрос о переносе базы данных MySQL - PullRequest
1 голос
/ 21 апреля 2010

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

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

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

Спасибо !!

Ответы [ 6 ]

1 голос
/ 21 апреля 2010

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

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

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

1 голос
/ 21 апреля 2010

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

0 голосов
/ 21 апреля 2010

Это все допустимые подходы, но я считаю, что вы хотите написать SQL-оператор, который записывает другие операторы вставки, поддерживающие новые столбцы, которые у вас есть.

0 голосов
/ 21 апреля 2010

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

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

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

Итак, вот что я бы сделал:

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

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

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

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

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

0 голосов
/ 21 апреля 2010

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

0 голосов
/ 21 апреля 2010

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

Что вы могли бы сделать:

1) Вы создаете дамп текущей базы данных, используя mysqldump (с параметром --no-data), чтобы получить только схему

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

3) Вы создаете новую схему (mysql MySQL резервного копирования для получения дополнительной информации о синтаксисе)

4) Создайте дамп данных с помощью опции полной вставки mysqldump (см. Ссылку выше)

5) Импортируйте ваши данные, используя mysql Это должно сделать работу за вас, удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...