Миграция данных в Managed Service for MySQL

Чтобы перенести вашу базу данных в сервис Managed Service for MySQL, нужно непосредственно перенести данные, закрыть старую базу данных на запись и перенести нагрузку на кластер БД в Яндекс.Облаке.

Перенести данные в кластер Managed Service for MySQL можно с помощью утилит mysqldump и mysql: создайте дамп рабочей базы и восстановите его в нужном кластере.

Перед тем, как переносить данные, проверьте, совпадают ли версии СУБД у существующей базы данных и вашего кластера в Облаке. Так как дамп логический и представляет собой набор SQL-запросов, то перенос данных между кластерами с различными версиями возможен, но не гарантируется. Более подробно об этом см. в MySQL 5.7 FAQ Migration.

Ниже сервер СУБД, с которого вы переносите данные, называется сервер-источник, а кластер Managed Service for MySQL, на который вы мигрируете — сервер-приемник.

Этапы миграции:

  1. Создайте дамп переносимой базы.
  2. При необходимости создайте виртуальную машину в Яндекс.Облаке и загрузите данные на нее.
  3. Создайте кластер Managed Service for MySQL.
  4. Восстановите данные из дампа.

Создание дампа

Создать дамп базы данных следует с помощью утилиты mysqldump, которая подробно описана в документации MySQL.

  1. Перед созданием дампа рекомендуется переключить базу в режим только чтение, чтобы не потерять данные, которые бы появились во время создания дампа. Сам дамп базы данных создайте следующей командой:

    $ mysqldump -h <адрес сервера-источника> \
                --user=<имя пользователя> \
                --password \
                --port=<порт> \
                --set-gtid-purged=OFF \
                --quick
                --single-transaction <имя базы данных> \
                > ~/db_dump.sql
    

    Если сервер-источник использует таблицы InnoDB, используйте опцию --single-transaction для гарантированной консистентности данных. Для таблиц MyISAM эта опция не имеет смысла, так как транзакции не поддерживаются. Также стоит иметь в виду следующие флаги:

    • --events — если в вашей базе есть периодические события;
    • --routines — если в вашей базе есть функции и хранимые процедуры.
  2. Упакуйте дамп в архив:

    $ tar -cvzf db_dump.tar.gz ~/db_dump.sql
    

(опционально) Создание виртуальной машины в Облаке и загрузка дампа

Переносить данные на промежуточную виртуальную машину в Yandex Compute Cloud нужно, если:

  • К вашему кластеру Managed Service for MySQL нет доступа из интернета.
  • Ваше оборудование или соединение с кластером в Облаке недостаточно надежны.

Нужное количество оперативной памяти и ядер процессора зависит от объема переносимых данных и требуемой скорости переноса.

Чтобы подготовить виртуальную машину для восстановления дампа:

  1. В консоли управление создайте новую виртуальную машину из образа Ubuntu 18.04. Параметры виртуальной машины должны зависеть от размера базы, которую Вы хотите перенести. Минимальной конфигурации (1 ядро, 2 ГБ RAM, 10 ГБ дискового пространства) должно хватить для переносы базы до 1 ГБ. Чем больше переносимая база, тем больше должно быть дискового пространства (как минимум в два раза больше, чем размер базы), и больше размер оперативной памяти.

    Виртуальная машина должна находиться в той же сети и зоне доступности, что хост-мастер кластера MySQL. Кроме того, виртуальной машине должен быть присвоен внешний IP-адрес, чтобы вы могли загрузить дамп извне Облака.

  2. Установите клиент MySQL и дополнительные утилиты для работы с СУБД. Для Debian/Ubuntu утилиты mysqldump и mysql поставляются в пакете mysql-client, его установка:

    $ sudo apt-get install mysql-client
    
  3. Перенесите дамп базы данных на виртуальную машину, например, используя утилиту scp:

    scp ~/db_dump.tar.gz <имя пользователя ВМ>@<публичный адрес ВМ>:/tmp/db_dump.tar.gz
    
  4. Распакуйте дамп:

    tar -xzf /tmp/db_dump.tar.gz
    

Создание кластера Managed Service for MySQL

Инструкцию по созданию кластера можно найти в разделе Создание MySQL-кластера.

Восстановление данных

Восстанавливать дамп базы данных следует с помощью утилиты mysql. Чтобы получать больше информации в случае возникновения ошибок, восстановление рекомендуется проводить установив флаг --line-numbers.

  • Если вы восстанавливаете дамп с виртуальной машины в Яндекс.Облаке:

    $ mysql -h <адрес сервера СУБД> \
            --user=<имя пользователя>
            --password \
            --port=3306 \
            --line-numbers <имя базы данных> \
            < /tmp/db_dump.sql
    
  • Если вы восстанавливаете дамп с собственного сервера, необходимо скачать сертификат и задать параметры SSL --ssl-cal и --ssl-mode. Команды для подключения к кластеру и ссылку на сертификат можно найти в консоли управления, по кнопке Подключиться.

    Команда восстановления базы из дампа:

    $ mysql -h <адрес сервера СУБД> --user=<имя пользователя> --password --port=3306 --ssl-ca=~/.mysql/root.crt --ssl-mode=VERIFY_IDENTITY --line-numbers <имя базы данных>  < ~/db_dump.sql