前書き

PostgreSQLは「Postgres」とも呼ばれ、オープンソースのリレーショナルデータベース管理システム(RDBMS)です。 近年、https://db-engines.com/en/ranking_trend/system/PostgreSQL [人気の劇的な成長]が見られ、多くの開発者や企業が他のデータベースソリューションからPostgresにデータを移行しています。

特に、あるデータベース管理システムから別のデータベース管理システムに移行する場合、データベースを移行することは困難です。 pgLoaderは、PostgreSQLへの移行プロセスを簡素化することを目的としたオープンソースのデータベース移行ツールです。 MySQLやhttps://www.sqlite.org/index.html[SQLite]など、いくつかのファイルタイプとRBDMSからPostgreSQLへの移行をサポートしています。

このチュートリアルでは、pgLoaderをインストールし、それを使用して、リモートMySQLデータベースをSSL接続経由でPostgreSQLに移行する方法について説明します。 チュートリアルの終わり近くで、pgLoaderが役立ついくつかの異なる移行シナリオについても簡単に触れます。

前提条件

このチュートリアルを完了するには、次のものが必要です。

  • それぞれがUbuntu 18.04を実行している* 2 *サーバーへのアクセス。 両方のサーバーにファイアウォールと、sudo特権が設定された非rootユーザーが必要です。 これらを設定するには、https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-18-04 [Ubuntu 18.04の初期サーバーセットアップガイド]に従ってください。

  • MySQLは* 1つのサーバー*にインストールされています。 これを設定するには、https://www.digitalocean.com/community/tutorials/how-to-install-mysql-on-ubuntu-18-04 [How Ubuntu 18.04にMySQLをインストールする]。 ここにリンクされているすべての前提条件チュートリアルを完了するには、https://www.digitalocean.com/community/tutorials/how-で説明されているように、パスワードで認証するように* root * MySQLユーザーを構成する必要があることに注意してください。 to-install-mysql-on-ubuntu-18-04#step-3-%E2%80%94-(optional)-adjusting-user-authentication-and-privileges [ステップ3] MySQLインストールガイド。

  • PostgreSQLは*他のサーバー*にインストールされています。 これを設定するには、ガイドhttps://www.digitalocean.com/community/tutorials/how-to-install-and-use-postgresql-on-ubuntu-18-04 [インストール方法]の*ステップ1 *を完了します。 Ubuntu 18.04でPostgreSQLを使用する]。

  • * MySQLサーバー*も、暗号化された接続を受け入れるように設定する必要があります。 これを設定するには、https://www.digitalocean.com/community/tutorials/how-to-configure-ssl-tls-for-mysql-on-ubuntu-18-04 [How To]のチュートリアルのすべてのステップを完了しますオプションのhttps://www.digitalocean.com/community/tutorials/how-to-configure-ssl-tls-for-mysql-on-ubuntu-18-04#を含む、Ubuntu 18.04でMySQLのSSL / TLSを構成する] step-6-%E2%80%94-(オプション)-configure-validation-for-mysql-connections [* Step 6 *]。 このガイドに従って、PostgreSQLサーバーをMySQLクライアントマシンとして使用してください。pgLoaderでデータを移行するには、PostgresマシンからMySQLサーバーに接続できる必要があります。

このガイド全体で、MySQLをインストールしたサーバーは「* MySQLサーバー*」と呼ばれ、このマシンで実行する必要のあるコマンドは次のように青色の背景で表示されます。

同様に、このガイドでは、他のサーバーを「* PostgreSQL 」または「 Postgres」サーバー*と呼び、そのマシンで実行する必要のあるコマンドは赤の背景で表示されます。

混乱を避けるために、このチュートリアルに従うときはこれらを念頭に置いてください。

ステップ1-(オプション)MySQLでのサンプルデータベースとテーブルの作成

この手順では、テストデータベースを作成し、ダミーデータを入力するプロセスについて説明します。 このテストケースでpgLoaderの使用を練習することをお勧めしますが、移行するデータベースが既にある場合は、https://www.digitalocean.com/community/tutorials/how-to-migrate-に移動できます。 mysql-database-to-postgres-using-pgloader#step-2-%E2%80%94-installing-pgloader [次のステップ]。

