Рубрики
Uncategorized

Переместить PostgreSQL AWS RDS в Google Cloud SQL

У нас есть вопрос, что мы должны переместить большую базу данных PostgreSQL вдали от … Помечено GoogleCloud, Postgres, AWS, DEVOPS.

У нас есть вопрос, что мы должны перемещать большую базу данных PostgreSQL вдали от AWS Amazon с Google Google.

Проблемы, где:

Большая база данных: 160 ГБ + У нас были только снимки AWS

Получить снимок вне RDS в хранение

Для этого мы создали новый вычислительный двигатель и подключили к нему через SSH. Мы хотим получить файл dump прямо на новое ведро в хранилище. Таким образом, мы должны включить ведро как новый объем машины:

gcloud init

Вы можете либо войти или использовать учетную запись службы, но имейте в виду, что учетная запись услуг нуждается в правах для создания ведра.

gsutil mb gs://my-new-bucket/

Теперь мы должны установить ведро на нашу машину. Для этого WIE используйте предохранитель облачного хранения, чтобы установить его, нам нужны следующие шаги:

export GCSFUSE_REPO=gcsfuse-lsb_release -c -s
echo "deb http://packages.cloud.google.com/apt $GCSFUSE_REPO main" | sudo tee /etc/apt/sources.list.d/gcsfuse.list
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
sudo apt-get update
sudo apt-get install gcsfuse

И теперь мы можем наконец монтироваться

gcsfuse db /mnt/gcs-bucket

Поэтому у нас есть место для хранения дамп, что дальше? Мы должны установить тот же PostgreSQL Версия на машине, так как удаленный сервер, чтобы получить рабочий PG_dump

echo "deb http://apt.postgresql.org/pub/repos/apt/ trusty-pgdg main 9.5" | sudo tee /etc/apt/sources.list.d/postgresql.list
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
apt-get install postgresql-9.5
sudo apt-get install postgresql-9.5

Теперь мы наконец можем сделать дамп:

pg_dump -h yourRDS.rds.amazonaws.com -p 5432 -F c -O -U postgres DATABASE > /mnt/gcs-bucket/db.dump

В зависимости от того, насколько большая ваша база данных займет довольно некоторое время. Что дальше, создайте свой экземпляр SQL на GCP. Существует функция импорта для файлов SQL из ведра, но к сожалению, не для свалов, поэтому мы должны сделать восстановление сложно.

pg_restore -h YourNewSQLInstanceIP -n public -U postgres-user -d DATABASE -1 /mnt/gcs-bucket/db.dump

Это даже потребуется дольше, обязательно убирайте IP компетерующего двигателя, что он может иметь доступ к экземпляру SQL.

Я сделал все, как ты сказал мне, но я получаю странные ошибки

Что-то вроде этого?

pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error from TOC entry 4198; 0 0 ACL children_of(integer) 
postgrespg_restore: [archiver (db)] could not execute query: ERROR: role "user" does not exist Command was: REVOKE ALL ON FUNCTION children_of(root_id integer) FROM PUBLIC;

Легко ответить, вы пропускаете пользователям в своей новой базе данных, которые ссылаются на дамп.

Как избежать этого?

Легко ответить, создайте пользователей. К сожалению, вы не можете экспортировать их из-за некоторых правил RDS, что делает невозможным сделать PG_DUMPALL -G (только пользователь и роли)

pg_dumpall -h yourRDS.cd8cncmdv7f0.eu-central-1.rds.amazonaws.com -g  -p 5432  -U postgres > /mnt/gcs-bucket/db_roles.dump

Это не работает, и вы получите ошибку

pg_dumpall: query failed: ERROR:  permission denied for relation pg_authid
pg_dumpall: query was: SELECT oid, rolname, rolsuper, rolinherit, rolcreaterole, rolcreatedb, rolcanlogin, rolconnlimit, rolpassword, rolvaliduntil, rolreplication, rolbypassrls, pg_catalog.shobj_description(oid, 'pg_authid') as rolcomment, rolname = current_user AS is_current_user FROM pg_authid ORDER BY 2

Потому что AWS RDS не делает запрос в качестве суперпользователя, и поэтому вы не можете его экспортировать. Однако, если вы создадите их вручную, он будет работать нормально

до следующего раза

Оригинал: «https://dev.to/mfahlandt/move-postgresql-to-google-cloud-sql-5bma»