このトピックでは、pg_dumpall、pg_dump、pg_restore コマンドを使用して、自主管理 PostgreSQL データベースを に移行する方法について説明します。
ソースデータベースが ApsaraDB RDS for PostgreSQL インスタンスの場合は、「ApsaraDB RDS for PostgreSQL インスタンスから PolarDB for PostgreSQL クラスターへのデータ移行」をご参照ください。
前提条件
ターゲットの クラスターには、ご利用の自主管理 PostgreSQL データベースよりも多くのストレージ容量が必要です。
注意事項
これは完全なデータ移行です。データの不整合を防ぐため、移行を開始する前に、自己管理データベース上のすべてのサービスと書き込み操作を停止してください。
事前準備
-
Linux を実行する Elastic Compute Service (ECS) インスタンスを作成します。このチュートリアルでは、64 ビット Ubuntu 16.04 を実行する ECS インスタンスを使用します。詳細については、「ECS インスタンスの作成」をご参照ください。
説明-
ECS インスタンスとターゲットの クラスターは、同じ VPC (Virtual Private Cloud) に属している必要があります。
-
従量課金の ECS インスタンスを作成し、移行完了後にリリースすることができます。
-
-
ECS インスタンスに PostgreSQL をインストールしてデータを復元します。詳細については、「PostgreSQL 公式ドキュメント」をご参照ください。
説明インストールする PostgreSQL のバージョンが、ご利用の自主管理 PostgreSQL データベースのバージョンと同じであることを確認してください。
ステップ1:自己管理データベースのバックアップ
-
ご利用の自主管理 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.sql -
-
Password:のプロンプトが表示されたら、データベースアカウントのパスワードを入力します。 -
vimコマンドを使用して、ロール情報バックアップファイル内のSUPERUSERをpolar_superuserに置き換えます。説明ロール情報バックアップファイルに
SUPERUSERが含まれていない場合は、このステップをスキップできます。-- PostgreSQL データベースクラスターのダンプ -- SET default_transaction_read_only = off; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; -- -- ロール -- CREATE ROLE data1; ALTER ROLE data1 WITH NOSUPERUSER INHERIT CREATEROLE CREATEDB LOGIN NOREPLICATION NOBYPASSRLS PASSWORD 'md5xxx'; CREATE ROLE manisha; ALTER ROLE manisha WITH NOSUPERUSER INHERIT NOCREATEROLE NOCREATEDB LOGIN NOREPLICATION NOBYPASSRLS PASSWORD 'mdxxx'; CREATE ROLE postgres; ALTER ROLE postgres WITH SUPERUSER INHERIT CREATEROLE CREATEDB LOGIN REPLICATION BYPASSRLS PASSWORD 'md5xxx'; CREATE ROLE testuser; ALTER ROLE testuser WITH NOSUPERUSER INHERIT NOCREATEROLE CREATEDB LOGIN NOREPLICATION NOBYPASSRLS; -- -- PostgreSQL データベースクラスターのダンプ完了 -
ご利用の自主管理 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 postgresdump -
-
Password:のプロンプトが表示されたら、データベースアカウントのパスワードを入力します。 -
バックアップが完了するまで待ちます。この例では、データは指定されたディレクトリ postgresdump にバックアップされます。
ステップ2: へのデータ移行
-
バックアップファイルを含むディレクトリを ECS インスタンスにアップロードします。
説明これには、ロール情報バックアップファイルとデータベースバックアップファイルが含まれます。
-
ECS インスタンスで、次のコマンドを実行して、バックアップファイルから クラスターにロール情報をインポートします。
psql -U <username> -h <hostname> -p <port> -d <dbname> -f <filename>パラメーター:
-
<username>: データベースのログインアカウント。
-
<hostname>: クラスターのプライマリプライベートエンドポイント。
-
<port>:データベースのポート番号。詳細については、「エンドポイントとポート番号の表示」をご参照ください。
-
<dbname>:接続するデータベースの名前。
-
<filename>:ロール情報バックアップファイルの名前。
psql -U gctest -h pc-xxxxxxxx.pg.polardb.cn-qd-pldb1.rds.aliyuncs.com -d testdb -p 1921 -f roleinfo.sql -
-
Password:のプロンプトが表示されたら、データベースアカウントのパスワードを入力します。 -
ECS インスタンスで、次のコマンドを実行して、データベースデータを クラスターに復元します。
pg_restore -U <username> -h <hostname> -p <port> -d <dbname> -j <njobs> <dumpdir>パラメーター:
-
<username>: データベースのログインアカウント。
-
<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 -
-
Password:のプロンプトが表示されたら、データベースアカウントのパスワードを入力します。説明パスワードを忘れた場合は、「データベースアカウントの管理」をご参照ください。
データ移行が完了するまで待ちます。