Миграция сервера MySQL с одного компьютера на другой - PullRequest
8 голосов
/ 29 марта 2009

Базы данных слишком велики (> 400 МБ), поэтому источник дампа> SCP> работает часами.

Есть ли более простой способ? Могу ли я подключиться к БД напрямую и импортировать с нового сервера?

Ответы [ 9 ]

12 голосов
/ 29 марта 2009

Вы можете просто скопировать всю папку / data.

Взгляните на Высокопроизводительный MySQL - передача больших файлов

6 голосов
/ 29 марта 2009

Использование может использовать ssh для прямой передачи ваших данных через Интернет. Сначала настройте ключи SSH для входа без пароля. Затем попробуйте что-то вроде этого:

$ mysqldump -u db_user -p some_database | gzip | ssh someuser@newserver 'gzip -d | mysql -u db_user --password=db_pass some_database'

Примечания:

  • Основная идея заключается в том, что вы просто выводите стандартный вывод прямо в команду на другой стороне, для которой идеально подходит SSH.
  • Если вам не нужно шифрование, вы можете использовать netcat, но, вероятно, оно того не стоит
  • Текстовые данные SQL передаются по сжатому проводу!
  • Очевидно, измените db_user на пользователя пользователя и some_database на вашу базу данных. someuser - (Linux) системный пользователь , а не пользователь MySQL.
  • Вам также придется использовать --password в долгом пути, потому что при наличии приглашения mysql у вас будет много головной боли.
4 голосов
/ 29 марта 2009

Вы можете настроить репликацию подчиненного MySQL и позволить MySQL копировать данные, а затем сделать подчиненное устройство новым ведущим

2 голосов
/ 30 марта 2009

Если вы мигрируете сервер:

Файлы дампа могут быть очень большими, поэтому лучше сжать их перед отправкой или использовать флаг -C scp. Наша методология передачи файлов заключается в создании полного дампа, в котором инкрементные журналы сбрасываются (используйте --master-data = 2 --flush журналы, пожалуйста, убедитесь, что вы не запутываете никаких подчиненных хостов, если они у вас есть). Затем мы копируем дамп и воспроизводим его. После этого мы снова очищаем логи (mysqladmin flush-logs), берем последний инкрементный журнал (который не должен быть очень большим) и воспроизводим только его. Продолжайте делать это до тех пор, пока последний добавочный журнал не станет очень маленьким, чтобы вы могли остановить базу данных на исходном компьютере, скопировать последний добавочный журнал и затем воспроизвести его - это займет всего несколько минут.

Если вы просто хотите скопировать данные с одного сервера на другой:

mysqldump -C --host=oldhost --user=xxx --database=yyy -p | mysql -C --host=newhost --user=aaa -p

Вам нужно будет правильно настроить пользователей БД и предоставить доступ к внешним хостам.

2 голосов
/ 29 марта 2009

400M на самом деле не большая база данных; передача его на другую машину займет всего несколько минут в сети 100 Мбит. Если у вас нет 100M сетей между вашими компьютерами, у вас большие проблемы!

Если они работают с одной и той же версией MySQL и имеют идентичный (или похожий ENOUGH) файл my.cnf и вам нужна только копия всех данных, можно безопасно скопировать весь каталог данных сервера (в то время как оба экземпляра). остановлены, очевидно). Конечно, сначала вам нужно будет удалить каталог данных целевого компьютера, но вам, вероятно, это не важно.

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

1 голос
/ 29 марта 2009

попробуйте импортировать дамп на новый сервер, используя консоль mysql, а не знакомое ПО

0 голосов
/ 11 декабря 2013

Мне нравится использовать BigDump: Staggered Mysql Dump Importer после экспорта моей базы данных со старого сервера.

http://www.ozerov.de/bigdump/

Следует отметить одну вещь: если вы не установите параметры экспорта (а именно, максимальную длину создаваемых запросов) в соответствии с нагрузкой, которую может обработать ваш новый сервер, он просто потерпит неудачу, и вам придется повторить попытку с разные параметры. Лично я установил около 25 000, но это только я. Протестируйте его немного, и вы освоите его.

0 голосов
/ 29 марта 2009

Если вы копируете только все базы данных сервера, скопируйте весь каталог /data.

Если вы просто копируете одну или несколько баз данных и добавляете их на существующий сервер MySQL:

  1. создать пустую базу данных на новом сервере, настроить разрешения для пользователей и т. Д.
  2. скопировать папку для базы данных в /data/databasename на новый сервер /data/databasename
0 голосов
/ 29 марта 2009

У меня нет опыта работы с MySQL, но мне кажется, что узким местом является передача фактических данных?

4oo MB не , что много. Но если dump -> SCP работает медленно, я не думаю, что подключение к серверу БД из поля удаления будет быстрее?

Я бы предложил выгрузить, сжать, затем скопировать по сети или записать на диск и передать данные вручную. Сжатие такого дампа, скорее всего, даст вам довольно хорошую степень сжатия, так как, скорее всего, есть много повторяющихся данных.

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