Мне нужно использовать AWS DMS, чтобы скопировать один экземпляр MySQL RDS в другой. Я долго возился, все это настроил, и я успешно выполнил миграцию. Проблема в том, что он не создает индексы.
Я понимаю причину этого, очевидно, что копировать без этого намного быстрее, но у меня слишком много таблиц по нескольким схемам, чтобы добавить их вручную. Есть ли способ заставить DMS копировать индексы после репликации? Или альтернативное решение?
Оказывается, DMS создаст только первичные ключи и, возможно, еще пару индексов, если вам повезет.
Конечно, есть способы обойти это с помощью команд mysql, но способ AWS для достижения миграции БД, который я нашел, - это сначала скопировать схемы из одной БД в другую с помощью Инструмент преобразования схемы AWS, а затем скопируйте данные с помощью AWS DMS.
У меня была такая же проблема - только PK были перенесены с помощью AWS DMS. Вторичные индексы, счетчики автоинкремента, пользователей и гранты (все, что не является частью данных) нужно было перенести отдельно.
Решение:
Дамп структуры db из исходного RDS:
mysqldump -u <username> -P <port> -h <host_source> --no-data -p --all-databases > schemas.sql
Импортируйте структуру в целевой RDS:
mysql -u <username> -P <port> -h <host_target> -p < schemas.sql
В задаче переноса данных укажите «Ничего не делать» с таблицами на целевом объекте.
Заметка:
Для миграции больших баз данных лучше перейти на более крупный тип инстанса RDS. Опыт показал, что миграция будет стабильной, если все экземпляры RDS находятся в одном регионе (AZ) и имеют одинаковый / похожий тип экземпляра, то есть исходный, целевой и реплики.
И самое важное - переключить IOPS, выделенное хранилищем RDS, на некоторые настраиваемые высокие значения (зависит от размера данных в БД).
Ссылка на док
Отсутствуют внешние ключи и вторичные индексы
AWS DMS создает таблицы, первичные ключи и, в некоторых случаях, уникальные индексы, но не создает никаких других объектов, которые не требуются для эффективной миграции данных из источника. Например, он не создает вторичные индексы, ограничения непервичного ключа или значения данных по умолчанию.
Чтобы перенести вторичные объекты из базы данных, используйте собственные инструменты базы данных, если вы переходите на тот же механизм базы данных, что и исходная база данных. Используйте средство преобразования схемы, если вы переходите на другой механизм базы данных, отличный от того, который используется исходной базой данных для миграции вторичных объектов.
PS Импортировать данные в таблицы с индексами неэффективно, компромисс зависит от каждого случая.