Работа с базами данных во время трансфера
При работе с трансферами данных необходимо учитывать особенности баз данных.
Во время работы трансфера с репликацией (типы трансфера Репликация и Копирование и репликация) данные на источнике и приемнике могут различаться, поэтому при чтении из базы-приемника в это время могут возникать ошибки. После деактивации трансфера данные на источнике и приемнике будут одинаковы (отложенная согласованность, eventual consistency).
MySQL
-
Для трансферов в статусе Копируется любые изменения схемы данных (
ALTER
) на источнике или приемнике прервут трансфер. -
Для трансферов в статусе Реплицируется схему данных на источнике можно изменять. Все операции
ALTER
, попавшие в бинарный лог (binlog) на источнике, автоматически применятся на приемнике. Этот процесс занимает некоторое время, поэтому трансфер может замедлиться.
PostgreSQL
Совет
Протокол репликации PostgreSQL не поддерживает передачу изменения схемы данных. Избегайте изменения схемы данных в базах источника и приемника во время трансфера. Если избежать этого невозможно, проведите явные проверки на приемнике.
Для трансферов типа Копирование и Копирование и репликация:
-
в статусе Копируется запрещено изменять схему данных на источнике и приемнике;
-
в статусе Реплицируется любые изменения схемы данных на источнике вручную примените на приемнике, иначе трансфер не сможет продолжить работу.
Например, пусть в таблицу
test_table
источника добавили новый столбец:ALTER TABLE test_table ADD COLUMN val2 TEXT;
Если запись в эту таблицу продолжается, трансфер не сможет выполнить вставку данных на приемнике. Чтобы репликация продолжилась, выполните аналогичный запрос на изменение схемы данных на приемнике:
ALTER TABLE test_table ADD COLUMN val2 TEXT;
После этого трансфер сможет продолжить работу.
MongoDB
-
Для трансферов в статусе Копируется запрещено производить действия, которые сокращают временное окно журнала операций (oplog) на источнике. Не стоит добавлять, удалять шарды или каким-либо образом их переконфигурировать в процессе копирования, а также производить другие действия, приводящие к уменьшению временного окна журнала операций.
-
Для трансферов в статусе Реплицируется можно столкнуться с проблемой дублирования ключа в ситуациях, когда приемником выступает шардированный кластер MongoDB с индексом шардирования, отличным от
_id
. Во время работы трансфера не рекомендуется создавать на приемнике кластеры с индексами шардирования, отличными от_id
.