Yandex Cloud
  • Сервисы
  • Решения
  • Почему Yandex Cloud
  • Сообщество
  • Тарифы
  • Документация
  • Связаться с нами
Подключиться
Language / Region
Проект Яндекса
© 2023 ООО «Яндекс.Облако»
Yandex Managed Service for PostgreSQL
  • Начало работы
  • Пошаговые инструкции
  • Практические руководства
    • Все сценарии
    • Создание кластера PostgreSQL для 1С
    • Выгрузка базы данных в Yandex Data Proc
    • Анализ производительности и оптимизация
    • Поставка данных в Yandex Managed Service for Apache Kafka® с помощью Yandex Data Transfer
    • Поставка данных в Yandex Managed Service for YDB с помощью Yandex Data Transfer
    • Поставка данных в Yandex Managed Service for Apache Kafka® с помощью Debezium
    • Репликация и миграция
      • Логическая репликация PostgreSQL
      • Миграция базы данных в Managed Service for PostgreSQL
      • Миграция базы данных из Managed Service for PostgreSQL
      • Создание логической реплики Amazon RDS для PostgreSQL в Managed Service for PostgreSQL
      • Миграция базы данных из Yandex Managed Service for PostgreSQL в Yandex Object Storage
      • Асинхронная репликация данных из Yandex Managed Service for PostgreSQL в Yandex Data Streams
  • Концепции
  • Управление доступом
  • Правила тарификации
  • Справочник API
  • История изменений
  • Вопросы и ответы
  • Обучающие курсы
  1. Практические руководства
  2. Репликация и миграция
  3. Миграция базы данных из Managed Service for PostgreSQL

Миграция базы данных из Managed Service for PostgreSQL

Статья создана
Yandex Cloud
  • Перед началом работы
  • Перенесите схему базы данных
  • Настройте пользователя для управления репликацией на кластере-источнике
  • Создайте публикацию на кластере-источнике
  • Создайте подписку на кластере-приемнике
  • Отслеживание процесса миграции
  • Закончите миграцию
  • Удалите созданные ресурсы

Кластер Managed Service for PostgreSQL поддерживает логическую репликацию. Это позволяет мигрировать базы данных встроенными средствами PostgreSQL между разными кластерами PostgreSQL версий 10 и выше. В том числе поддерживается миграция между разными версиями: например, можно перенести базы из PostgreSQL версии 11 в версию 13.

Примечание

Если вы используете кластеры более старых версий, то можно мигрировать базу, создав дамп и затем восстановившись из него.

Этот сценарий использования описывает, как перенести базу данных из сервиса Managed Service for PostgreSQL в другой кластер PostgreSQL с помощью логической репликации.

Чтобы мигрировать базу данных из кластера-источника Managed Service for PostgreSQL в кластер-приемник PostgreSQL:

  1. Перенесите схему базы данных.
  2. Настройте пользователя для управления репликацией на кластере-источнике.
  3. Создайте публикацию на кластере-источнике.
  4. Создайте подписку на кластере-приемнике.
  5. Отслеживайте процесс миграции до его завершения.
  6. Закончите миграцию.

Если созданные ресурсы вам больше не нужны, удалите их.

Перед началом работы

  1. Убедитесь, что все хосты кластера-источника доступны по публичному IP-адресу, чтобы кластер-приемник мог подключаться к источнику. Подробнее см. в разделе Создание PostgreSQL-кластера.

  2. Установите на хосты кластера-приемника клиентские SSL-сертификаты Managed Service for PostgreSQL. Они требуются для успешного подключения к публично доступному кластеру-источнику.

  3. При необходимости настройте межсетевой экран (firewall) и группы безопасности, чтобы можно было подключаться из кластера-приемника к кластеру-источнику, а также к каждому кластеру в отдельности (например, с помощью утилиты psql). Группы безопасности находятся на стадии Preview.

  4. Убедитесь, что с хостов кластера-приемника можно подключиться к хостам кластера-источника.

  5. Убедитесь, что можно подключиться к кластеру-источнику с помощью SSL и к кластеру-приемнику.

  6. Убедитесь, что на кластере-приемнике создана пустая база данных, в которую будет проведена миграция.

  7. Убедитесь, что в кластере-приемнике существует пользователь с полными правами на доступ к этой базе.

Перенесите схему базы данных

Для успешной работы логической репликации необходимо, чтобы и на источнике, и на приемнике была одинаковая схема базы данных. Чтобы перенести схему базы данных:

  1. Сделайте дамп схемы базы данных кластера-источника с помощью утилиты pg_dump:

    pg_dump "host=<FQDN хоста кластера-источника> port=6432 sslmode=verify-full dbname=<имя БД> user=<имя пользователя-владельца БД>" --schema-only --no-privileges --no-subscriptions --no-publications -Fd -f <директория для дампа>
    

    FQDN хоста можно получить со списком хостов в кластере.

  2. При необходимости создайте пользователей с нужными правами на доступ к объектам базы данных на кластере-приемнике.

  3. Восстановите схему базы данных из дампа на кластере-приемнике с помощью утилиты pg_restore:

    pg_restore -Fd -v --single-transaction -s --no-privileges -h <FQDN хоста-мастера кластера-приемника> -U <имя пользователя-владельца БД> -p 5432 -d <имя БД> <директория с дампом>
    

