Миграция данных в Managed Service for MySQL
Чтобы перенести вашу базу данных в сервис Managed Service for MySQL, нужно непосредственно перенести данные, закрыть старую базу данных на запись и перенести нагрузку на кластер БД в Yandex.Cloud.
Перенести данные в кластер Managed Service for MySQL можно с помощью утилит mysqldump
и mysql
: создайте дамп рабочей базы и восстановите его в нужном кластере.
Перед тем, как переносить данные, проверьте, совпадают ли версии СУБД у существующей базы данных и вашего кластера в Yandex.Cloud. Так как дамп логический и представляет собой набор SQL-запросов, то перенос данных между кластерами с различными версиями возможен, но не гарантируется. Более подробно об этом см. в MySQL 5.7 FAQ Migration.
Ниже сервер СУБД, с которого вы переносите данные, называется сервер-источник, а кластер Managed Service for MySQL, на который вы мигрируете — сервер-приемник.
Этапы миграции:
- Создайте дамп переносимой базы.
- При необходимости создайте виртуальную машину в Yandex.Cloud и загрузите данные на нее.
- Создайте кластер Managed Service for MySQL.
- Восстановите данные из дампа.
Создание дампа
Создать дамп базы данных следует с помощью утилиты mysqldump
, которая подробно описана в документации MySQL.
-
Перед созданием дампа рекомендуется переключить базу в режим
только чтение
, чтобы не потерять данные, которые бы появились во время создания дампа. Сам дамп базы данных создайте следующей командой:$ mysqldump -h <адрес сервера-источника> \ --user=<имя пользователя> \ --password \ --port=<порт> \ --set-gtid-purged=OFF \ --quick \ --single-transaction <имя базы данных> \ > ~/db_dump.sql
Если сервер-источник использует таблицы InnoDB, используйте опцию
--single-transaction
для гарантированной консистентности данных. Для таблиц MyISAM эта опция не имеет смысла, так как транзакции не поддерживаются. Также стоит иметь в виду следующие флаги:--events
— если в вашей базе есть периодические события;--routines
— если в вашей базе есть функции и хранимые процедуры.
Примечание
Если в вашем дампе содержатся таблицы MyISAM, то их необходимо преобразовать в таблицы InnoDB следующей командой:
$ sed -i 's/ENGINE=MyISAM/ENGINE=InnoDB/' ~/db_dump.sql
-
Упакуйте дамп в архив:
$ tar -cvzf db_dump.tar.gz ~/db_dump.sql
(опционально) Создание виртуальной машины в Yandex.Cloud и загрузка дампа
Переносить данные на промежуточную виртуальную машину в Yandex Compute Cloud нужно, если:
- К вашему кластеру Managed Service for MySQL нет доступа из интернета.
- Ваше оборудование или соединение с кластером в Yandex.Cloud недостаточно надежны.
Нужное количество оперативной памяти и ядер процессора зависит от объема переносимых данных и требуемой скорости переноса.
Чтобы подготовить виртуальную машину для восстановления дампа:
-
В консоли управление создайте новую виртуальную машину из образа Ubuntu 18.04. Параметры виртуальной машины должны зависеть от размера базы, которую Вы хотите перенести. Минимальной конфигурации (1 ядро, 2 ГБ RAM, 10 ГБ дискового пространства) должно хватить для переносы базы до 1 ГБ. Чем больше переносимая база, тем больше должно быть дискового пространства (как минимум в два раза больше, чем размер базы), и больше размер оперативной памяти.
Виртуальная машина должна находиться в той же сети и зоне доступности, что хост-мастер кластера MySQL. Кроме того, виртуальной машине должен быть присвоен внешний IP-адрес, чтобы вы могли загрузить дамп извне Yandex.Cloud.
-
Установите клиент MySQL и дополнительные утилиты для работы с СУБД. Для Debian/Ubuntu утилиты
mysqldump
иmysql
поставляются в пакетеmysql-client
, его установка:$ sudo apt-get install mysql-client
-
Перенесите дамп базы данных на виртуальную машину, например, используя утилиту
scp
:scp ~/db_dump.tar.gz <имя пользователя ВМ>@<публичный адрес ВМ>:/tmp/db_dump.tar.gz
-
Распакуйте дамп:
tar -xzf /tmp/db_dump.tar.gz
Создание кластера Managed Service for MySQL
Инструкцию по созданию кластера можно найти в разделе Создание MySQL-кластера.
Восстановление данных
Восстанавливать дамп базы данных следует с помощью утилиты mysql. Чтобы получать больше информации в случае возникновения ошибок, восстановление рекомендуется проводить установив флаг --line-numbers
.
Внимание
Для кластера Managed Service for MySQL по умолчанию включен AUTOCOMMIT. Не отключайте AUTOCOMMIT в рамках клиентской сессии при восстановлении базы данных из дампа, иначе возможно переполнение хранилища хоста и нарушение работы кластера.
-
Если вы восстанавливаете дамп с виртуальной машины в Yandex.Cloud:
$ mysql -h <FQDN хоста MySQL> \ --user=<имя пользователя> \ --password \ --port=3306 \ --line-numbers <имя базы данных> \ < /tmp/db_dump.sql
Пример команды с заполненным FQDN хоста вы можете посмотреть в консоли управления, нажав на кнопку Подключиться на странице кластера.
-
Если вы восстанавливаете дамп с собственного сервера, необходимо скачать сертификат и задать параметры SSL
--ssl-ca
и--ssl-mode
.Команда восстановления базы из дампа:
$ mysql -h <FQDN хоста MySQL> \ --user=<имя пользователя> \ --password \ --port=3306 \ --ssl-ca=~/.mysql/root.crt \ --ssl-mode=VERIFY_IDENTITY \ --line-numbers <имя базы данных> \ < ~/db_dump.sql
Пример команды с заполненным FQDN хоста вы можете посмотреть в консоли управления, нажав на кнопку Подключиться на странице кластера.