Миграция базы данных из стороннего кластера MySQL® в кластер Yandex Managed Service for MySQL®
Перенести данные из стороннего кластера-источника в кластер-приемник Managed Service for MySQL® можно двумя способами:
-
Перенос данных с использованием сервиса Yandex Data Transfer.
Этот способ прост в настройке, не требует создания промежуточной виртуальной машины и позволяет перенести базу целиком без остановки обслуживания пользователей. Для его использования разрешите подключение к кластеру-источнику из интернета.
Подробнее см. в разделе Какие задачи решает сервис Yandex Data Transfer.
-
Перенос данных через создание и восстановление логического дампа.
Логический дамп — файл с набором команд, последовательное выполнение которых позволяет восстановить состояние базы данных. Чтобы обеспечить полноту логического дампа, перед его созданием кластер-источник следует перевести в режим
только чтение
.Используйте этот способ только в том случае, если перенос данных с помощью Data Transfer по каким-либо причинам невозможен.
Перенос данных с использованием сервиса Data Transfer
Чтобы перенести базу данных из MySQL® в Managed Service for MySQL®:
Если созданные ресурсы вам больше не нужны, удалите их.
Запустите перенос данных
-
Подготовьте инфраструктуру и запустите перенос данных:
ВручнуюTerraform-
Создайте кластер-приемник Managed Service for MySQL® любой подходящей конфигурации. При этом:
-
Версия MySQL® должна быть не ниже, чем в кластере-источнике.
Перенос данных с повышением мажорной версии MySQL® возможен, но не гарантируется. Подробнее см. в документации MySQL®
.Миграция с понижением версии MySQL® невозможна
. -
Режим SQL должен быть таким же, как и в кластере-источнике.
-
-
Создайте эндпоинт для источника:
-
Тип базы данных —
MySQL
. -
Параметры эндпоинта → Настройки подключения —
Пользовательская инсталляция
.Укажите параметры подключения к кластеру-источнику.
-
-
Создайте эндпоинт для приемника:
-
Тип базы данных —
MySQL
. -
Параметры эндпоинта → Настройки подключения —
Кластер Managed Service for MySQL
.Выберите кластер-приемник из списка и укажите настройки подключения к нему.
-
-
Создайте трансфер типа Копирование и репликация, использующий созданные эндпоинты.
-
Активируйте его.
Важно
Избегайте любых изменений в схеме данных в кластере-источнике и кластере-приемнике во время работы трансфера. Подробнее см. в разделе Работа с базами данных во время трансфера.
-
Если у вас еще нет Terraform, установите его.
-
Получите данные для аутентификации. Вы можете добавить их в переменные окружения или указать далее в файле с настройками провайдера.
-
Настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его
. -
Поместите конфигурационный файл в отдельную рабочую директорию и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.
-
Скачайте в ту же рабочую директорию файл конфигурации data-transfer-mysql-mmy.tf
.В этом файле описаны:
- сеть;
- подсеть;
- группа безопасности и правило, необходимое для подключения к кластеру;
- кластер-приемник Managed Service for MySQL®;
- эндпоинт для источника;
- эндпоинт для приемника;
- трансфер.
-
Укажите в файле
data-transfer-mysql-mmy.tf
:-
параметры кластера-приемника, которые используются и как параметры эндпоинта-приемника:
target_mysql_version
— версия MySQL®, она должна быть не ниже чем в кластере-источнике;target_sql_mode
— режим SQL, он должен быть таким же, как и в кластере-источнике;target_db_name
— имя базы данных;target_user
иtarget_password
— имя и пароль пользователя-владельца базы данных.
-
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Создайте необходимую инфраструктуру:
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
.Трансфер активируется автоматически после создания.
-
-
Завершите перенос данных
-
Дождитесь перехода трансфера в статус Реплицируется.
-
Переведите кластер-источник в режим
только чтение
и переключите нагрузку на кластер-приемник. -
На странице мониторинга трансфера дождитесь снижения до нуля характеристики Maximum data transfer delay. Это значит, что в кластер-приемник перенесены все изменения, произошедшие в кластере-источнике после завершения копирования данных.
-
Деактивируйте трансфер и дождитесь его перехода в статус Остановлен.
Подробнее о статусах трансфера см. в разделе Жизненный цикл трансфера.
Удалите созданные ресурсы
Некоторые ресурсы платные. Чтобы за них не списывалась плата, удалите ресурсы, которые вы больше не будете использовать:
- Удалите кластер Managed Service for MySQL®.
- Удалите остановленный трансфер.
- Удалите эндпоинты для источника и приемника.
-
В терминале перейдите в директорию с планом инфраструктуры.
Важно
Убедитесь, что в директории нет Terraform-манифестов с ресурсами, которые вы хотите сохранить. Terraform удаляет все ресурсы, которые были созданы с помощью манифестов в текущей директории.
-
Удалите ресурсы:
-
Выполните команду:
terraform destroy
-
Подтвердите удаление ресурсов и дождитесь завершения операции.
Все ресурсы, которые были описаны в Terraform-манифестах, будут удалены.
-
Реальный пример миграции базы данных MySQL® с помощью сервиса Data Transfer см. в разделе Синхронизация данных из MySQL с помощью Yandex Data Transfer.
Перенос данных через создание и восстановление логического дампа
Чтобы перенести данные в кластер Managed Service for MySQL®, создайте логический дамп нужной базы и восстановите его в кластере-приемнике. Это можно сделать двумя способами:
- С помощью утилит
mydumper
иmyloader
. Дамп базы создается в виде набора файлов в отдельном каталоге. - С помощью утилит
mysqldump
иmysql
. Дамп базы создается в виде одного файла.
Этапы миграции:
-
Создайте дамп переносимой базы.
-
(Опционально) Загрузите дамп на промежуточную виртуальную машину в Yandex Cloud.
Переносить данные на промежуточную виртуальную машину в Yandex Compute Cloud нужно, если:
- К вашему кластеру Managed Service for MySQL® нет доступа из интернета.
- Ваше оборудование или соединение с кластером в Yandex Cloud недостаточно надежны.
Чем больше объем переносимых данных и необходимая скорость переноса, тем выше требования к виртуальной машине: числу ядер процессора, оперативной памяти и дисковому пространству.
Если созданные ресурсы вам больше не нужны, удалите их.
Перед началом работы
Создайте необходимые ресурсы:
-
Создайте кластер-приемник Managed Service for MySQL® любой подходящей конфигурации. При этом:
-
Версия MySQL® должна быть не ниже чем в кластере-источнике.
Перенос данных с повышением мажорной версии MySQL® возможен, но не гарантируется. Подробнее см. в документации MySQL®
.Миграция с понижением версии MySQL® невозможна
. -
Режим SQL должен быть таким же, как и в кластере-источнике.
-
-
(Опционально) Создайте виртуальную машину на базе Ubuntu 20.04 LTS со следующими параметрами:
-
Диски и файловые хранилища → Размер — достаточный для хранения распакованного и нераспакованного дампов.
Рекомендуется использовать объем в два или более раза превышающий суммарный объем дампа и архива с ним.
-
Сетевые настройки:
- Подсеть — выберите подсеть в той же облачной сети, в которой размещен кластер-приемник.
- Публичный адрес — выберите
Автоматически
или один адрес из списка зарезервированных IP-адресов.
-
-
Если вы используете группы безопасности для промежуточной виртуальной машины и кластера Managed Service for MySQL®, настройте их.
-
Если у вас еще нет Terraform, установите его.
-
Получите данные для аутентификации. Вы можете добавить их в переменные окружения или указать далее в файле с настройками провайдера.
-
Настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его
. -
Поместите конфигурационный файл в отдельную рабочую директорию и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.
-
Скачайте в ту же рабочую директорию файл конфигурации data-migration-mysql-mmy.tf
.В этом файле описаны:
- сеть;
- подсеть;
- группа безопасности и правило, необходимое для подключения к кластеру;
- кластер Managed Service for MySQL® с публичным доступом из интернета;
- (опционально) виртуальная машина с публичным доступом из интернета.
-
Укажите в файле
data-migration-mysql-mmy.tf
:-
параметры кластера-приемника:
target_mysql_version
— версия MySQL®, она должна быть не ниже чем в кластере-источнике;target_sql_mode
— режим SQL, он должен быть таким же, как и в кластере-источнике;target_db_name
— имя базы данных;target_user
иtarget_password
— имя и пароль пользователя-владельца базы данных.
-
(опционально) параметры виртуальной машины:
vm_image_id
— идентификатор публичного образа с Ubuntu без GPU. Например, для Ubuntu 20.04 LTS.vm_username
иvm_public_key
— логин и абсолютный путь к публичному ключу, которые будут использоваться для доступа к виртуальной машине. По умолчанию в образе Ubuntu 20.04 LTS указанный логин игнорируется, вместо него создается пользователь с логиномubuntu
. Используйте его для подключения к виртуальной машине.
-
-
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Создайте необходимую инфраструктуру:
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
. -
Создание дампа
-
Переключите базу в режим
только чтение
, чтобы не потерять данные, которые могут появиться во время создания дампа. -
Установите утилиту
mysqldump
в кластер-источник, например (для Ubuntu):sudo apt update && sudo apt install mysql-client --yes
-
Создайте дамп базы данных:
mysqldump \ --host=<FQDN_или_IP-адрес> \ --user=<имя_пользователя> \ --password \ --port=<порт> \ --set-gtid-purged=OFF \ --quick \ --single-transaction \ <имя_БД> > ~/db_dump.sql
Где
--host
— FQDN или IP-адрес хоста-мастера в кластере-источнике.При необходимости передайте в команде создания дампа дополнительные параметры:
--events
— если в вашей базе есть периодические события;--routines
— если в вашей базе есть хранимые процедуры и функции.
Для таблиц InnoDB используйте опцию
--single-transaction
: она гарантирует целостность данных. -
В файле дампа исправьте имена движков таблиц на
InnoDB
:sed -i -e 's/MyISAM/InnoDB/g' -e 's/MEMORY/InnoDB/g' db_dump.sql
-
Упакуйте дамп в архив:
tar -cvzf db_dump.tar.gz ~/db_dump.sql
-
Переключите базу в режим
только чтение
, чтобы не потерять данные, которые могут появиться во время создания дампа. -
Создайте директорию для файлов дампа:
mkdir db_dump
-
Установите утилиту
mydumper
в кластер-источник, например (для Ubuntu):sudo apt update && sudo apt install mydumper --yes
-
Создайте дамп базы данных:
mydumper \ --triggers \ --events \ --routines \ --outputdir=db_dump \ --rows=10000000 \ --threads=8 \ --compress \ --database=<имя_БД> \ --user=<имя_пользователя> \ --ask-password \ --host=<FQDN_или_IP-адрес>
Где:
--triggers
— дамп триггеров.--events
— дамп событий.--routines
— дамп хранимых процедур и функций.--outputdir
— директория для файлов дампа.--rows
— количество строк во фрагментах, на которые будут разбиты таблицы. Чем меньше значение, тем больше будет файлов в дампе.--threads
— количество используемых потоков. Рекомендуется использовать значение, равное половине свободных ядер на сервере.--compress
— сжатие выходных файлов.--host
— FQDN или IP-адрес хоста-мастера в кластере-источнике.
-
В файлах дампа исправьте имена движков таблиц на
InnoDB
:sed -i -e 's/MyISAM/InnoDB/g' -e 's/MEMORY/InnoDB/g' `find /db_dump -name '*-schema.sql'`
-
Упакуйте дамп в архив:
tar -cvzf db_dump.tar.gz ~/db_dump
(Опционально) Загрузка дампа на виртуальную машину в Yandex Cloud
-
Подключитесь к промежуточной виртуальной машине по SSH.
-
Скопируйте архив с дампом базы данных на промежуточную виртуальную машину, например, используя утилиту
scp
:scp ~/db_dump.tar.gz <имя_пользователя_ВМ>@<публичный_IP-адрес_ВМ>:~/db_dump.tar.gz
-
Извлеките дамп из архива:
tar -xzf ~/db_dump.tar.gz
Восстановление данных
Внимание
Для кластера Managed Service for MySQL® по умолчанию включен AUTOCOMMIT
Этот способ подходит, если вы создали дамп с помощью утилиты mysqldump
.
-
Установите утилиту
mysql
на хост, с которого выполняется восстановление дампа, например (для Ubuntu):sudo apt update && sudo apt install mysql-client --yes
-
Запустите восстановление базы из дампа:
-
Если вы восстанавливаете дамп с виртуальной машины в Yandex Cloud:
mysql \ --host=c-<идентификатор_кластера-приемника>.rw.mdb.yandexcloud.net \ --user=<имя_пользователя> \ --port=3306 \ <имя_БД> < ~/db_dump.sql
-
Если вы восстанавливаете дамп с хоста, подключающегося к Yandex Cloud из интернета, получите SSL-сертификат и передайте параметры
--ssl-ca
и--ssl-mode
в команде восстановления:mysql \ --host=c-<идентификатор_кластера-приемника>.rw.mdb.yandexcloud.net \ --user=<имя_пользователя> \ --port=3306 \ --ssl-ca=~/.mysql/root.crt \ --ssl-mode=VERIFY_IDENTITY \ <имя_БД> < ~/db_dump.sql
-
Этот способ подходит, если вы создали дамп с помощью утилиты mydumper
и используете для восстановления промежуточную виртуальную машину.
-
Установите утилиту
myloader
на хост, с которого выполняется восстановление дампа, например (для Ubuntu):sudo apt update && sudo apt install mydumper --yes
-
Запустите восстановление базы из дампа:
myloader \ --host=c-<идентификатор_кластера-приемника>.rw.mdb.yandexcloud.net \ --directory=db_dump/ \ --overwrite-tables \ --threads=8 \ --compress-protocol \ --user=<имя_пользователя> \ --ask-password
Идентификатор кластера можно получить со списком кластеров в каталоге.
Удаление созданных ресурсов
Удалите ресурсы, которые вы больше не будете использовать, чтобы за них не списывалась плата:
- Удалите кластер Managed Service for MySQL®.
- Если вы создавали промежуточную виртуальную машину, удалите ее.
- Если вы зарезервировали публичные статические IP-адреса, освободите и удалите их.
-
В терминале перейдите в директорию с планом инфраструктуры.
Важно
Убедитесь, что в директории нет Terraform-манифестов с ресурсами, которые вы хотите сохранить. Terraform удаляет все ресурсы, которые были созданы с помощью манифестов в текущей директории.
-
Удалите ресурсы:
-
Выполните команду:
terraform destroy
-
Подтвердите удаление ресурсов и дождитесь завершения операции.
Все ресурсы, которые были описаны в Terraform-манифестах, будут удалены.
-