Миграция данных в Managed PostgreSQL
Вы можете мигрировать данные из стороннего экземпляра PostgreSQL в сервис Managed PostgreSQL.
В этом руководстве рассматривается несколько типов миграции:
Сравнительные характеристики разных типов миграции приведены в таблице.
В руководстве определены следующие термины:
- БД-источник — база данных PostgreSQL, из которой производится миграция данных;
- БД-приемник — база данных Managed PostgreSQL, в которую производится миграция данных.
Таблица доступных типов миграций
Заголовок раздела «Таблица доступных типов миграций»| Критерий | Офлайн-миграция с помощью pg_dump и pg_restore | Офлайн-миграция с помощью pgcopydb | Онлайн-миграция с помощью pgcopydb |
|---|---|---|---|
| Простой сервиса | На все время миграции | На все время миграции | Только на время переключения |
| Надежность инструмента | Инструмент поддерживается разработчиками СУБД | Сторонний инструмент | Сторонний инструмент |
| Сложность настройки | Простая: утилиты поставляются с СУБД | Простая: нужно установить только утилиту pgcopydb | Средняя: требуется настройка сетевой связности и уровня репликации на источнике |
| Привилегии пользователя на источнике | Минимальные: чтение таблиц, последовательностей, использование схем | Минимальные: чтение таблиц, последовательностей, использование схем | Средние: роль REPLICATION, чтение таблиц, последовательностей, использование схем |
| Привилегии на приемнике | Минимальные: подойдет существующий пользователь с ролью OWNER | Минимальные: подойдет существующий пользователь с ролью OWNER | Повышенные: требуется пользователь с ролью OWNER и дополнительной ролью MIGRATOR |
| Скорость миграции | Средняя: требуется последовательно выгрузить дамп, а потом восстановить из него БД | Быстрая: снятие дампа и его восстановление происходит параллельно. Индексы по возможности создаются параллельно | Быстрая: простой сервисов только на время переключения |
| Дополнительное хранилище | Требуется дополнительное место для хранения промежуточного файла дампа | Минимальное: данные сразу же записываются в БД-приемник | Требуется дополнительное место для хранения CDC-файлов |
Перед началом работы
Заголовок раздела «Перед началом работы»Выберите подходящий вам тип миграции.
Создайте кластер-приемник Managed PostgreSQL подходящей вам конфигурации.
Создайте БД-приемник, в которую будут мигрировать данные. При создании БД:
- Укажите такие же расширения, как и в БД-источнике.
- Для владельца БД добавьте роль Migrator с подходящим вам сроком действия роли. Чтобы соблюсти принцип минимальных привилегий, вы можете вручную отвязать роль от пользователя сразу же после завершения миграции.
Для доступа к кластеру вам понадобится устройство, поддерживающее работу с командной строкой. Используйте личный компьютер или создайте промежуточную ВМ в той же сети, где расположен кластер Managed PostgreSQL.
1. Настройте подключение к базам данных
Заголовок раздела «1. Настройте подключение к базам данных»В БД-источнике создайте пользователя с минимальными правами, необходимыми для снятия дампа:
sql CREATE USER dumper WITH PASSWORD '<пароль пользователя>';GRANT CONNECT ON DATABASE source_db TO dumper;GRANT pg_read_all_data TO dumper;В этом примере пользователю выданы права на все объекты. Вы можете выдать точечные права только на те объекты, которые должны быть перенесены в БД-приемник.
Для сети, к которой подключен кластер, добавьте правило файрвола для входящего трафика:
- источник трафика — IP-адрес промежуточного устройства (ВМ или личного компьютера);
- назначение трафика — внешний IP-адрес кластера-приемника;
- протокол и порт —
TCP:5432.
Проверьте подключение с помощью
psqlк БД-источнику и БД-приемнику.Обеспечьте сетевую связность между источником, приемником и промежуточным устройством (ВМ или личным компьютером):
Откройте сетевой доступ к серверу, на котором расположена БД кластера-источника. Стандартный порт для подключения к БД PostgreSQL —
5432.Настройте
pg_hba.conf, например:text host all <имя пользователя для миграции в БД-источнике> <IP-адрес промежуточного устройства>/32 scram-sha-256При необходимости настройте SSL-шифрование для безопасной передачи данных.
2. Мигрируйте данные
Заголовок раздела «2. Мигрируйте данные»Мигрируйте данные в сервис Managed PostgreSQL одним из подходящих вам способов.
2.1. Офлайн с помощью pg_dump и pg_restore
Заголовок раздела «2.1. Офлайн с помощью pg_dump и pg_restore»Во время офлайн-миграции БД-источник будет недоступна на запись.
Остановите рабочую нагрузку на БД-источнике.
Переведите БД-источник в состояние
readOnly:sql ALTER DATABASE <имя БД-источника> SET default_transaction_read_only = true;Снимите дамп БД-источника:
sql pg_dump --exclude-extension='*' --no-owner --no-privileges --no-publications --no-subscriptions -h source_host -p source_port -U dumper -d source_db -Fc -f offline_pg_dump.dumpДля успешного выполнения миграции в этой команде из дампа исключаются все расширения.
Скопируйте файл
offline_pg_dump.dumpна устройство, с которого вы будете подключаться к БД-приемнику.Восстановите дамп в БД-приемник:
sql pg_restore -U <имя пользователя-владельца БД-приемника> -d <имя БД-приемника> --no-owner -h dest_host -p dest_port --no-privileges --no-publications --no-subscriptions --clean --if-exists offline_pg_dump.dumpВыполните команду
ANALYZE;на БД-приемнике для сбора статистики.Переключите рабочую нагрузку на БД-приемник.
2.2. Офлайн с помощью pgcopydb
Заголовок раздела «2.2. Офлайн с помощью pgcopydb»Во время офлайн-миграции БД-источник будет недоступна на запись.
Остановите рабочую нагрузку на БД-источнике.
Переведите БД-источник в состояние
readOnly:sql ALTER DATABASE <имя БД-источника> SET default_transaction_read_only = true;На устройстве, с которого будет запущен процесс миграции, установите следующие переменные окружения:
bash export PGCOPYDB_SOURCE_PGURI=postgres://<имя пользователя в БД-источнике>:<пароль пользователя в БД-источнике>@<IP-адрес сервера-источника>:<порт для подключения к БД-источнику>/<имя БД-источника>bash export PGCOPYDB_TARGET_PGURI=postgres://<имя пользователя-владельца в БД-приемнике>:<пароль пользователя в БД-приемнике>@<IP-адрес сервера-приемника>:<порт для подключения к БД-приемнику>/<имя БД-приемника>Выполните команду клонирования БД на промежуточном устройстве:
sql pgcopydb clone --no-owner --skip-extensions --skip-db-properties --no-role-passwords --drop-if-exists --table-jobs 4 --index-jobs 4Переключите рабочую нагрузку на БД-приемник.
2.3. Онлайн с помощью pgcopydb
Заголовок раздела «2.3. Онлайн с помощью pgcopydb»Во время онлайн миграции БД-источник доступна на чтение и запись на протяжении всего процесса миграции. Простой сервисов будет минимальным — только во время переключения.
Создайте пользователя с нужными для миграции правами на БД-источнике:
sql CREATE USER pgcopydb WITH REPLICATION LOGIN PASSWORD 'password';GRANT CONNECT ON DATABASE demo TO pgcopydb;GRANT pg_read_all_data TO pgcopydb;Внесите изменения в настройки
postgresql.confна источнике:bash wal_level = logicalЧтобы настройки
postgresql.confвступили в силу, перезапустите инстанс PostgreSQL на источнике.На устройстве, с которого будет запущен процесс миграции, установите следующие переменные окружения:
bash export PGCOPYDB_SOURCE_PGURI=postgres://<имя пользователя в БД-источнике>:<пароль пользователя в БД-источнике>@<IP-адрес сервера-источника>:<порт для подключения к БД-источнику>/<имя БД-источника>bash export PGCOPYDB_TARGET_PGURI=postgres://<имя пользователя-владельца в БД-приемнике>:<пароль пользователя в БД-приемнике>@<IP-адрес сервера-приемника>:<порт для подключения к БД-приемнику>/<имя БД-приемника>Запустите процесс репликации БД:
sql pgcopydb clone --follow --no-owner --skip-extensions --skip-db-properties --no-role-passwords --drop-if-existsВ момент переключения на БД-приемник:
Остановите рабочую нагрузку.
Остановите процесс репликации:
bash pgcopydb stream sentinel set endpos --currentЕсли процесс репликации на завершается сразу же, выполните команду на БД-источнике:
bash SELECT pg_logical_emit_message(true, 'pgcopydb', 'stop_signal');Переключите рабочую нагрузку на БД-приемник.
Удалите временные ресурсы:
bash pgcopydb stream cleanup
Удалите платные ресурсы
Заголовок раздела «Удалите платные ресурсы»Ресурсы, созданные в руководстве, тарифицируются. Если вы больше не планируете использовать их:
Удалите промежуточную виртуальную машину, если вы использовали ее.
Удалите кластер Managed PostgreSQL, если вы проходили руководство на тестовых данных, которые вам не нужны.