MySQLサーバーでMySQLプロンプトを開くことから始めます。

mysql -u root -p
  • root * MySQLユーザーのパスワードを入力すると、MySQLプロンプトが表示されます。

そこから、次のコマンドを実行して新しいデータベースを作成します。 データベースには任意の名前を付けることができますが、このガイドでは「++」と名付けます。

CREATE DATABASE ;

次に、 `+ USE +`コマンドでこのデータベースに切り替えます:

USE ;
OutputDatabase changed

このデータベース内で、次のコマンドを使用してサンプルテーブルを作成します。 ここでは、このテーブルに「++」という名前を付けますが、別の名前を自由に付けることができます。

CREATE TABLE  (
   employee_id INT PRIMARY KEY,
   first_name VARCHAR(50),
   last_name VARCHAR(50),
   start_date DATE,
   salary VARCHAR(50)
);

次に、次のコマンドを使用して、このテーブルに従業員のサンプルデータを入力します。

INSERT INTO  (employee_id, first_name, last_name, start_date, salary)
VALUES (1, 'Elizabeth', 'Cotten', '2007-11-11', '$105433.18'),
(2, 'Yanka', 'Dyagileva', '2017-10-30', '$107540.67'),
(3, 'Lee', 'Dorsey', '2013-06-04', '$118024.04'),
(4, 'Kasey', 'Chambers', '2010-08-18', '$116456.98'),
(5, 'Bram', 'Tchaikovsky', '2018-09-16', '$61989.50');

これに続いて、MySQLプロンプトを閉じることができます。

exit

ダミーデータがロードされたサンプルデータベースができたので、PostgreSQLサーバーにpgLoaderをインストールする次のステップに進むことができます。

ステップ2-pgLoaderのインストール

