【AWS】EC2インスタンスのPostgreSQLからRDSへデータを移行する
こんにちわ
がじぇったー (@hackmylife7) | Twitter
です。
結構ハマったのでEC2インスタンスからRDSへPostgreSQLのデータを移行する手順を書き残しておきます。
作業環境
移行元
- EC2(CentOS6)
- PostgreSQL 9.4.5
- EC2(CentOS7 管理用サーバ)
移行先
- RDS PostgreSQL 9.5.2
- 作業環境
- 前提
- TL;DR(要約)
- PostgreSQLのローカルインストール
- RDSにDBとUser(Role)の作成
- 移行元のPostgre DBのDump処理
- RDSへリストア処理
- 参考
- 初心者にお勧めのAWS本
前提
- PostgreSQLのデータ移行はpg_dumpallでまるっとdumpファイルを作成するのが便利ですが、RDSにたいしその方法でデータを移行するとsuperuser権限が必要な箇所で失敗します。
- https://forums.aws.amazon.com/thread.jspa?messageID=503791
- 作業の流れとしてはRDSを移行元と同様の環境にするためにDB,Roleなどを先に設定し、その後、移行元のPostgreSQLでデータのダンプ処理を行い、RDSにデータを反映します。
- 管理用サーバからRDSへのSecurityGroupの疎通設定は事前にされていることとします
TL;DR(要約)
- dump_allコマンド取得したdumpファイルは使えないと思ったが、userやDB作成を事前にRDSで行っておけばデータの取り込みができた
PostgreSQLのローカルインストール
まずEC2(CentOS7 管理用サーバ)にRDSのPostgreSQLと同じバージョンの PostgreSQLをインストールします
# yum update # yum -y install gcc readline-devel zlib-devel perl postgresql-contrib # cd /usr/local/src/ # useradd -m -d /home/postgres postgres # wget https://ftp.postgresql.org/pub/source/v9.5.2/postgresql-9.5.2.tar.gz # tar xvfz postgresql-9.5.2.tar.gz # cd postgresql-9.5.2 # ./configure # make # make check # make install
RDSにDBとUser(Role)の作成
管理用サーバからRDSにログインします
psql -h hogehoge.ap-northeast-1.rds.amazonaws.com -U postgres
移行元サーバの環境に合わせDBの作成
postgres=> create database hogehoge; CREATE DATABASE postgres=> create database hugahuga; CREATE DATABASE
移行元サーバの環境に合わせUser(Role)の作成
- 厳密にsuperuserはRDSで作成することはできないが、マスターユーザは以下のコマンドで作成が可能
postgres=> create role testuser with password 'aaaa' login; CREATE ROLE postgres=> grant rds_superuser to testuser; GRANT ROLE postgres=> \du ロール一覧 ロール名 | 属性 | メンバー ---------------+--------------------+----------------- testuser | | {rds_superuser} postgres | ロールを作成できる | {rds_superuser} : DBを作成できる rds_superuser | ログインできない | {} rdsadmin | スーパーユーザ | {} : ロールを作成できる : DBを作成できる rdsrepladmin | 継承なし | {} : ログインできない postgres=>
作成したDBの権限変更
postgres=> ALTER DATABASE testuser OWNER TO testuser; ALTER DATABASE postgres=> \l データベース一覧 名前 | 所有者 | エンコーディング | 照合順序 | Ctype(変換演算子) | アクセス権 -----------+----------+------------------+-------------+-------------------+----------------------- testuser | testuser | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
移行元のPostgre DBのDump処理
cd /tmp /usr/local/pgsql/bin/pg_dumpall -f "db_backupall_20200430.sql"
RDSへリストア処理
[root@ip-10-40-20-239 tmp]# /usr/local/pgsql/bin/psql -f db_backupall_20200430.sql --host hogehoge.ap-northeast-1.rds.amazonaws.com -U postgres --port 5432 --username testuser パスワードを入力
参考
Route 53 を使用中のドメインの DNS サービスにする - Amazon Route 53
How to solve privileges issues when restore PostgreSQL Database - Stack Overflow
https://www.ibcscorp.com/aws/rds/upgrading-postgresql/
https://www.postgresql.jp/document/9.2/html/app-pgdump.html
django - Migrate postgres dump to RDS - Stack Overflow
database migration - Migrate postgresql schema AWS RDS - Stack Overflow
https://forums.aws.amazon.com/thread.jspa?messageID=503791