Миграция базы данных из стороннего кластера MySQL в Managed Service for MySQL
Примечание
Миграция данных в сторонний кластер MySQL описана в статье Миграция базы данных из Managed Service for MySQL в сторонний кластер MySQL.
Перенести данные из стороннего кластера-источника в кластер-приемник Managed Service for MySQL можно двумя способами:
-
Перенос данных с использованием сервиса Yandex Data Transfer.
Этот способ прост в настройке, не требует создания промежуточной виртуальной машины и позволяет перенести базу целиком без остановки обслуживания пользователей. Для его использования разрешите подключение к кластеру-источнику из интернета.
Подробнее см. в разделе Какие задачи решает сервис Yandex Data Transfer.
-
Перенос данных через создание и восстановление логического дампа.
Логический дамп — файл с набором команд, последовательное выполнение которых позволяет восстановить состояние базы данных. Чтобы обеспечить полноту логического дампа, перед его созданием кластер-источник следует перевести в режим
только чтение
.Этот способ используйте только в том случае, если перенос данных с помощью Yandex Data Transfer по каким-либо причинам невозможен.
Перед началом работы
Создайте кластер Managed Service for MySQL любой подходящей конфигурации. При этом:
-
Версия MySQL должна быть не ниже чем на кластере-источнике.
Перенос данных c повышением мажорной версии MySQL возможен, но не гарантируется. Подробнее см. в документации MySQL.
Миграция с понижением версии MySQL невозможна.
-
Режим SQL должен быть таким же, как и на кластере-источнике.
Перенос данных с использованием сервиса Yandex Data Transfer
-
Создайте эндпоинт для источника со следующими параметрами:
-
Тип базы данных —
MySQL
. -
Параметры эндпоинта → Настройки подключения —
Пользовательская инсталляция
.Укажите параметры подключения к кластеру-источнику.
-
-
Создайте эндпоинт для приемника со следующими параметрами:
-
Тип базы данных —
MySQL
. -
Параметры эндпоинта → Настройки подключения —
Кластер MDB
.Укажите идентификатор кластера-приемника.
-
-
Создайте трансфер типа Копировать и реплицировать, использующий созданные эндпоинты.
-
Важно
Избегайте любых изменений в схеме данных в кластере-источнике и кластере-приемнике во время работы трансфера. Подробнее см. в разделе Работа с базами данных во время трансфера.
-
Дождитесь перехода трансфера в статус Реплицируется.
-
Переведите кластер-источник в режим
только чтение
и переключите нагрузку на кластер-приемник. -
На странице мониторинга трансфера дождитесь снижения до нуля характеристики Maximum lag on delivery. Это значит, что на кластер-приемник перенесены все изменения, произошедшие в кластере-источнике после завершения копирования данных.
-
Деактивируйте трансфер и дождитесь его перехода в статус Остановлен.
Подробнее о статусах трансфера см. в разделе Жизненный цикл трансфера.
-
Удалите эндпоинты для источника и приемника.
Реальный пример миграции базы данных MySQL с помощью сервиса Data Transfer см. в разделе Синхронизация данных из MySQL с помощью Yandex Data Transfer.
Перенос данных через создание и восстановление логического дампа
Чтобы перенести данные в кластер Managed Service for MySQL, создайте логический дамп нужной базы и восстановите его в кластере-приемнике. Это можно сделать двумя способами:
- С помощью утилит
mydumper
иmyloader
. Дамп базы создается в виде набора файлов в отдельном каталоге. - С помощью утилит
mysqldump
иmysql
. Дамп базы создается в виде одного файла.
Этапы миграции:
- Создайте дамп переносимой базы.
- При необходимости создайте промежуточную виртуальную машину в Yandex Cloud и загрузите дамп на нее.
- Восстановите данные из дампа.
Если созданные ресурсы вам больше не нужны, удалите их.
Создание дампа
-
Переключите базу в режим
только чтение
, чтобы не потерять данные, которые бы появились во время создания дампа. -
Установите утилиту
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
При необходимости передайте в команде создания дампа дополнительные параметры:
--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=<FDQN или IP-адрес хоста-мастера в кластере-источнике>
Где:
--triggers
— дамп триггеров.--events
— дамп событий.--routines
— дамп хранимых процедур и функций.--outputdir
— директория для файлов дампа.--rows
— количество строк во фрагментах, на которые будут разбиты таблицы. Чем меньше значение, тем больше будет файлов в дампе.--threads
— количество используемых потоков. Рекомендуется использовать значение, равное половине свободных ядер на сервере.--compress
— сжатие выходных файлов.
-
В файлах дампа исправьте имена движков таблиц на
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 и загрузка дампа
Переносить данные на промежуточную виртуальную машину в Yandex Compute Cloud нужно, если:
- К вашему кластеру Managed Service for MySQL нет доступа из интернета.
- Ваше оборудование или соединение с кластером в Yandex Cloud недостаточно надежны.
Нужное количество оперативной памяти, ядер процессора и дискового пространства зависит от объема переносимых данных и требуемой скорости переноса.
Чтобы подготовить виртуальную машину для восстановления дампа:
-
Создайте виртуальную машину на базе Ubuntu Linux 20.04 со следующими параметрами:
-
Диски и файловые хранилища → Размер — достаточный для хранения распакованного и нераспакованого дампов.
Рекомендуется использовать объем в два или более раза превышающий суммарный объем дампа и архива с ним.
-
Сетевые настройки:
- Подсеть — выберите подсеть в той же облачной сети, в которой размещен кластер-приемник.
- Публичный адрес —
Автоматически
или выберите из списка зарезервированных IP-адресов.
-
-
Настройте группы безопасности промежуточной виртуальной машины и кластера Managed Service for MySQL.
-
Скопируйте архив с дампом базы данных на промежуточную виртуальную машину, например, используя утилиту
scp
:scp ~/db_dump.tar.gz <имя пользователя ВМ>@<публичный IP-адрес ВМ>:~/db_dump.tar.gz
-
Извлеките дамп из архива:
tar -xzf ~/db_dump.tar.gz
Восстановление данных
Внимание
Для кластера Managed Service for MySQL по умолчанию включен AUTOCOMMIT. Не отключайте 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
Идентификатор кластера можно получить со списком кластеров в каталоге.
Удаление созданных ресурсов
Если созданные ресурсы вам больше не нужны, удалите их:
- Если вы создавали промежуточную виртуальную машину, удалите ее.
- Если для промежуточной виртуальной машины был зарезервирован публичный статический IP-адрес, освободите и удалите его.