このトピックでは、pg_dumpall、pg_dump、およびpg_restoreコマンドを使用して、セルフマネージド型PostgreSQLデータベースからPolarDB for PostgreSQLクラスターにデータを移行する方法について説明します。
ApsaraDB RDS for PostgreSQLインスタンスからPolarDB for PostgreSQLクラスターにデータを移行するには、「ApsaraDB RDS for PostgreSQLインスタンスからPolarDB for PostgreSQLクラスターへのデータの移行」をご参照ください。
前提条件
PolarDB for PostgreSQLクラスターの使用可能なストレージ容量は、自己管理型PostgreSQLデータベースの使用可能なストレージ容量よりも大きくなっています。
使用上の注意
この手順では、完全なデータが移行されます。 移行前と移行後のデータの不整合を防ぐため、移行中は業務活動を停止し、自己管理型PostgreSQLデータベースにデータを書き込まないでください。
準備
Linux Elastic Compute Service (ECS) インスタンスを作成します。 この例では、64ビットUbuntu 16.04を実行するECSインスタンスが使用されています。 詳細については、次をご参照ください: ECS インスタンスを作成します。
説明ECSインスタンスと移行先のPolarDB for PostgreSQLクラスターは、同じ仮想プライベートクラウド (VPC) に存在する必要があります。
従量課金 ECS インスタンスを作成して移行後にリリースすることができます。
Linux ECSインスタンスにPostgreSQLクライアントをインストールして、データ復元コマンドを実行します。 詳細は、「PostgreSQL 公式ドキュメント」をご参照ください。
説明インストール済みのPostgreSQLクライアントがソースPostgreSQLデータベースのバージョンと一致していることを確認します。
ステップ1: 自己管理型PostgreSQLデータベースのバックアップ
この手順では、完全なデータが移行されます。 移行前と移行後のデータの不整合を防ぐため、移行中は業務活動を停止し、自己管理型PostgreSQLデータベースにデータを書き込まないでください。
自己管理サーバーが存在するサーバーで次のコマンドを実行して、データベース内のすべてのロール情報をバックアップします。
pg_dumpall -U <username> -h <hostname> -p <port> -r -f <filename>パラメーター:
<username>: 自己管理型PostgreSQLデータベースへのログインに使用されるアカウント。
<hostname>: 自己管理型PostgreSQLデータベースのエンドポイント。 コマンドを実行するサーバーにデータベースがある場合は、localhostを使用します。
<port>:データベースサービスのポート番号。
<filename>:生成されたバックアップファイルの名前。
例:
pg_dumpall -U postgres -h localhost -p 5432 -r -f roleinfo.sqlPassword:プロンプトが表示されたら、データベースのパスワードを入力してバックアッププロセスを開始します。vimコマンドを実行して、ロール情報バックアップファイルのSUPERUSERをpolar_superuserに置き換えます。説明ロール情報バックアップファイルに
SUPERUSER情報が含まれていない場合は、この手順をスキップできます。
自己管理サーバーが存在するサーバーで次のコマンドを実行して、自己管理PostgreSQLデータベースのデータをバックアップします。
pg_dump -U <username> -h <hostname> -p <port> <dbname> -Fd -j <njobs> -f <dumpdir>パラメーター:
<username>: 自己管理型PostgreSQLデータベースへのログインに使用されるアカウント。
<hostname>: 自己管理型PostgreSQLデータベースのエンドポイント。 コマンドを実行するサーバーにデータベースがある場合は、localhostを使用します。
<port>:データベースサービスのポート番号。
<dbname>: データをバックアップするデータベースの名前。
<njobs>:並行して実行するバックアップジョブの数。
説明バックアップジョブを同時に実行すると、データのバックアップに必要な時間を短縮できますが、データベースサーバーの負荷が増加します。
自己管理型PostgreSQLデータベースが9.2より前の場合は、
-- no-synchronized-snapshotsパラメーターを指定する必要があります。
<dumpdir>:生成されたバックアップファイルのディレクトリ。
例:
pg_dump -U postgres -h localhost -p 5432 mytestdata -Fd -j 5 -f postgresdumpPassword:プロンプトが表示されたら、データベースのパスワードを入力してバックアッププロセスを開始します。自己管理型PostgreSQLインスタンス内のデータは、指定されたディレクトリにバックアップされます。 この例では、データは postgresdump ディレクトリに格納されています。
手順2: PolarDB for PostgreSQLクラスターへのデータの移行
バックアップファイルを含むディレクトリをECSインスタンスにアップロードします。
説明バックアップファイルには、ロール情報バックアップファイルとデータベースバックアップファイルが含まれます。
ECSインスタンスで次のコマンドを実行し、ロール情報バックアップファイルのロール情報をPolarDB for PostgreSQLクラスターに移行します。
psql -U <username> -h <hostname> -p <port> -d <dbname> -f <filename>パラメーター:
<username>: PolarDB for PostgreSQLクラスターへのログインに使用されるアカウント。
<hostname>: PolarDB for PostgreSQLクラスターのプライマリプライベートエンドポイント。
<port>:データベースサービスのポート番号。 詳細については、「エンドポイントとポート番号の表示」をご参照ください。
<dbname>: データを復元するデータベースの名前。
<filename>:ロール情報バックアップファイルの名前。
psql -U gctest -h pc-xxxxxxxx.pg.polardb.cn-qd-pldb1.rds.aliyuncs.com -d testdb -p 1921 -f roleinfo.sqlPassword:プロンプトが表示されたら、データベースのパスワードを入力してデータ移行を開始します。ECSインスタンスで次のコマンドを実行し、ソースデータベースからPolarDB for PostgreSQLクラスターにデータを移行します。
pg_restore -U <username> -h <hostname> -p <port> -d <dbname> -j <njobs> <dumpdir>パラメーター:
<username>: PolarDB for PostgreSQLクラスターへのログインに使用されるアカウント。
<hostname>: PolarDB for PostgreSQLクラスターのプライマリプライベートエンドポイント。 詳細については、「エンドポイントの表示または申請」をご参照ください。
<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 postgresdumpPassword:プロンプトが表示されたら、パスワードを入力してデータ移行を開始します。説明データベースのパスワードを忘れた場合は、「データベースアカウントの管理」をご参照ください。
データの移行が完了するまで待ちます。