Настройте пользователя для управления репликацией на кластере-источнике

PostgreSQL использует модель «публикация-подписка» при выполнении логической репликации: кластер-приемник подписывается на публикацию кластера-источника, чтобы перенести данные. Чтобы успешно подписаться на публикацию, к кластеру-источнику Managed Service for PostgreSQL нужно обращаться от имени пользователя, которому назначена роль для управления логической репликацией. Чтобы настроить такого пользователя:

  1. Создайте пользователя.
  2. Назначьте роль mdb_replication этому пользователю.
  3. Подключитесь к базе данных, которую нужно мигрировать, от имени владельца базы.
  4. Выдайте созданному пользователю привилегию на выполнение операции SELECT над всеми таблицами базы данных.

После создания подписки подключение к кластеру-источнику со стороны приемника будет осуществляться от имени этого пользователя.

Создайте публикацию на кластере-источнике

  1. Подключитесь к хосту-мастеру и к базе данных, которую нужно мигрировать, от имени владельца базы.

  2. Создайте публикацию, на которую будет подписываться кластер-приемник:

    CREATE PUBLICATION <имя публикации>;
    
  3. Включите в созданную публикацию все таблицы базы данных:

    ALTER PUBLICATION <имя публикации> ADD TABLE <имя таблицы 1>;
    ...
    ALTER PUBLICATION <имя публикации> ADD TABLE <имя таблицы N>;
    

    Примечание

    В кластере Managed Service for PostgreSQL запрещено создание публикации сразу для всех таблиц CREATE PUBLICATION ... FOR ALL TABLES;, т.к. это требует привилегий суперпользователя.

Создайте подписку на кластере-приемнике

  1. Подключитесь к хосту-мастеру и базе данных, в которую нужно выполнить миграцию, от имени суперпользователя (например, postgres).

  2. Создайте подписку на публикацию кластера-источника:

    CREATE SUBSCRIPTION <имя подписки> CONNECTION 'host=<FQDN хоста кластера-источника> port=6432 sslmode=verify-full dbname=<имя БД, которую нужно мигрировать> user=<имя пользователя для управления репликацией> password=<пароль пользователя>' PUBLICATION <имя публикации>;
    

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

Отслеживание процесса миграции

Следите за миграцией с помощью каталога pg_subscription_rel, который показывает статус репликации:

SELECT * FROM pg_subscription_rel;

 srsubid | srrelid | srsubstate | srsublsn
---------+---------+------------+----------
...

Рекомендуется следить за статусом репликации по полю srsubstate этого каталога на кластере-приемнике.

Общий статус репликации на кластере-приемнике можно получить с помощью представления (view) pg_stat_subscription, на источнике — с помощью представления pg_stat_replication.

Закончите миграцию

После завершения процесса репликации:

  1. Запретите запись в смигрированную базу данных на кластере-источнике.

  2. Перенесите последовательности (sequences), если они есть, из кластера-источника на кластер-приемник с помощью утилит pg_dump и psql:

    pg_dump "host=<FQDN хоста-мастера кластера-источника> port=6432 sslmode=verify-full dbname=<имя БД> user=<имя пользователя-владельца БД>" --data-only -t '*.*_seq' > <имя файла с sequences>
    
    psql -h <FQDN хоста-мастера кластера-приемника> -U <имя пользователя-владельца БД> -p 5432 -d <имя БД> < <имя файла с sequences>
    
  3. Удалите подписку на кластере-приемнике:

    DROP SUBSCRIPTION <имя подписки>;
    
  4. Удалите публикацию на кластере-источнике:

    DROP PUBLICATION <имя публикации>;
    
  5. Удалите пользователя для управления репликацией на кластере-источнике.

Удалите созданные ресурсы

Удалите ресурсы, которые вы больше не будете использовать, во избежание списания средств за них:

  • Удалите виртуальную машину.
  • Если вы зарезервировали для виртуальной машины публичный статический IP-адрес, удалите его.
  • Удалите кластер Yandex Managed Service for PostgreSQL.

Была ли статья полезна?

Language / Region
Проект Яндекса
© 2023 ООО «Яндекс.Облако»
В этой статье:
  • Перед началом работы
  • Перенесите схему базы данных
  • Настройте пользователя для управления репликацией на кластере-источнике
  • Создайте публикацию на кластере-источнике
  • Создайте подписку на кластере-приемнике
  • Отслеживание процесса миграции
  • Закончите миграцию
  • Удалите созданные ресурсы