pg_dumpall、pg_dump、および pg_restore を使用して、中間の Elastic Compute Service (ECS) インスタンスを経由し、自主管理 PostgreSQL データベースから PolarDB for PostgreSQL クラスターへ完全なオフライン移行を実行します。
ApsaraDB RDS for PostgreSQL インスタンスからの移行を行う場合は、「ApsaraDB RDS for PostgreSQL インスタンスから PolarDB for PostgreSQL クラスターへのデータ移行」をご参照ください。
仕組み
この移行は、以下の 4 つのステップで実行されます。
移行先クラスターと同じ仮想プライベートクラウド (VPC) 内に ECS インスタンスを準備します。
ソース PostgreSQL データベースからロール情報およびデータベースデータをバックアップします。
バックアップファイルを ECS インスタンスにアップロードし、PolarDB for PostgreSQL クラスターに復元します。
データが正常に移行されたことを確認します。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
ソースデータベースのサイズよりも大きなストレージ容量を備えた PolarDB for PostgreSQL クラスター
移行先クラスターと同じ VPC 内で動作する Linux ECS インスタンス(64 ビット Ubuntu 16.04)。移行完了後にリリース可能な従量課金インスタンスでも構いません。
ECS インスタンスにインストールされた PostgreSQL クライアント。このクライアントは、ソースデータベースの**メジャーバージョンと一致する**必要があります。インストール手順については、「PostgreSQL ドキュメント」をご参照ください。
クライアントのバージョン不一致は、移行失敗の主な原因です。クライアントのバージョンがソースデータベースのバージョンと一致することを必ず確認してください。
ECS インスタンスの作成方法については、「ECS インスタンスの作成」をご参照ください。
注意事項
本手順では、**完全なデータ移行**を実行します。移行を開始する前に、ソースデータベースに対するすべての書き込み操作を停止し、移行中は読み取り専用状態を維持してください。これにより、データの不整合を防止できます。
ステップ 1:自主管理 PostgreSQL データベースのバックアップ
以下のコマンドを、自主管理 PostgreSQL データベースをホストするサーバー上で実行します。
ロール情報のバックアップ
pg_dump はロールをエクスポートしません。すべてのロール定義を個別にバックアップするには、pg_dumpall -r を使用します。
pg_dumpall -U <username> -h <hostname> -p <port> -r -f <filename>| パラメーター | 説明 |
|---|---|
<username> | ソースデータベースにログインするために使用するアカウント |
<hostname> | ソースデータベースのエンドポイント。同一サーバー上でコマンドを実行する場合は localhost を指定します。 |
<port> | データベースサービスのポート番号 |
<filename> | ロールバックアップの出力ファイル名 |
例:
pg_dumpall -U postgres -h localhost -p 5432 -r -f roleinfo.sqlPassword: のプロンプトが表示されたら、データベースのパスワードを入力してバックアップ処理を開始します。
SUPERUSER を polar_superuser に置き換え
PolarDB for PostgreSQL では、標準 PostgreSQL の SUPERUSER 特権の代わりに polar_superuser を使用します。ロールを復元する前に、バックアップファイルをこの差異に合わせて更新してください。
vim コマンドを実行し、ロール情報のバックアップファイル内の SUPERUSER を polar_superuser に置き換えます。
バックアップファイルに SUPERUSER のエントリが含まれていない場合は、本ステップをスキップしてください。

データベースデータのバックアップ
pg_dump -U <username> -h <hostname> -p <port> <dbname> -Fd -j <njobs> -f <dumpdir>| パラメーター | 説明 |
|---|---|
<username> | ソースデータベースにログインするために使用するアカウント |
<hostname> | ソースデータベースのエンドポイント。同一サーバー上でコマンドを実行する場合は localhost を指定します。 |
<port> | データベースサービスのポート番号 |
<dbname> | バックアップ対象のデータベース名 |
<njobs> | 同時実行するバックアップジョブ数。ジョブ数を増やすとバックアップ時間が短縮されますが、サーバー負荷が高まります。 |
<dumpdir> | バックアップファイルの出力ディレクトリ |
ソース PostgreSQL データベースのバージョンが 9.2 より前の場合、--no-synchronized-snapshots フラグを追加してください。例:
pg_dump -U postgres -h localhost -p 5432 mytestdata -Fd -j 5 -f postgresdumpバックアップファイルは、指定したディレクトリ(本例では postgresdump)に保存されます。
Password: のプロンプトが表示されたら、データベースのパスワードを入力してバックアップ処理を開始します。
ステップ 2:PolarDB for PostgreSQL クラスターへのデータ移行
以下のコマンドを ECS インスタンス上で実行します。
バックアップファイルの ECS インスタンスへのアップロード
ロールのバックアップファイルおよびデータベースのバックアップディレクトリを ECS インスタンスにアップロードします。
ロール情報の復元
psql -U <username> -h <hostname> -p <port> -d <dbname> -f <filename>| パラメーター | 説明 |
|---|---|
<username> | PolarDB for PostgreSQL クラスターにログインするために使用するアカウント |
<hostname> | クラスターのプライマリプライベートエンドポイント。詳細については、「エンドポイントの表示または申請 |
<port> | データベースサービスのポート番号。詳細については、「エンドポイントおよびポート番号の表示 |
<dbname> | 送信先データベース名 |
<filename> | ロールバックアップファイル名 |
例:
psql -U gctest -h pc-xxxxxxxx.pg.polardb.cn-qd-pldb1.rds.aliyuncs.com -d testdb -p 1921 -f roleinfo.sqlPassword: のプロンプトが表示されたら、データベースのパスワードを入力してデータ移行を開始します。
データベースデータの復元
pg_restore -U <username> -h <hostname> -p <port> -d <dbname> -j <njobs> <dumpdir>| パラメーター | 説明 |
|---|---|
<username> | PolarDB for PostgreSQL クラスターにログインするために使用するアカウント |
<hostname> | クラスターのプライマリプライベートエンドポイント。詳細については、「エンドポイントの表示または申請 |
<port> | データベースサービスのポート番号。詳細については、「エンドポイントおよびポート番号の表示 |
<dbname> | 送信先データベース名。このデータベースはクラスター内にあらかじめ存在している必要があります — 必要に応じて、事前に作成してください。 |
<njobs> | 同時実行する復元ジョブ数。ジョブ数を増やすと復元時間が短縮されますが、サーバー負荷が高まります。 |
<dumpdir> | バックアップファイルを含むディレクトリ |
例:
pg_restore -U gctest -h pc-mxxxxxxxx.pg.polardb.cn-qd-pldb1.rds.aliyuncs.com -p 1921 -d mytestdata -j 6 postgresdumpデータベースアカウントのパスワードを再設定する必要がある場合は、「データベースアカウントの管理」をご参照ください。
移行が完了するまで、次のステップに進まないでください。
次のステップ
アプリケーションの接続文字列を PolarDB for PostgreSQL クラスターのエンドポイントに変更することで、書き込み操作を再開します。
本移行のために従量課金 ECS インスタンスを作成した場合は、課金を停止するためにリリースしてください。