Подготовка к трансферу
Подготовка источника
Источник Apache Kafka®
Создайте учетную запись с ролью ACCESS_ROLE_CONSUMER
на топик-источник.
-
Убедитесь, что настройки сети, в которой размещен кластер, разрешают подключение к нему из интернета с IP-адресов, используемых сервисом Data Transfer.
-
Настройте кластер-источник, чтобы к нему можно было подключиться из интернета.
-
Настройте права доступа для учетной записи на нужный топик.
-
(опционально) Чтобы использовать авторизацию по логину и паролю, настройте SASL-аутентификацию.
Источник AWS CloudTrail
Получите идентификатор ключа и секретный ключ доступа AWS, следуя инструкции AWS.
Подробнее см. в документации Airbyte®.
Источник BigQuery
- Создайте учетную запись Google Cloud.
- Добавьте учетную запись в качестве участника в проект Google Cloud с ролью
BigQuery User
. - Создайте ключ учетной записи Google Cloud.
Подробнее см. в документации Airbyte®.
Источник ClickHouse
- Убедитесь, что переносимые таблицы используют движки семейства
MergeTree
. Будут перенесены только эти таблицы и материализованные представления (MaterializedView). - Создайте пользователя с доступом к базе источника.
-
Убедитесь, что переносимые таблицы используют движки семейства
MergeTree
. Будут перенесены только эти таблицы и материализованные представления (MaterializedView). -
Убедитесь, что настройки сети, в которой размещен кластер, разрешают подключение к нему из интернета с IP-адресов, используемых сервисом Data Transfer.
-
Настройте кластер-источник, чтобы к нему можно было подключиться из интернета.
-
Убедитесь, что переносимые таблицы используют движки семейства
MergeTree
. Будут перенесены только эти таблицы и материализованные представления (MaterializedView). -
Создайте пользователя с доступом к базе источника.
Источник Greenplum®
-
Создайте пользователя, от имени которого трансфер подключится к источнику. Для этого выполните команду:
CREATE ROLE <имя пользователя> LOGIN ENCRYPTED PASSWORD '<пароль>';
-
Настройте кластер-источник так, чтобы созданный пользователь мог подключаться ко всем хостам-мастерам и хостам-сегментам кластера.
Доступ к хостам-сегментам осуществляется в режиме прямого доступа (utility mode) без необходимости взаимодействия с хостами-мастерами.
-
Выдайте созданному пользователю привилегию на выполнение операции
SELECT
над всеми таблицами базы данных, которые переносит трансфер, и привилегиюUSAGE
на схемы этих таблиц.Привилегии должны быть выданы на таблицы целиком, доступ только к части столбцов таблицы не поддерживается.
Вы можете выдать нужные привилегии только ограниченному набору таблиц. В этом случае перечислите все таблицы для переноса в дополнительных настройках эндпоинта-источника Greenplum®.
В этом примере команды привилегии выдаются на все таблицы базы данных:
GRANT SELECT ON ALL TABLES IN SCHEMA <название схемы> TO <имя пользователя>; GRANT USAGE ON SCHEMA <название схемы> TO <имя пользователя>;
-
Выдайте созданному пользователю привилегии для доступа к схеме, в которой будут размещаться служебные объекты трансфера. В частности, необходима привилегия на создание и использование функций в этой схеме.
Для этого выполните команду:
GRANT USAGE ON SCHEMA <название служебной схемы> TO <имя пользователя>; GRANT CREATE ON SCHEMA <название служебной схемы> TO <имя пользователя>; GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA <название служебной схемы> TO <имя пользователя>; GRANT SELECT ON ALL TABLES IN SCHEMA <название служебной схемы> TO <имя пользователя>;
-
Убедитесь, что настройки сети, в которой размещен кластер, разрешают подключение к нему из интернета с IP-адресов, используемых сервисом Data Transfer.
-
Создайте пользователя, от имени которого трансфер подключится к источнику. Для этого выполните команду:
CREATE ROLE <имя пользователя> LOGIN ENCRYPTED PASSWORD '<пароль>';
-
Настройте кластер-источник так, чтобы созданный пользователь мог подключаться ко всем хостам-мастерам и хостам-сегментам кластера.
Доступ к хостам-сегментам осуществляется в режиме прямого доступа (utility mode) без необходимости взаимодействия с хостами-мастерами.
-
Выдайте созданному пользователю привилегию на выполнение операции
SELECT
над всеми таблицами базы данных, которые переносит трансфер, и привилегиюUSAGE
на схемы этих таблиц.Привилегии должны быть выданы на таблицы целиком, доступ только к части столбцов таблицы не поддерживается.
Вы можете выдать нужные привилегии только ограниченному набору таблиц. В этом случае перечислите все таблицы для переноса в дополнительных настройках эндпоинта-источника Greenplum®.
В этом примере команды привилегии выдаются на все таблицы базы данных:
GRANT SELECT ON ALL TABLES IN SCHEMA <название схемы> TO <имя пользователя>; GRANT USAGE ON SCHEMA <название схемы> TO <имя пользователя>;
-
Выдайте созданному пользователю привилегии для доступа к схеме, в которой будут размещаться служебные объекты трансфера. В частности, необходима привилегия на создание и использование функций в этой схеме.
Для этого выполните команду:
GRANT USAGE ON SCHEMA <название служебной схемы> TO <имя пользователя>; GRANT CREATE ON SCHEMA <название служебной схемы> TO <имя пользователя>; GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA <название служебной схемы> TO <имя пользователя>; GRANT SELECT ON ALL TABLES IN SCHEMA <название служебной схемы> TO <имя пользователя>;
Источник MongoDB
- Оцените общее количество баз данных для трансфера и общую нагрузку на Managed Service for MongoDB. Если нагрузка на базы выше 10 000 транзакций на запись в секунду, создайте несколько эндпоинтов и трансферов. Подробнее см. в разделе Настройка эндпоинта-источника MongoDB.
- Создайте пользователя с ролью
readWrite
на базу источник.
-
Оцените общее количество баз данных для трансфера и общую нагрузку на MongoDB. Если нагрузка на базы выше 10 000 транзакций на запись в секунду, создайте несколько эндпоинтов и трансферов. Подробнее см. в разделе Настройка эндпоинта-источника MongoDB.
-
Убедитесь, что настройки сети, в которой размещен кластер, разрешают подключение к нему из интернета с IP-адресов, используемых сервисом Data Transfer.
-
Убедитесь, что версия MongoDB на приемнике не ниже
4.0
. -
Настройте кластер-источник, чтобы к нему можно было подключиться из интернета:
-
Измените в конфигурационном файле значение настройки
net.bindIp
со127.0.0.1
на0.0.0.0
:# network interfaces net: port: 27017 bindIp: 0.0.0.0
-
Перезапустите сервис
mongod
:sudo systemctl restart mongod.service
-
-
Если кластер-источник не использует репликацию, включите ее:
-
Добавьте в конфигурационный файл
/etc/mongod.conf
настройки репликации:replication: replSetName: <имя набора реплик>
-
Перезапустите сервис
mongod
:sudo systemctl restart mongod.service
-
Подключитесь к MongoDB и инициализируйте набор реплик командой:
rs.initiate({ _id: "<имя набора реплик>", members: [{ _id: 0, host: "<IP-адрес, который слушает mongod>:<порт>" }] });
-
-
Создайте пользователя с ролью
readWrite
на базу-источник:use admin db.createUser({ user: "<имя пользователя>", pwd: "<пароль>", mechanisms: ["SCRAM-SHA-1"], roles: [ { db: "<имя базы-источника>", role: "readWrite" } ] });
После старта трансфер подключится к источнику от имени этого пользователя.
-
При использовании MongoDB версий 3.4 и 3.6 для работы трансфера необходимо, чтобы пользователь обладал правами на чтение коллекции
local.oplog.rs
. Чтобы назначить пользователю рольclusterManager
, предоставляющую такие права, подключитесь к MongoDB и выполните команды:use admin; db.grantRolesToUser("<имя пользователя>", ["clusterManager"]);
Источник MySQL
-
Включите режим полного бинарного лога на источнике с помощью параметра Binlog row image.
-
(опционально) Настройте лимит на размер отправляемых кусков данных (chunk) с помощью параметра Max allowed packet.
-
Создайте пользователя для подключения к источнику.
-
Назначьте пользователю роль
ALL_PRIVILEGES
для базы-источника. -
Выдайте пользователю привилегии
REPLICATION CLIENT
иREPLICATION SLAVE
.
-
-
Для типов трансфера Реплицировать и Копировать и реплицировать таблицы без первичных ключей не переносятся. Чтобы сохранить работоспособность трансфера при переносе базы с такими таблицами:
-
Не переносите таблицы без первичных ключей. Для этого добавьте их в список исключенных таблиц в настройках эндпоинта для источника.
-
Создайте первичные ключи (
PRIMARY KEY
) в тех мигрируемых таблицах, где их нет.-
Чтобы получить список таблиц без первичного ключа, выполните запрос:
SELECT tab.table_schema AS database_name, tab.table_name AS table_name, tab.table_rows AS table_rows FROM information_schema.tables tab LEFT JOIN information_schema.table_constraints tco ON (tab.table_schema = tco.table_schema AND tab.table_name = tco.table_name AND tco.constraint_type = 'PRIMARY KEY') WHERE tab.table_schema NOT IN ('mysql', 'information_schema', 'performance_schema', 'sys') AND tco.constraint_type IS NULL AND tab.table_type = 'BASE TABLE';
-
Изучите структуру таблиц без первичного ключа, которые необходимо перенести на приемник:
SHOW CREATE TABLE <имя базы>.<имя таблицы>;
-
Добавьте простой или составной первичный ключ к таблицам, которые необходимо перенести на приемник:
ALTER TABLE <имя таблицы> ADD PRIMARY KEY (<столбец или группа столбцов>);
-
Если в переносимой на приемник таблице нет столбца или группы столбцов, подходящих на роль первичного ключа, создайте новый столбец:
ALTER TABLE <имя таблицы> ADD id BIGINT PRIMARY KEY AUTO_INCREMENT;
-
Примечание
Если создание первичного ключа завершается ошибкой
, увеличьте в настройках СУБД значение параметраCreating index 'PRIMARY' required more than 'innodb_online_alter_log_max_size' bytes of modification log. Please try again
Innodb log file size
. -
-
Выключите перенос триггеров на стадии активации трансфера и включите его на стадии деактивации (для типов трансфера Реплицировать и Копировать и реплицировать). Подробнее см. в описании дополнительных настроек эндпоинта для источника MySQL.
-
Убедитесь, что настройки сети, в которой размещен кластер, разрешают подключение к нему из интернета с IP-адресов, используемых сервисом Data Transfer.
-
Убедитесь, что источник использует подсистему хранения данных низкого уровня MyISAM или InnoDB. При использовании других подсистем трансфер может завершиться с ошибкой.
-
Включите режим полного бинарного лога на источнике с помощью параметра
binlog_row_image
. -
Если источник репликации — кластер, который находится за балансером, включите для него GTID-режим (
GTID-MODE = ON
).Если по какой-то причине включить GTID-режим невозможно, убедитесь, что шаблон имен бинарных логов содержит имя хоста.
В обоих случаях это позволит продолжить репликацию в случае смены хоста-мастера.
-
(опционально) Настройте лимит на размер отправляемых кусков данных (chunk) с помощью параметра
max_allowed_packet
. -
Создайте пользователя для подключения к источнику и выдайте ему необходимые привилегии:
CREATE USER '<имя пользователя>'@'%' IDENTIFIED BY '<пароль>'; GRANT ALL PRIVILEGES ON <имя базы>.* TO '<имя пользователя>'@'%'; GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO '<имя пользователя>'@'%';
-
Для типов трансфера Реплицировать и Копировать и реплицировать таблицы без первичных ключей не переносятся. Чтобы сохранить работоспособность трансфера при переносе базы с такими таблицами:
-
Не переносите таблицы без первичных ключей. Для этого добавьте их в список исключенных таблиц в настройках эндпоинта для источника.
-
Создайте первичные ключи (
PRIMARY KEY
) в тех мигрируемых таблицах, где их нет.-
Чтобы получить список таблиц без первичного ключа, выполните запрос:
SELECT tab.table_schema AS database_name, tab.table_name AS table_name, tab.table_rows AS table_rows FROM information_schema.tables tab LEFT JOIN information_schema.table_constraints tco ON (tab.table_schema = tco.table_schema AND tab.table_name = tco.table_name AND tco.constraint_type = 'PRIMARY KEY') WHERE tab.table_schema NOT IN ('mysql', 'information_schema', 'performance_schema', 'sys') AND tco.constraint_type IS NULL AND tab.table_type = 'BASE TABLE';
-
Изучите структуру таблиц без первичного ключа, которые необходимо перенести на приемник:
SHOW CREATE TABLE <имя базы>.<имя таблицы>;
-
Добавьте простой или составной первичный ключ к таблицам, которые необходимо перенести на приемник:
ALTER TABLE <имя таблицы> ADD PRIMARY KEY (<столбец или группа столбцов>);
-
Если в переносимой на приемник таблице нет столбца или группы столбцов, подходящих на роль первичного ключа, создайте новый столбец:
ALTER TABLE <имя таблицы> ADD id BIGINT PRIMARY KEY AUTO_INCREMENT;
-
Примечание
Если создание первичного ключа завершается ошибкой
, увеличьте в настройках СУБД значение параметраCreating index 'PRIMARY' required more than 'innodb_online_alter_log_max_size' bytes of modification log. Please try again
inno_db_log_file_size
. -
-
Выключите перенос триггеров на стадии активации трансфера и включите его на стадии деактивации (для типов трансфера Реплицировать и Копировать и реплицировать). Подробнее см. в описании дополнительных настроек эндпоинта для источника MySQL.
Источник PostgreSQL
-
Настройте пользователя, от имени которого трансфер подключится к источнику:
-
Для типов трансфера Реплицировать и Копировать и реплицировать назначьте роль
mdb_replication
этому пользователю. -
Подключитесь к базе данных, которую нужно мигрировать, от имени владельца базы и настройте привилегии:
SELECT
над всеми таблицами базы данных, которые переносит трансфер;SELECT
над всеми последовательностями базы данных, которые переносит трансфер;USAGE
на схемы этих таблиц и последовательностей.ALL PRIVILEGES
(CREATE
иUSAGE
) на задаваемую параметром эндпоинта схему служебных таблиц, если эндпоинт будет использоваться для типов трансфера Реплицировать или Копировать и реплицировать.
-
Если источник репликации — кластер, включите для него расширение
pg_tm_aux
. Это позволит продолжить репликацию в случае смены хоста-мастера. -
Для типов трансфера Реплицировать и Копировать и реплицировать таблицы без первичных ключей не переносятся. Чтобы сохранить работоспособность трансфера при переносе базы с такими таблицами:
- Не переносите таблицы без первичных ключей. Для этого добавьте их в список исключенных таблиц в настройках эндпоинта для источника.
- Добавьте идентификатор реплики на таблицах без
primary key
:-
Для таблиц с индексом установите
REPLICA IDENTITY
поunique key
:ALTER TABLE MY_TBL REPLICA IDENTITY USING INDEX MY_IDX;
-
Для таблиц без индекса измените
REPLICA IDENTITY
:ALTER TABLE MY_TBL REPLICA IDENTITY FULL;
-
-
Выключите перенос триггеров на стадии активации трансфера и включите его на стадии деактивации (для типов трансфера Реплицировать и Копировать и реплицировать). Подробнее см. в описании дополнительных настроек эндпоинта для источника PostgreSQL.
-
Убедитесь, что настройки сети, в которой размещен кластер, разрешают подключение к нему из интернета с IP-адресов, используемых сервисом Data Transfer.
-
Создайте пользователя, от имени которого трансфер подключится к источнику:
-
Для типа трансфера Копировать создайте пользователя командой:
CREATE ROLE <имя пользователя> LOGIN ENCRYPTED PASSWORD '<пароль>';
-
Для типов трансфера Реплицировать и Копировать и реплицировать создайте пользователя с привилегией
REPLICATION
командой:CREATE ROLE <имя пользователя> WITH REPLICATION LOGIN ENCRYPTED PASSWORD '<пароль>';
-
-
Выдайте созданному пользователю привилегию на выполнение операции
SELECT
над всеми таблицами базы данных, которые переносит трансфер, и привилегиюUSAGE
на схемы этих таблиц:GRANT SELECT ON ALL TABLES IN SCHEMA <название схемы> TO <имя пользователя>; GRANT USAGE ON SCHEMA <название схемы> TO <имя пользователя>;
-
Установите и включите расширение wal2json.
Установка
-
Linux
- Подключите официальный репозиторий PostgreSQL для вашего дистрибутива.
- Обновите список доступных пакетов и установите пакет
wal2json
для используемой версии PostgreSQL.
-
Windows 10, 11
-
Если у вас не установлена Microsoft Visual Studio, загрузите и установите ее. Для сборки расширения wal2json достаточно редакции Community Edition. При установке выберите компоненты:
- MSBuild,
- MSVC v141 x86/x64 build tools,
- C++\CLI support for v141 build tools,
- MSVC v141 — VS 2017 C++ x64\x86 build tools,
- MSVC v141 — VS 2017 C++ x64\x86 Spectre-mitigated libs,
- самая свежая версия Windows SDK для используемой версии ОС,
- прочие зависимости, которые устанавливаются автоматически для выбранных компонентов.
Запомните номер устанавливаемой версии Windows SDK — он понадобится при указании параметров сборки wal2json.
-
Загрузите исходный код wal2json со страницы проекта.
-
Распакуйте архив с исходным кодом в каталог
C:\wal2json\
. -
Перейдите в каталог
C:\wal2json
. -
В рамках одной сессии PowerShell внесите изменения в файл
wal2json.vcxproj
:-
замените строки
C:\postgres\pg103
на путь к каталогу с установленной версией PostgreSQL, например:(Get-Content .\wal2json.vcxproj).replace('C:\postgres\pg103', 'C:\PostgreSQL\14') | ` Set-Content .\wal2json.vcxproj
-
замените параметр сборки
/MP
на/MT
, например:(Get-Content .\wal2json.vcxproj).replace('/MP', '/MT') | Set-Content .\wal2json.vcxproj
-
укажите в параметре
<WindowsTargetPlatformVersion>
номер версии установленного компонента Windows SDK:(Get-Content .\wal2json.vcxproj).replace('<WindowsTargetPlatformVersion>8.1', '<WindowsTargetPlatformVersion><установленная версия Windows SDK>') | ` Set-Content .\wal2json.vcxproj
-
Укажите значение переменной окружения, необходимой для сборки wal2json, например, для Visual Studio Community Edition 2022:
$VCTargetsPath='C:\Program Files\Microsoft Visual Studio\2022\Comminuty\MSBuild\Microsoft\VC\v150'
-
Запустите сборку:
& 'C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\MSBuild.exe' /p:Configuration=Release /p:Platform=x64
-
Скопируйте файл
wal2json.dll
из каталогаbuild/release
в каталогlib
установленной версии PostgreSQL.
-
-
Настройка
-
В файле
postgresql.conf
измените значение параметраwal_level
наlogical
:wal_level = logical
-
Перезапустите PostgreSQL.
-
-
Если источник репликации — кластер, установите и включите на его хостах расширение pg_tm_aux. Это позволит продолжить репликацию в случае смены хоста-мастера.
-
Для типов трансфера Реплицировать и Копировать и реплицировать таблицы без первичных ключей не переносятся. Чтобы сохранить работоспособность трансфера при переносе базы с такими таблицами:
- Не переносите таблицы без первичных ключей. Для этого добавьте их в список исключенных таблиц в настройках эндпоинта для источника.
- Добавьте идентификатор реплики на таблицах без
primary key
:-
Для таблиц с индексом установите
REPLICA IDENTITY
поunique key
:ALTER TABLE MY_TBL REPLICA IDENTITY USING INDEX MY_IDX;
-
Для таблиц без индекса измените
REPLICA IDENTITY
:ALTER TABLE MY_TBL REPLICA IDENTITY FULL;
-
-
Выключите перенос триггеров на стадии активации трансфера и включите его на стадии деактивации (для типов трансфера Реплицировать и Копировать и реплицировать). Подробнее см. в описании дополнительных настроек эндпоинта для источника PostgreSQL.
-
Если на источнике настроена репликация через Patroni, добавьте в его конфигурацию блок ignore_slots:
ignore_slots: - database: <имя базы данных, для которой настроен трансфер> name: <имя слота репликации> plugin: wal2json type: logical
Имя базы данных и имя слота репликации должны совпадать со значениями, указанными в настройках эндпоинта для источника. По умолчанию
имя слота репликации
совпадает сID трансфера
.В противном случае начало этапа репликации завершится ошибкой:
Warn(Termination): unable to create new pg source: Replication slotID <имя слота репликации> does not exist.
Примечание
Об особенностях переноса данных из PostgreSQL в ClickHouse трансферами типа Реплицировать и Копировать и реплицировать см. в разделе Перенос данных из PostgreSQL в ClickHouse.
Источник S3
Если вы используете частный бакет в качестве источника, предоставьте разрешения read
и list
учетной записи, которую будете использовать для подключения.
Подробнее см. в документации Airbyte®.
Источник Yandex Data Streams
-
(опционально) Создайте функцию обработки.
Пример функции обработкиconst yc = require("yandex-cloud"); const { Parser } = require("@robojones/nginx-log-parser"); module.exports.handler = async function (event, context) { const schema = '$remote_addr - $remote_user [$time_local] "$request" $status $bytes_sent "$http_referer" "$http_user_agent"'; const parser = new Parser(schema); return { Records: event.Records.map((record) => { const decodedData = new Buffer(record.kinesis.data, "base64") .toString("ascii") .trim(); try { const result = parser.parseLine(decodedData); if (result.request == "") { // empty request - drop message return { eventID: record.eventID, invokeIdentityArn: record.invokeIdentityArn, eventVersion: record.eventVersion, eventName: record.eventName, eventSourceARN: record.eventSourceARN, result: "Dropped" }; } return { // successfully parsed message eventID: record.eventID, invokeIdentityArn: record.invokeIdentityArn, eventVersion: record.eventVersion, eventName: record.eventName, eventSourceARN: record.eventSourceARN, kinesis: { data: new Buffer(JSON.stringify(result)).toString( "base64" ), }, result: "Ok" }; } catch (err) { // error - fail message return { eventID: record.eventID, invokeIdentityArn: record.invokeIdentityArn, eventVersion: record.eventVersion, eventName: record.eventName, eventSourceARN: record.eventSourceARN, result: "ProcessingFailed", }; } }) }; };
-
(опционально) Подготовьте файл схемы данных в формате JSON.
Пример файла со схемой данных:
[ { "name": "<имя поля>", "type": "<тип>" }, ... { "name": "<имя поля>", "type": "<тип>" } ]
Список допустимых типов:
any
boolean
datetime
double
int8
int16
int32
int64
string
uint8
uint16
uint32
uint64
utf8
Подготовка приемника
Приемник ClickHouse
-
Ее имя должно совпадать с именем базы-источника. Если нужно перенести несколько баз данных, создайте для каждой из них отдельный трансфер.
-
Создайте пользователя с доступом к базе приемника.
После старта трансфер подключится к приемнику от имени этого пользователя.
-
Убедитесь, что настройки сети, в которой размещен кластер, разрешают подключение к нему из интернета с IP-адресов, используемых сервисом Data Transfer.
-
Создайте базу-приемник. Ее имя должно совпадать с именем базы-источника. Если нужно перенести несколько баз данных, создайте для каждой из них отдельный трансфер.
-
Создайте пользователя с доступом к базе приемника.
После старта трансфер подключится к приемнику от имени этого пользователя.
Приемник Greenplum®
-
Отключите на приемнике следующие настройки:
- проверку целостности внешних ключей;
- триггеры;
- другие ограничения (constraints).
Важно
Не включайте эти настройки до окончания трансфера. Это обеспечит целостность данных по внешним ключам.
-
Создайте пользователя:
CREATE ROLE <имя пользователя> LOGIN ENCRYPTED PASSWORD '<пароль>';
-
Выдайте созданному пользователю все привилегии на базу данных, схемы и переносимые таблицы:
GRANT ALL PRIVILEGES ON DATABASE <имя базы> TO <имя пользователя>;
Если база не пустая, то пользователь должен быть ее владельцем (owner):
ALTER DATABASE <имя базы> OWNER TO <имя пользователя>;
После старта трансфер подключится к приемнику от имени этого пользователя.
-
Убедитесь, что настройки сети, в которой размещен кластер, разрешают подключение к нему из интернета с IP-адресов, используемых сервисом Data Transfer.
-
Отключите на приемнике следующие настройки:
- проверку целостности внешних ключей;
- триггеры;
- другие ограничения (constraints).
Важно
Не включайте эти настройки до окончания трансфера. Это обеспечит целостность данных по внешним ключам.
-
Создайте пользователя:
CREATE ROLE <имя пользователя> LOGIN ENCRYPTED PASSWORD '<пароль>';
-
Выдайте созданному пользователю все привилегии на базу данных, схемы и переносимые таблицы:
GRANT ALL PRIVILEGES ON DATABASE <имя базы> TO <имя пользователя>;
Если база не пустая, то пользователь должен быть ее владельцем (owner):
ALTER DATABASE <имя базы> OWNER TO <имя пользователя>;
После старта трансфер подключится к приемнику от имени этого пользователя.
Приемник MongoDB
-
Создайте базу данных с тем же именем, что и на источнике.
-
Создайте пользователя с ролью
readWrite
на созданную базу. -
Чтобы шардировать переносимые коллекции в кластере-приемнике Yandex Managed Service for MongoDB:
-
Следуя инструкции, создайте и настройте в базе-приемнике пустые шардированные коллекции с теми же именами, что и на источнике.
Сервис Data Transfer не шардирует переносимые коллекции автоматически. Шардирование больших коллекций может занять продолжительное время и снизить скорость трансфера.
-
Если шардирование происходит по ключу, отличному от
_id
(используется по умолчанию), назначьте пользователю рольmdbShardingManager
. -
При создании эндпоинта для приемника выберите политику очистки
DISABLED
илиTRUNCATE
.Выбор политики
DROP
приведет к тому, что при активации трансфера сервис удалит из базы-приемника все данные, в т. ч. шардированные коллекции, и создаст вместо них новые, нешардированные.
Подробнее о шардировании см. в документации MongoDB.
-
-
Убедитесь, что настройки сети, в которой размещен кластер, разрешают подключение к нему из интернета с IP-адресов, используемых сервисом Data Transfer.
-
Убедитесь, версия MongoDB на приемнике не ниже чем на источнике.
-
Настройте кластер-приемник, чтобы к нему можно было подключиться из интернета:
-
Измените в конфигурационном файле значение настройки
net.bindIp
со127.0.0.1
на0.0.0.0
:# network interfaces net: port: 27017 bindIp: 0.0.0.0
-
Перезапустите сервис
mongod
:sudo systemctl restart mongod.service
-
-
Если кластер-приемник не использует репликацию, включите ее:
-
Добавьте в конфигурационный файл
/etc/mongod.conf
настройки репликации:replication: replSetName: <имя набора реплик>
-
Перезапустите сервис
mongod
:sudo systemctl restart mongod.service
-
Подключитесь к MongoDB и инициализируйте набор реплик командой:
rs.initiate({ _id: "<имя набора реплик>", members: [{ _id: 0, host: "<IP-адрес, который слушает mongod>:<порт>" }] });
-
-
Подключитесь к кластеру и создайте базу-приемник с тем же именем, что и на источнике:
use <имя базы>
-
Создайте пользователя с правами
readWrite
на базу-приемник:use admin; db.createUser({ user: "<имя пользователя>", pwd: "<пароль>", mechanisms: ["SCRAM-SHA-1"], roles: [ { db: "<имя базы-приемника>", role: "readWrite" } ] });
После старта трансфер подключится к приемнику от имени этого пользователя.
-
Чтобы шардировать переносимые коллекции в кластере-приемнике:
-
Подготовьте базу данных и создайте в ней пустые коллекции с теми же именами, что и на источнике.
Сервис Data Transfer не шардирует переносимые коллекции автоматически. Шардирование больших коллекций может занять продолжительное время и снизить скорость трансфера.
-
Включите шардирование для базы-приемника:
sh.enableSharding("<имя базы-приемника>")
-
Задайте шардирование для каждой коллекции с учетом ее пространства имен:
sh.shardCollection("<имя базы-приемника>.<имя коллекции>", { <имя поля>: <1|"hashed">, ... });
Описание функции
shardCollection()
см. в документации MongoDB. -
Чтобы убедиться в том, что шардирование настроено и включено, получите список доступных шардов:
sh.status()
-
Если для шардирования используется ключ, отличный от
_id
(значение по умолчанию), назначьте системную рольclusterManager
пользователю, от имени которого сервис Data Transfer будет подключаться к кластеру-приемнику:use admin; db.grantRolesToUser("<имя пользователя>", ["clusterManager"]);
-
При создании эндпоинта для приемника выберите политику очистки
DISABLED
илиTRUNCATE
.Выбор политики
DROP
приведет к тому, что при активации трансфера сервис удалит из базы-приемника все данные, в т. ч. шардированные коллекции, и создаст вместо них новые, нешардированные.
Подробнее о шардировании см. в документации MongoDB.
-
Приемник MySQL
-
Убедитесь, что мажорная версия MySQL на приемнике не ниже версии на источнике.
-
Установите SQL Mode, который совпадает с источником.
-
Создайте пользователя для подключения к приемнику.
- Назначьте пользователю роль
ALL_PRIVILEGES
для базы-приемника.
- Назначьте пользователю роль
-
Убедитесь, что настройки сети, в которой размещен кластер, разрешают подключение к нему из интернета с IP-адресов, используемых сервисом Data Transfer.
-
Убедитесь, что мажорная версия MySQL на приемнике не ниже версии на источнике.
-
Убедитесь, что приемник использует подсистему хранения данных низкого уровня MyISAM или InnoDB.
-
Установите SQL Mode, который совпадает с источником.
-
Создайте пользователя для подключения к приемнику и выдайте ему необходимые привилегии:
CREATE USER '<имя пользователя>'@'%' IDENTIFIED BY '<пароль>'; GRANT ALL PRIVILEGES ON <имя базы>.* TO '<имя пользователя>'@'%';
Приемник Yandex Object Storage
- Создайте бакет нужной вам конфигурации.
- Создайте сервисный аккаунт с ролью
storage.uploader
.
Приемник PostgreSQL
-
Убедитесь, что мажорная версия PostgreSQL на приемнике не ниже версии на источнике.
-
Отключите на приемнике следующие настройки:
- проверку целостности внешних ключей;
- триггеры;
- другие ограничения (constraints).
Важно
Не включайте эти настройки до окончания трансфера. Это обеспечит целостность данных по внешним ключам.
Если вы используете тип трансфера Копировать и реплицировать, настройки можно включить обратно после завершения стадии копирования.
-
Создайте пользователя с доступом к базе приемника.
После старта трансфер подключится к приемнику от имени этого пользователя.
-
Убедитесь, что настройки сети, в которой размещен кластер, разрешают подключение к нему из интернета с IP-адресов, используемых сервисом Data Transfer.
-
Убедитесь, что мажорная версия PostgreSQL на приемнике не ниже версии на источнике.
-
Отключите на приемнике следующие настройки:
- проверку целостности внешних ключей;
- триггеры;
- другие ограничения (constraints).
Важно
Не включайте эти настройки до окончания трансфера. Это обеспечит целостность данных по внешним ключам.
Если вы используете тип трансфера Копировать и реплицировать, настройки можно включить обратно после завершения стадии копирования.
-
Создайте пользователя:
CREATE ROLE <имя пользователя> LOGIN ENCRYPTED PASSWORD '<пароль>';
-
Выдайте созданному пользователю все привилегии на базу данных, схемы и переносимые таблицы:
GRANT ALL PRIVILEGES ON DATABASE <имя базы> TO <имя пользователя>;
Если база не пустая, то пользователь должен быть ее владельцем (owner):
ALTER DATABASE <имя базы> OWNER TO <имя пользователя>;
После старта трансфер подключится к приемнику от имени этого пользователя.
Сервис не переносит материализованные представления (MATERIALIZED VIEW
). Подробнее см. в разделе Особенности работы сервиса с источниками и приемниками.
Приемник Yandex Managed Service for YDB
Чтобы принимать данные в сервисе Yandex Managed Service for YDB, подготовка не требуется.
Airbyte® является зарегистрированным товарным знаком Airbyte, Inc в США и/или других странах.
Greenplum® и Greenplum Database® являются зарегистрированными товарными знаками или товарными знаками VMware, Inc в США и/или других странах.