Назад | Перейти на главную страницу

Перенести базу данных MySQL на другой сервер

У меня есть сервер с очень большой базой данных mysql (160 ГБ).

Насколько просто переместить эту БД на другой сервер?

Имея такую ​​большую базу данных, я бы рекомендовал скопировать каталог данных MySQL вместо того, чтобы делать дамп:

  1. Завершите работу служб MySQL на сервере A
  2. Сжать каталог данных MySQL (его можно найти в / var / lib / mysql), который содержит все данные.
  3. Скопируйте конфигурацию MySQL (ее можно найти в /etc/mysql/my.cnf)
  4. Скопируйте оба через SSH / SCP на сервер B
  5. Извлеките данные, поместите файл конфигурации в те же каталоги
  6. (Re) запустить службы MySQL на сервере B

Вы можете найти путь к вашему каталогу данных MySQL в файле конфигурации MySQL (my.cnf).

Имейте в виду, что вам следует использовать одинаковая версия MySQL на обоих серверах! Если нет, вам следует экспортировать и импортировать свои данные с помощью дампов MySQL.

Когда вы говорите «перейти на другой сервер», мы предполагаем, что вы хотите перейти на другой сервер, на котором работает MySQL, а не переходить на другой сервер SQL (например, postrgres или MSSQL).

Есть два основных варианта. Перенести /var/lib/mysql dir на новый сервер как есть или выполните процесс экспорта и импорта.

Копирование всего каталога mysql будет означать меньшее количество передаваемых данных и точную репликацию базы данных с одного компьютера на другой. Однако версии MySQL должны быть одинаковыми (я считаю, что теоретически второстепенные версии могут изменяться, но я бы не стал на это рассчитывать). Вы можете остановить MySQL, настроить каталог и использовать scp чтобы скопировать его на другую машину. Затем распакуйте каталог на другом компьютере и запустите MySQL. Если вы хотите делать эту копию на регулярной основе, вы можете подумать о том, чтобы сделать прямой rsync каталога lib, чтобы при последующих запусках rsync команда копирует только различия.

Выполнение процесса экспорта / импорта создаст массивный текстовый файл со всеми вашими данными, сохраненными в виде операторов вставки SQL (и с операторами создания таблицы в начале для настройки базы данных). Это должно быть импортировано в другую версию базы данных MySQL, но, опять же, если версии базы данных сильно различаются, все может пойти не так. Обычно лучше оставить версии MySQL одинаковыми. Основная проблема, связанная с этим способом, заключается в том, что при 160 ГБ данных уже в вашей базе данных, дамп будет очень большим, так как из операторов SQL появятся дополнительные данные. Вы можете использовать некоторые из перечисленных выше команд конвейера для отправки данных на удаленный компьютер или выгрузить файл (пропустив его через gzip, чтобы сжать его) и пропустить через scp (при условии, что у вас достаточно места на диске).

mysqldump -u<user> -p<password> <database name> | gzip > db_dump.sql.gz

Другой способ, который вы могли бы использовать, - передать команду mysqldump через gzip, затем через netcat (который отправляет ее по сети) другому процессу netcat, запущенному на сервере, который направляет ее туда в gzip и, наконец, в mysql. Это дает преимущество сжатия данных при передаче по сети и не создает временных файлов.

На целевой машине:

nc -l 55555 | gzip -d -c | mysql <database name> -u<user> -p<password>

На исходной машине

mysqldump -u<user> -p<password> <database name> | gzip | nc <ip of target server> 55555

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

Вы можете передать вывод sqldump

mysqldump -uuser -ppassword myDatabase | mysql -hremoteserver -uremoteuser -premoteserver 

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

Базы данных MySQL хранятся очень простым способом:

dir = имена баз данных, файлы в каталоге dir - это таблицы, индексы и т. д.

поэтому найдите, где расположены ваши базы данных - возможно, что-то вроде:

/ var / lib / mysql

Здесь у вас будут все каталоги вашей базы данных, в этих каталогах таблицы.

Теперь, когда вы их нашли, остановите MySQL и просто заархивируйте структуру каталогов tar.

tar -zcf mysqldatabases.tar.gz *

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

С помощью этого синтаксиса можно выполнить дамп и восстановление по сети.

mysqldump db-name | mysql -h remote-server db-name

Не забудьте предотвратить новые записи в базу данных во время этого маневра.