pgLoaderは、さまざまなソースからPostgreSQLデータベースにデータをロードできるプログラムです。 PostgreSQLの `+ COPY +`コマンドを使用して、ソースデータベースまたはソースファイル(https:// enなど)からデータをコピーします。 wikipedia.org/wiki/Comma-separated_values [コンマ区切り値(CSV)]ファイル-ターゲットPostgreSQLデータベースへ。

pgLoaderはデフォルトのUbuntu APTリポジトリから入手でき、 `+ apt `コマンドを使用してインストールできます。 ただし、このガイドでは、SSL接続を介したMySQLからの移行を可能にするpgLoaderの「 useSSL +」オプションを利用します。 この機能は最新バージョンのpgLoaderでのみ使用できます。このバージョンの執筆時点では、GitHubリポジトリのソースコードを使用してのみインストールできます。

pgLoaderをインストールする前に、その依存関係をインストールする必要があります。 最近行っていない場合は、* Postgresサーバーの*パッケージインデックスを更新します。

sudo apt update

次に、次のパッケージをインストールします。

  • + sbcl +:https://en.wikipedia.org/wiki/Common_Lisp[Common Lisp]コンパイラ

  • + unzip +: `+ .zip +`ファイルのデアーカイバ

  • + libsqlite3-dev +:SQLite 3の開発ファイルのコレクション

  • + gawk +:「GNU awk」、パターンスキャンおよび処理言語の略

  • + curl +:URLからデータを転送するためのコマンドラインツール

  • + make +:パッケージのコンパイルを管理するユーティリティ

  • + freetds-dev +:MS SQLおよびSybaseデータベース用のクライアントライブラリ

  • + libzip-dev +:zipアーカイブを読み取り、作成、変更するためのライブラリ

次のコマンドを使用して、これらの依存関係をインストールします。

sudo apt install sbcl unzip libsqlite3-dev gawk curl make freetds-dev libzip-dev

プロンプトが表示されたら、 `+ ENTER`を押してこれらのパッケージをインストールすることを確認します。

次に、pgLoader GitHubプロジェクトのhttps://github.com/dimitri/pgloader/releases[Releases page]に移動して、最新リリースを見つけます。 このガイドでは、この記事の執筆時点での最新リリースhttps://github.com/dimitri/pgloader/releases/tag/v3.6.1 [バージョン3.6.1]を使用します。 その* Assets メニューまでスクロールダウンし、 Source code *というラベルの付いた `+ tar.gz `ファイルのリンクをコピーします。 次に、リンクを次の「 wget +」コマンドに貼り付けます。 これにより、tarballがサーバーにダウンロードされます。

wget

tarballを抽出します。

tar xvf

これにより、サーバー上にいくつかの新しいディレクトリとファイルが作成されます。 新しいpgLoader親ディレクトリに移動します。

cd pgloader-/

次に、 `+ make `ユーティリティを使用して ` pgloader +`バイナリをコンパイルします。

make pgloader

このコマンドは、 `+ pgloader +`バイナリをビルドするのに時間がかかります。

バイナリファイルを、Ubuntuが実行可能ファイルを探す場所である `+ / usr / local / bin`ディレクトリに移動します。

sudo mv ./build/bin/pgloader /usr/local/bin/

以下のように、バージョンを確認することにより、pgLoaderが正しくインストールされたことをテストできます。

pgloader --version
Outputpgloader version ""
compiled with SBCL 1.4.5.debian

pgLoaderがインストールされましたが、移行を開始する前に、PostgreSQLインスタンスとMySQLインスタンスの両方にいくつかの設定変更を行う必要があります。 まず、PostgreSQLサーバーに焦点を当てます。

ステップ3-PostgreSQLロールとデータベースの作成

`+ pgloader +`コマンドは、ソースデータをファイルから、またはデータベースから直接コピーし、PostgreSQLデータベースに挿入することで機能します。 このため、PostgresデータベースにアクセスできるLinuxユーザーとしてpgLoaderを実行するか、loadコマンドで適切な権限を持つPostgreSQLロールを指定する必要があります。

PostgreSQLは、https://www.postgresql.org/docs/8.1/user-manag.html [roles]を使用してデータベースアクセスを管理します。 ロールの構成方法に応じて、データベースユーザーまたはデータベースユーザーのグループとして考えることができます。 ほとんどのRDBMSでは、 + CREATE USER SQLコマンドを使用してユーザーを作成します。 ただし、Postgresには、 + createuser +`という便利なスクリプトがインストールされています。 このスクリプトは、コマンドラインから直接実行できる `+ CREATE USER + SQLコマンドのラッパーとして機能します。

Postgresサーバーで次のコマンドを実行して、新しいロールを作成します。 `+ -P `フラグに注意してください。これは、 ` createuser +`に新しいロールのパスワードの入力を求めるよう指示します。

sudo -u postgres createuser --interactive -P

最初に「+ sudo +」パスワードの入力を求められる場合があります。 スクリプトは、新しいロールの名前を入力するように求めます。 このガイドでは、このロールを* pgloader_pg *と呼びます。

OutputEnter name of role to add:

それに続いて、 `+ createuser +`はこのロールのパスワードの入力と確認を求めます。 手順5で移行を実行するために必要になるため、このパスワードを必ずメモしてください。

OutputEnter password for new role:
Enter it again:

最後に、スクリプトは、新しい役割をスーパーユーザーとして分類する必要があるかどうかを尋ねます。 PostgreSQLでは、スーパーユーザーロールを使用してデータベースに接続すると、ログインする権利を除き、データベースのすべての権限チェックを回避できます。 このため、スーパーユーザー権限は軽く使用しないでください。また、https://www.postgresql.org/docs/11/role-attributes.html [PostgreSQLドキュメントが推奨]では、データベースのほとんどの作業を非-スーパーユーザーの役割。 ただし、pgLoaderはデータにアクセスしてテーブルにロードするための幅広い特権を必要とするため、この新しい役割にスーパーユーザー特権を安全に付与できます。 これを行うには、「+ y 」と入力してから「 ENTER」を押します。

Output. . .
Shall the new role be a superuser? (y/n)

PostgreSQLには、コマンドラインからデータベースを作成できる別の便利なスクリプトが付属しています。 pgLoaderにはソースデータをロードできるターゲットデータベースも必要なので、次のコマンドを実行して作成します。 このデータベースに「++」という名前を付けますが、必要に応じて自由に変更してください。

sudo -u postgres createdb

エラーがない場合、このコマンドは出力なしで完了します。

専用のPostgreSQLユーザーと、MySQLデータをロードできる空のデータベースが用意できたので、移行を実行する前に必要な変更がいくつかあります。 ソースデータベースにアクセスできる専用のMySQLユーザーを作成し、クライアント側の証明書をUbuntuの信頼できる証明書ストアに追加する必要があります。

ステップ4-MySQLでの専用ユーザーの作成と証明書の管理

スヌーパーからデータを保護することは、データベース管理者の仕事の中で最も重要な部分の1つです。 あるマシンから別のマシンにデータを移行すると、暗号化されていないネットワーク接続を通過するパケットをhttps://en.wikipedia.org/wiki/Sniffing_attack[sniff]に悪意のあるアクターがアクセスできるようになります。 このステップでは、pgLoaderがSSL接続を介して移行を実行するために使用する専用のMySQLユーザーを作成します。

MySQLプロンプトを開くことから始めます。

mysql -u root -p

MySQLプロンプトから、次の `+ CREATE USER`コマンドを使用して新しいMySQLユーザーを作成します。 このユーザーに* pgloader_my *という名前を付けます。 このユーザーはPostgreSQLサーバーからのみMySQLにアクセスするため、「」を必ずPostgreSQLサーバーのパブリックIPアドレスに置き換えてください。 さらに、「」を安全なパスワードまたはパスフレーズに置き換えます。

CREATE USER ''@'' IDENTIFIED BY '' REQUIRE SSL;

このコマンドの最後にある `+ REQUIRE SSL +`句に注意してください。 これにより、* pgloader_my *ユーザーが安全なSSL接続を介してのみデータベースにアクセスするように制限されます。

次に、ターゲットデータベースとそのすべてのテーブルへの* pgloader_my *ユーザーアクセスを許可します。 ここでは、オプションのステップ1で作成したデータベースを指定しますが、独自のデータベースを移行する場合は、「++」の代わりにその名前を使用します。

GRANT ALL ON .* TO ''@'';

次に、 `+ FLUSH PRIVILEGES +`コマンドを実行して付与テーブルをリロードし、権限の変更を有効にします。

FLUSH PRIVILEGES;

この後、MySQLプロンプトを閉じることができます。

exit

次に、Postgresサーバーターミナルに戻り、新しい* pgloader_my *ユーザーとしてMySQLサーバーへのログインを試みます。 MySQL用のSSL / TLSの設定の前提条件ガイドに従った場合PostgreSQLサーバーにはすでに `+ mysql-client +`がインストールされており、次のコマンドで接続できるはずです。

mysql -u  -p -h

コマンドが成功すると、MySQLプロンプトが表示されます。

  • pgloader_my *ユーザーが正常に接続できることを確認したら、先に進んでプロンプトを閉じます。

exit

この時点で、Postgresマシンからソースデータベースにアクセスできる専用のMySQLユーザーがいます。 ただし、SSLを使用してMySQLデータベースを移行しようとすると、失敗します。

これは、pgLoaderがMySQLの構成ファイルを読み取ることができないため、前提条件https://www.digitaloceanでPostgreSQLサーバーにコピーしたCA証明書またはクライアント証明書を探す場所がわからないためです。 .com / community / tutorials / how-to-configure-ssl-tls-for-mysql-on-ubuntu-18-04 [SSL / TLS構成ガイド]。 ただし、SSL要件を無視するのではなく、MySQLへの接続にSSLが必要な場合、pgLoaderでは信頼できる証明書を使用する必要があります。 したがって、 `+ ca.pem `および ` client-cert.pem +`ファイルをhttps://help.ubuntu.com/lts/serverguide/certificates-and-security.html.enに追加することにより、この問題を解決できます。 [Ubuntuの信頼できる証明書ストア]。

これを行うには、 `+ ca.pem `および ` client-cert.pem `ファイルを ` / usr / local / share / ca-certificates / `ディレクトリにコピーします。 これらのファイルの名前を変更して、ファイルの拡張子が ` .crt +`になるようにする必要があることに注意してください。 名前を変更しないと、システムはこれらの新しい証明書を追加したことを認識できません。

sudo cp ~/client-ssl/ca.pem /usr/local/share/ca-certificates/ca.pem.crt
sudo cp ~/client-ssl/client-cert.pem /usr/local/share/ca-certificates/client-cert.pem.crt

これに続いて、 + update-ca-certificates +`コマンドを実行します。 このプログラムは、 `+ / usr / local / share / ca-certificates +`内で証明書を探し、 `+ / etc / ssl / certs / +`ディレクトリに新しい証明書を追加し、信頼できるSSL証明書のリストを生成します-+ ca-certificates.crt + - + / etc / ssl / certs / + `ディレクトリの内容に基づきます:

sudo update-ca-certificates
OutputUpdating certificates in /etc/ssl/certs...
2 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.

これで、MySQLデータベースをPostgreSQLに移行する準備が整いました。

ステップ5-データの移行

PostgreSQLサーバーからMySQLサーバーへのリモートアクセスを設定したので、移行を開始する準備が整いました。

pgLoaderを使用すると、ユーザーは1つのコマンドでデータベース全体を移行できます。 MySQLデータベースから別のサーバー上のPostgreSQLデータベースに移行する場合、コマンドの構文は次のとおりです。

pgloader mysql://:@/?=&= postgresql://:@/?=&=

これには、 `+ pgloader +`コマンドと2つの_接続文字列_が含まれます。1つ目はソースデータベース用、2つ目はターゲットデータベース用です。 これらの接続文字列はどちらも、接続文字列が指すDBMSの種類を宣言することから始まり、その後にデータベースにアクセスするユーザー名とパスワード(コロンで区切られます)、データベースがインストールされているサーバーのホストアドレス、ターゲットとするデータベースの名前pgLoader、およびpgLoaderの動作に影響するhttps://pgloader.readthedocs.io/en/latest/pgloader.html?highlight=connection%20string#connection-string [さまざまなオプション]

このチュートリアルの前半で定義したパラメーターを使用して、次の構造のコマンドを使用してMySQLデータベースを移行できます。 強調表示されている値を置き換えて、独自のセットアップに合わせてください。

pgloader mysql://:@/?useSSL=true postgresql://:@localhost/

このコマンドには、MySQL接続文字列に `+ useSSL `オプションが含まれていることに注意してください。 このオプションを「 true +」に設定すると、pgLoaderはSSL経由でMySQLに接続します。 セキュアな接続のみを受け入れるようにMySQLサーバーを設定したため、これが必要です。

このコマンドが成功すると、移行の進行状況を説明する出力テーブルが表示されます。

Output             table name     errors       rows      bytes      total time
-----------------------  ---------  ---------  ---------  --------------
       fetch meta data          0          2                     0.111s
        Create Schemas          0          0                     0.001s
      Create SQL Types          0          0                     0.005s
         Create tables          0          2                     0.017s
        Set Table OIDs          0          1                     0.010s
-----------------------  ---------  ---------  ---------  --------------
source_db.sample_table          0          5     0.2 kB          0.048s
-----------------------  ---------  ---------  ---------  --------------
COPY Threads Completion          0          4                     0.052s
Index Build Completion          0          1                     0.011s
        Create Indexes          0          1                     0.006s
       Reset Sequences          0          0                     0.014s
          Primary Keys          0          1                     0.001s
   Create Foreign Keys          0          0                     0.000s
       Create Triggers          0          0                     0.000s
      Install Comments          0          0                     0.000s
-----------------------  ---------  ---------  ---------  --------------
     Total import time          ✓          5     0.2 kB          0.084s

データが正しく移行されたことを確認するには、PostgreSQLプロンプトを開きます。

sudo -i -u postgres psql

そこから、データをロードしたデータベースに接続します。

\c

次に、次のクエリを実行して、移行したデータがPostgreSQLデータベースに保存されているかどうかをテストします。

SELECT * FROM .;

データが実際に正しくロードされた場合、クエリの出力に次の表が表示されます。

Output employee_id | first_name |  last_name  | start_date |   salary
-------------+------------+-------------+------------+------------
          1 | Elizabeth  | Cotten      | 2007-11-11 | $105433.18
          2 | Yanka      | Dyagileva   | 2017-10-30 | $107540.67
          3 | Lee        | Dorsey      | 2013-06-04 | $118024.04
          4 | Kasey      | Chambers    | 2010-08-18 | $116456.98
          5 | Bram       | Tchaikovsky | 2018-09-16 | $61989.50
(5 rows)

Postgresプロンプトを閉じるには、次のコマンドを実行します。

\q

MySQLデータベースをネットワーク経由で移行してPostgreSQLデータベースにロードする方法を検討したので、pgLoaderが役立つ可能性のある他の一般的な移行シナリオをいくつか見ていきます。

ステップ6-他の移行オプションの調査

pgLoaderは、さまざまな状況で役立つ柔軟性の高いツールです。 ここでは、pgLoaderを使用してMySQLデータベースをPostgreSQLに移行できる他のいくつかの方法について簡単に説明します。

pgLoaderロードファイルを使用した移行

pgLoaderのコンテキストでは、load file、または_command file_は、pgLoaderに移行の実行方法を指示するファイルです。 このファイルには、pgLoaderの動作に影響するコマンドとオプションを含めることができます。これにより、PostgreSQLへのデータのロード方法をより細かく制御でき、複雑な移行を実行できます。

pgLoaderのドキュメントは、これらのファイルを使用して拡張し、多くの移行タイプをサポートする方法に関する包括的な手順を提供します。比較的初歩的な例を通して作業します。 ステップ5で実行したのと同じ移行を実行しますが、「+ new_db 」データベースのスキーマを「 source_db 」から「 public 」に変更するための「 ALTER SCHEMA +」コマンドも含まれます。

開始するには、好みのテキストエディタを使用してPostgresサーバーに新しいロードファイルを作成します。

nano pgload_test.load

次に、以下のコンテンツを追加し、強調表示された値を更新して、独自の構成に合わせます。

pgload_test.load

LOAD DATABASE
    FROM      mysql://:@/?useSSL=true
    INTO pgsql://:@localhost/

WITH include drop, create tables

ALTER SCHEMA 'source_db' RENAME TO 'public'
;

これらの各句の機能は次のとおりです。

  • + LOAD DATABASE +:この行は、ファイルまたはデータアーカイブではなく、個別のデータベースからデータをロードするようにpgLoaderに指示します。

  • + FROM +:この句はソースデータベースを指定します。 この場合、https://www.digitalocean.com/community/tutorials/how-to-migrate-mysql-database-to-postgres-using-pgloader#stepで作成したMySQLデータベースの接続文字列を指します-1-%E2%80%94-(オプション)-サンプルデータベースとテーブルの作成-mysql [ステップ1]。

  • + INTO +:同様に、この行は、pgLoaderがデータをロードするPostgreSQLデータベースを指定します。

  • + WITH +:この句により、pgLoaderの特定の動作を定義できます。 MySQLの移行と互換性のある `+ WITH +`オプションの完全なリストを見つけることができますhttps://pgloader.readthedocs.io/en/latest/ref/mysql.html#mysql-database-migration-options-with[here] 。 この例では、2つのオプションのみを含めます。

  • + include drop +:このオプションを使用すると、pgLoaderは、ソースMySQLデータベースにも表示されるターゲットPostgreSQLデータベースのテーブルをすべて削除します。 データを既存のPostgreSQLデータベースに移行するときにこのオプションを使用する場合は、データが失われないようにデータベース全体をバックアップする必要があります。

  • + create tables +:このオプションは、MySQLデータベースに保持されているメタデータに基づいて、ターゲットPostgreSQLデータベースに新しいテーブルを作成するようにpgLoaderに指示します。 反対のオプションである「+ create no tables +」が使用される場合、ターゲットテーブルは移行前にターゲットPostgresデータベースにすでに存在している必要があります。

  • + ALTER SCHEMA:` + WITH`句の後に、このような特定のSQLコマンドを追加して、pgLoaderに追加のアクションを実行するように指示できます。 ここでは、pgLoaderに新しいPostgresデータベースのスキーマを `+ source_db `から ` public `に変更するように指示しますが、それはスキーマを作成した後にのみです。 ` BEFORE LOAD DO +`などの他の句内にこのようなコマンドをネストして、pgLoaderに移行プロセスの特定のポイントでこれらのコマンドを実行するよう指示することもできます。

これは、pgLoaderの動作を変更するためにロードファイルに含めることができるものの実例です。 ロードファイルに追加できる句の完全なリストとその機能は、https://pgloader.readthedocs.io/en/latest/pgloader.html#common-clauses [公式のpgLoaderドキュメント]にあります。

このコンテンツの追加が完了したら、ロードファイルを保存して閉じます。 それを使用するには、ファイルの名前を `+ pgloader +`コマンドの引数として含めます:

pgloader pgload_test.load

移行が成功したことをテストするには、Postgresプロンプトを開きます。

sudo -u postgres psql

次に、データベースに接続します。

\c

そして、次のクエリを実行します。

SELECT * FROM sample_table;
Output employee_id | first_name |  last_name  | start_date |   salary
-------------+------------+-------------+------------+------------
          1 | Elizabeth  | Cotten      | 2007-11-11 | $105433.18
          2 | Yanka      | Dyagileva   | 2017-10-30 | $107540.67
          3 | Lee        | Dorsey      | 2013-06-04 | $118024.04
          4 | Kasey      | Chambers    | 2010-08-18 | $116456.98
          5 | Bram       | Tchaikovsky | 2018-09-16 | $61989.50
(5 rows)

この出力は、pgLoaderがデータを正常に移行したこと、およびクエリで `+ source_db `スキーマを指定する必要がないため、ロードファイルに追加した ` ALTER SCHEMA +`コマンドが期待どおりに機能したことを確認しますデータ。

ロードファイルを使用して、あるデータベースに保持されているデータを別のマシンにある別のマシンに移行する場合、移行を成功させるために関連するネットワークおよびファイアウォールルールを調整する必要があります。

MySQLデータベースのPostgreSQLへのローカル移行

pgLoaderを使用して、MySQLデータベースを同じマシンに格納されているPostgreSQLデータベースに移行できます。 必要なのは、* root * MySQLユーザーにアクセスできるLinuxユーザープロファイルから移行コマンドを実行することだけです。

pgloader mysql://[email protected]/ pgsql://:@localhost/

このようなローカル移行を実行すると、MySQLのデフォルトのネットワーク設定やシステムのファイアウォールルールを変更する必要がなくなります。

CSVファイルからの移行

CSVファイルのデータを使用してPostgreSQLデータベースをロードすることもできます。

`+ load.csv +`という名前のデータのCSVファイルがあると仮定すると、Postgresデータベースにロードするコマンドは次のようになります。

pgloader load.csv pgsql://:@localhost/

CSV形式は完全に標準化されていないため、この方法でCSVファイルから直接データを読み込むと問題が発生する可能性があります。 幸いなことに、https://pgloader.readthedocs.io/en/latest/quickstart.html#csv [pgLoaderのコマンドラインオプション]にさまざまなオプションを含めるか、それらをロードファイルで指定することで、不規則性を修正できます。 詳細については、件名についてhttps://pgloader.readthedocs.io/en/latest/ref/csv.html[pgLoader documentation]を参照してください。

管理されたPostgreSQLデータベースへの移行

自己管理データベースから管理されたPostgreSQLデータベースへの移行を実行することもできます。 この種の移行がどのように見えるかを示すために、MySQLサーバーとDigitalOcean Managed PostgreSQL Databaseを使用します。 https://www.digitalocean.com/community/tutorials/how-to-migrate-mysql-database-to-postgres-using-pgloader#step-1-%E2%で作成したサンプルデータベースも使用します。 80%94-(オプション)-サンプルデータベースとテーブルをmysqlで作成する[ステップ1]が、そのステップをスキップして、移行する独自のデータベースがある場合は、その代わりに。

この移行では、pgLoaderの「+ useSSL 」オプションは必要ありません。これは、リモートMySQLデータベースでのみ機能し、ローカルMySQLデータベースからこの移行を実行するためです。 ただし、DigitalOcean Managed PostgreSQLデータベースをロードして接続するときに ` sslmode = require +`オプションを使用します。これにより、データが保護されたままになります。

今回は `+ useSSL `を使用していないため、 ` apt `を使用してpgLoaderを ` postgresql-client +`パッケージとともにインストールできます。これにより、MySQLサーバーからManaged PostgreSQL Databaseにアクセスできます。 :

sudo apt install pgloader postgresql-client

それに続いて、 `+ pgloader +`コマンドを実行してデータベースを移行できます。 これを行うには、管理対象データベースの接続文字列が必要です。

DigitalOcean Managed Databasesの場合、クラウドコントロールパネルから接続文字列をコピーできます。 最初に、左側のサイドバーメニューで[データベース]をクリックし、データの移行先のデータベースを選択します。 次に、[接続の詳細]セクションまで下にスクロールします。 ドロップダウンメニューをクリックして、接続文字列*を選択します。 次に、[コピー]ボタンをクリックして文字列をクリップボードにコピーし、次の移行コマンドに貼り付けて、ここに示すPostgreSQL接続文字列の例を置き換えます。 これにより、MySQLデータベースが doadmin * PostgreSQLロールとして + defaultdb + PostgreSQLデータベースに移行されます。

pgloader mysql://root:@localhost/ postgres://doadmin:@/defaultdb?sslmode=require

これに続いて、同じ接続文字列を `+ psql +`の引数として使用して、管理対象のPostgreSQLデータベースとhttps:// http://www.digitalocean.com/community/tutorials/how-to-migrate-mysqlに接続できます-database-to-postgres-using-pgloader#step-1-%E2%80%94-(オプション)-creating-a-sample-database-and-table-in-mysql [www.digitalocean.com/community/ tutorials / how-to-migrate-mysql-database-to-postgres-using-pgloader#step-1-%E2%80%94-(optional)-creating-a-sample-database-and-table-in-mysql ]移行が成功したことを確認します。

psql postgres://doadmin:@/defaultdb?sslmode=require

次に、次のクエリを実行して、pgLoaderがデータを正しく移行したことを確認します。

SELECT * FROM source_db.sample_table;
Output employee_id | first_name |  last_name  | start_date |   salary
-------------+------------+-------------+------------+------------
          1 | Elizabeth  | Cotten      | 2007-11-11 | $105433.18
          2 | Yanka      | Dyagileva   | 2017-10-30 | $107540.67
          3 | Lee        | Dorsey      | 2013-06-04 | $118024.04
          4 | Kasey      | Chambers    | 2010-08-18 | $116456.98
          5 | Bram       | Tchaikovsky | 2018-09-16 | $61989.50
(5 rows)

これにより、pgLoaderがMySQLデータベースを管理対象のPostgreSQLインスタンスに正常に移行したことが確認されます。

結論

pgLoaderは、単一のコマンドでデータベースの移行を実行できる柔軟なツールです。 いくつかの設定の調整により、安全なSSL / TLS接続を使用して、ある物理マシンから別の物理マシンにデータベース全体を移行できます。 このチュートリアルに従うことで、pgLoaderの機能と潜在的なユースケースをより明確に理解することができます。

データをPostgreSQLに移行した後、次のチュートリアルが役立つ場合があります。