Перенос данных из стороннего кластера MySQL® через создание и восстановление логического дампа
Чтобы перенести данные в кластер Managed Service for MySQL®, создайте логический дамп нужной базы и восстановите его в кластере-приемнике. Это можно сделать двумя способами:
- С помощью утилит
mydumperиmyloader. Дамп базы создается в виде набора файлов в отдельном каталоге. - С помощью утилит
mysqldumpиmysql. Дамп базы создается в виде одного файла.
Этапы миграции:
-
Создайте дамп переносимой базы.
-
(Опционально) Загрузите дамп на промежуточную виртуальную машину в Yandex Cloud.
Переносить данные на промежуточную виртуальную машину в Yandex Compute Cloud нужно, если:
- К вашему кластеру Managed Service for MySQL® нет доступа из интернета.
- Ваше оборудование или соединение с кластером в Yandex Cloud недостаточно надежны.
Чем больше объем переносимых данных и необходимая скорость переноса, тем выше требования к виртуальной машине: числу ядер процессора, оперативной памяти и дисковому пространству.
Если созданные ресурсы вам больше не нужны, удалите их.
Необходимые платные ресурсы
- Кластер Managed Service for MySQL®: выделенные хостам вычислительные ресурсы, объем хранилища и резервных копий (см. тарифы Managed Service for MySQL®).
- Публичные IP-адреса, если для хостов кластера включен публичный доступ (см. тарифы Virtual Private Cloud).
- Виртуальная машина, если она создана для загрузки дампа: использование вычислительных ресурсов, хранилища, публичного IP-адреса и операционной системы (см. тарифы Compute Cloud).
Перед началом работы
Создайте необходимые ресурсы:
-
Создайте кластер-приемник Managed Service for MySQL® любой подходящей конфигурации. При этом:
-
Версия MySQL® должна быть не ниже чем в кластере-источнике.
Перенос данных с повышением мажорной версии MySQL® возможен, но не гарантируется. Подробнее см. в документации MySQL®
.Миграция с понижением версии MySQL® невозможна
. -
Режим SQL должен быть таким же, как и в кластере-источнике.
-
-
(Опционально) Создайте виртуальную машину на базе Ubuntu 20.04 LTS со следующими параметрами:
-
Диски и файловые хранилища → Размер — достаточный для хранения распакованного и нераспакованного дампов.
Рекомендуется использовать объем в два или более раза превышающий суммарный объем дампа и архива с ним.
-
Сетевые настройки:
- Подсеть — выберите подсеть в той же облачной сети, в которой размещен кластер-приемник.
- Публичный IP-адрес — выберите
Автоматическиили один адрес из списка зарезервированных 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-манифестах, будут удалены.
-