Подготовка к миграции данных
PostgreSQL поддерживает логические бэкапы. Вы можете использовать pg_dump функцию логического бэкапа для экспорта файлов бэкапа и последующего импорта их в RDS с использованием psql.
Вы можете получить доступ RDS экземпляры DB через EIP или через ECS.
Подготовка
- Подготовьте ECS для доступа к экземплярам DB в том же VPC или подготовьте устройство для доступа RDS через EIP.
- Чтобы подключиться к экземпляру DB через ECS, вам нужно создать ECS сначала.
- Установите клиент PostgreSQL на подготовленный ECS или устройство.Note
Версия клиента PostgreSQL должна совпадать с версией DB engine вашего экземпляра RDS for PostgreSQL. База данных PostgreSQL или клиент предоставят pg_dump и psql.
Экспорт данных
Перед миграцией существующей базы данных PostgreSQL в RDS, вам нужно сначала экспортировать данные.
- Экспортный инструмент должен соответствовать версии DB engine.
- Миграция базы данных выполняется в офлайн‑режиме. Перед миграцией необходимо остановить все приложения, использующие исходную базу данных.
- Войдите в ECS или устройство, которое может получить доступ RDS.
- Используйте инструмент pg_dump для экспорта исходной базы данных в файл SQL.
pg_dump--username=<DB_USER> --host=<DB_ADDRESS> --port=<DB_PORT> --format=plain --file=<BACKUP_FILE><DB_NAME>
- DB_USER указывает имя пользователя базы данных.
- DB_ADDRESS указывает адрес базы данных.
- DB_PORT указывает порт базы данных.
- BACKUP_FILE указывает имя файла, в который будут экспортированы данные.
- DB_NAME указывает название базы данных, которую необходимо перенести.
Введите пароль к базе данных, как запрошено.
NoteЕсли экспортированный SQL‑файл использует INSERT‑операторы, вы можете легко редактировать и изменять файл. Однако скорость импорта данных может быть медленнее, чем при использовании COPY‑операторов. Рекомендуется выбрать подходящий формат операторов по необходимости.
- Если обе базы данных‑источник и‑назначения являются базами данных PostgreSQL, рекомендуется экспортировать COPY‑операторы (по умолчанию). Для получения подробной информации смотрите Пример 1: Экспорт базы данных‑источника в файл SQL (COPY).
- Если одна из баз данных‑источника или‑назначения является не‑PostgreSQL базой, рекомендуется экспортировать INSERT‑операторы. Для получения подробной информации смотрите Пример 2: Экспорт базы данных‑источника в файл SQL (INSERT).
Для получения дополнительной информации смотрите pg_dump options.
Примеры:
- Пример 1: Экспорт исходной базы данных в файл SQL (COPY)
$ pg_dump --username=root --host=192.168.151.18 --port=5432 --format=plain --file=backup.sql my_db
Пароль для пользователя root:
- Пример 2: Экспорт исходной базы данных в файл SQL (INSERT)
$ pg_dump --username=root --host=192.168.151.18 --port=5432 --format=plain --inserts --file=backup.sql my_db
Пароль для пользователя root:
- Пример 3: Экспорт всех структур таблиц из исходной базы данных в файл SQL
$ pg_dump --username=root --host=192.168.151.18 --port=5432 --format=plain --schema-only --file=backup.sql my_db
Пароль для пользователя root:
- Пример 4: Экспорт всех данных таблиц из исходной базы данных в файл SQL
$ pg_dump --username=root --host=192.168.151.18 --port=5432 --format=plain --data-only --file=backup.sql my_db
Пароль для пользователя root:
После выполнения команд в любом из приведённых выше примеров, a backup.sql файл будет сгенерирован следующим образом:
[rds@localhost ~]$ ll backup.sql-rw-r-----. 1 rds rds 2714 Sep 21 08:23 backup.sql - Используйте pg_dump для экспорта таблиц из исходной базы данных в файл SQL.
pg_dump --username=<DB_USER> --host=<DB_ADDRESS> --port=<DB_PORT> --format=plain --file=<BACKUP_FILE> <DB_NAME> --table=<TABLE_NAME>
- DB_USER указывает имя пользователя базы данных.
- DB_ADDRESS указывает адрес базы данных.
- DB_PORT указывает порт базы данных.
- BACKUP_FILE указывает имя файла для экспорта.
- DB_NAME указывает имя базы данных для миграции.
- TABLE_NAME указывает имя указанной таблицы в базе данных для миграции.
Введите пароль к базе данных по запросу.
Примеры:
- Пример 1: Экспорт одной таблицы из исходной базы данных в файл SQL
$ pg_dump --username=root --host=192.168.151.18 --port=5432 --format=plain --file=backup.sql my_db --table=test
Пароль для пользователя root:
- Пример 2: Экспорт нескольких таблиц из исходной базы данных в файл SQL
$ pg_dump --username=root --host=192.168.151.18 --port=5432 --format=plain --file=backup.sql my_db --table=test1 --table=test2
Пароль для пользователя root:
- Пример 3: Экспорт всех таблиц, начинающихся с ts_, из исходной базы данных в файл SQL
$ pg_dump --username=root --host=192.168.151.18 --port=5432 --format=plain --file=backup.sql my_db --table=ts_*
Пароль для пользователя root:
- Пример 4: Экспорт всех таблиц, кроме тех, которые начинаются с ts_, из исходной базы данных в файл SQL
$ pg_dump --username=root --host=192.168.151.18 --port=5432 --format=plain --file=backup.sql my_db -T=ts_*
Пароль для пользователя root:
После выполнения команд в любом из приведённых выше примеров, a backup.sql файл будет создан следующим образом:
[rds@localhost ~]$ ll backup.sql-rw-r-----. 1 rds rds 2714 Sep 21 08:23 backup.sql
Импорт данных
- Войдите в ECS или устройство, которое может получить доступ RDS.
- Убедитесь, что целевая база данных, в которую будут импортированы данные, существует.
Если целевая база данных не существует, выполните следующую команду для создания базы данных:
# psql --host=<RDS_ADDRESS>--port=<DB_PORT>--username=root--dbname=postgres-c "создать базу данных<DB_NAME>;"
- RDS_ADDRESS указывает IP-адрес экземпляра RDS DB.
- DB_PORT указывает порт экземпляра RDS DB.
- DB_NAME указывает имя базы данных для импорта.
- Импортировать экспортированный файл в RDS.
# psql --host=<RDS_ADDRESS> --port=<DB_PORT>--username=root--dbname=<DB_NAME>--file=<BACKUP_DIR>/backup.sql
- RDS_ADDRESS указывает IP-адрес RDS экземпляр DB.
- DB_PORT указывает порт экземпляра RDS DB.
- DB_NAME указывает название базы данных, в которую должны быть импортированы данные. Убедитесь, что база данных существует.
- BACKUP_DIR указывает каталог, где backup.sql файл хранится.
Введите пароль для RDS экземпляра БД, когда будет запрошено.
Пример:
# psql --host=172.16.66.198 --port=5432 --username=root --dbname=my_db --file=backup.sql
Пароль для пользователя root:
- Просмотрите результат импорта.
my_db=> \l my_db
В этом примере база данных с именем my_db была импортирована.
my_db=> \l my_dbList of databasesName | Owner | Encoding | Collate | Ctype | Access privileges------+-------+----------+-------------+-------------+-----------my_db | root | UTF8 | en_US.UTF-8 | en_US.UTF-8 |(1 row)