У меня есть сервер с очень большой базой данных mysql (160 ГБ). Как легко перенести эту БД на другой сервер?
Ответ 1
Когда вы говорите «переехать на другой сервер», мы предполагаем, что вы хотите переехать на другой сервер с MySQL, а не на другой SQL-сервер (т. е. postrgres или MSSQL).
В общем случае есть два варианта. Перенести каталог /var/lib/mysql на новый сервер как есть или выполнить процесс экспорта и импорта.
Копирование всего каталога mysql означает перенос меньшего количества данных и точную репликацию базы данных с одной машины на другую. Однако версии MySQL должны быть одинаковыми (я полагаю, что теоретически незначительные версии могут меняться, но я бы не стал на это рассчитывать). Вы можете остановить MySQL, распарсить каталог и с помощью «scp» скопировать его на другую машину. Затем распакуйте каталог на другой машине и запустите MySQL. Если вы хотите делать эту копию регулярно, возможно, вам стоит подумать о том, чтобы сделать прямой rsync каталога lib, чтобы последующие запуски команды rsync копировали только различия.
Процесс экспорта/импорта создаст массивный текстовый файл со всеми вашими данными, сохраненными в виде операторов вставки SQL (и с операторами создания таблиц в начале для настройки базы данных). Его можно будет импортировать в другую версию базы данных MySQL, но, опять же, если версии баз данных сильно отличаются, то все может пойти не так. Обычно лучше держать версии MySQL одинаковыми. Основная проблема при выполнении этого способа заключается в том, что при 160 Гб данных, уже имеющихся в вашей базе, дамп будет очень большим, поскольку в нем будут присутствовать дополнительные данные из операторов SQL. Вы можете использовать некоторые из перечисленных выше команд pipe для отправки данных на удаленную машину или вы можете сделать дамп файла (пропустив его через 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
Надеюсь, это поможет объяснить некоторые вопросы. Проверьте команды на странице man, так как у меня нет под рукой базы данных MySQL, чтобы проверить это.
Ответ 2
Имея такую большую базу данных, я бы рекомендовал скопировать datadir MySQL вместо того, чтобы делать дамп:
Отключите службы MySQL на сервере A.
Упакуйте каталог данных MySQL (может быть найден в каталоге /var/lib/mysql), который содержит все данные.
Скопируйте конфигурацию MySQL (может быть найдена в /etc/mysql/my.cnf).
Скопируйте оба файла через SSH/SCP на сервер B.
Извлеките данные, поместите файл конфигурации в те же директории.
(Пере)запустите службы MySQL на сервере B.
Вы можете найти путь к вашей директории данных MySQL в файле конфигурации MySQL (my.cnf).
Имейте в виду, что вы должны использовать одну и ту же версию MySQL на обоих серверах! Если это не так, вам следует экспортировать и импортировать данные с помощью дампов MySQL.
Ответ 3
Базы данных MySQL хранятся очень простым способом:
dir = имена баз данных файлы в dir — это таблицы, индексы и т. д.
Поэтому найдите, где находятся ваши базы данных — возможно, что-то вроде этого:
/var/lib/mysql
Здесь у вас будут все ваши базы данных, а в них — таблицы.
Теперь, когда вы нашли их, остановите MySQL и просто заархивируйте структуру каталогов.
tar -zcf mysqldatabases.tar.gz *.
Теперь у вас есть все материалы MySQL в одном заархивированном файле. Скопируйте его в каталог данных нового сервера и распакуйте/разархивируйте его.
Linux