18.04前書きPostgreSQLは「Postgres」とも呼ばれ、オープンソースのリレーショナルデータベース管理システム(RDBMS)です。[人気の劇的な成長]が見られ、多くの開発者や企業が他のデータベースソリューションからPostgresにデータを移行しています。あるデータベース管理システムから別のデータベース管理システムに移行する場合、データベースを移行することは困難です。pgLoaderは、PostgreSQLへの移行プロセスを簡素化することを目的としたオープンソースのデータベース移行ツールです。MySQLやhttps://www.sqlite.org/index.html[SQLite]など、いくつかのファイルタイプとRBDMSからPostgreSQLへの移行をサポートしています。このチュートリアルでは、pgLoaderをインストールし、それを使用して、リモートMySQLデータベースをSSL接続経由でPostgreSQLに移行する方法について説明します。チュートリアルの終わり近くで、pgLoaderが役立ついくつかの異なる移行シナリオについても簡単に触れます。前提条件このチュートリアルを完了するには、次のものが必要です。*サーバーへのアクセス。両方のサーバーにファイアウォールと、sudo特権が設定された非rootユーザーが必要です。18.04の初期サーバーセットアップガイド]に従ってください。1つのサーバー*にインストールされています。18.04にMySQLをインストールする]。MySQLユーザーを構成する必要があることに注意してください。MySQLインストールガイド。PostgreSQLは*他のサーバー*にインストールされています。18.04でPostgreSQLを使用する]。MySQLサーバー*も、暗号化された接続を受け入れるように設定する必要があります。このガイドに従って、PostgreSQLサーバーをMySQLクライアントマシンとして使用してください。pgLoaderでデータを移行するには、PostgresマシンからMySQLサーバーに接続できる必要があります。MySQLサーバー*」と呼ばれ、このマシンで実行する必要のあるコマンドは次のように青色の背景で表示されます。Postgres」サーバー*と呼び、そのマシンで実行する必要のあるコマンドは赤の背景で表示されます。混乱を避けるために、このチュートリアルに従うときはこれらを念頭に置いてください。ステップ1-(オプション)MySQLでのサンプルデータベースとテーブルの作成この手順では、テストデータベースを作成し、ダミーデータを入力するプロセスについて説明します。このテストケースでpgLoaderの使用を練習することをお勧めしますが、移行するデータベースが既にある場合は、https://www.digitalocean.com/community/tutorials/how-to-migrate-に移動できます。MySQLサーバーでMySQLプロンプトを開くことから始めます。MySQLユーザーのパスワードを入力すると、MySQLプロンプトが表示されます。そこから、次のコマンドを実行して新しいデータベースを作成します。データベースには任意の名前を付けることができますが、このガイドでは「++」と名付けます。changedこのデータベース内で、次のコマンドを使用してサンプルテーブルを作成します。ここでは、このテーブルに「++」という名前を付けますが、別の名前を自由に付けることができます。VARCHAR(50));次に、次のコマンドを使用して、このテーブルに従業員のサンプルデータを入力します。'$61989.50');これに続いて、MySQLプロンプトを閉じることができます。exitダミーデータがロードされたサンプルデータベースができたので、PostgreSQLサーバーにpgLoaderをインストールする次のステップに進むことができます。ステップ2-pgLoaderのインストールpgLoaderは、さまざまなソースからPostgreSQLデータベースにデータをロードできるプログラムです。enなど)からデータをコピーします。[コンマ区切り値(CSV)]ファイル-ターゲットPostgreSQLデータベースへ。`コマンドを使用してインストールできます。+」オプションを利用します。この機能は最新バージョンのpgLoaderでのみ使用できます。このバージョンの執筆時点では、GitHubリポジトリのソースコードを使用してのみインストールできます。pgLoaderをインストールする前に、その依存関係をインストールする必要があります。Postgresサーバーの*パッケージインデックスを更新します。update次に、次のパッケージをインストールします。+:zipアーカイブを読み取り、作成、変更するためのライブラリ次のコマンドを使用して、これらの依存関係をインストールします。ENTER`を押してこれらのパッケージをインストールすることを確認します。page]に移動して、最新リリースを見つけます。[バージョン3.6.1]を使用します。`ファイルのリンクをコピーします。+」コマンドに貼り付けます。これにより、tarballがサーバーにダウンロードされます。wgettarballを抽出します。xvfこれにより、サーバー上にいくつかの新しいディレクトリとファイルが作成されます。新しいpgLoader親ディレクトリに移動します。+`バイナリをコンパイルします。+`バイナリをビルドするのに時間がかかります。bin`ディレクトリに移動します。/usr/local/bin/以下のように、バージョンを確認することにより、pgLoaderが正しくインストールされたことをテストできます。1.4.5.debianpgLoaderがインストールされましたが、移行を開始する前に、PostgreSQLインスタンスとMySQLインスタンスの両方にいくつかの設定変更を行う必要があります。PostgreSQLサーバーに焦点を当てます。+`コマンドは、ソースデータをファイルから、またはデータベースから直接コピーし、PostgreSQLデータベースに挿入することで機能します。このため、PostgresデータベースにアクセスできるLinuxユーザーとしてpgLoaderを実行するか、loadコマンドで適切な権限を持つPostgreSQLロールを指定する必要があります。[roles]を使用してデータベースアクセスを管理します。ロールの構成方法に応じて、データベースユーザーまたはデータベースユーザーのグループとして考えることができます。SQLコマンドを使用してユーザーを作成します。+`という便利なスクリプトがインストールされています。SQLコマンドのラッパーとして機能します。Postgresサーバーで次のコマンドを実行して、新しいロールを作成します。`フラグに注意してください。+`に新しいロールのパスワードの入力を求めるよう指示します。+」パスワードの入力を求められる場合があります。スクリプトは、新しいロールの名前を入力するように求めます。+`はこのロールのパスワードの入力と確認を求めます。手順5で移行を実行するために必要になるため、このパスワードを必ずメモしてください。again:最後に、スクリプトは、新しい役割をスーパーユーザーとして分類する必要があるかどうかを尋ねます。PostgreSQLでは、スーパーユーザーロールを使用してデータベースに接続すると、ログインする権利を除き、データベースのすべての権限チェックを回避できます。このため、スーパーユーザー権限は軽く使用しないでください。[PostgreSQLドキュメントが推奨]では、データベースのほとんどの作業を非-スーパーユーザーの役割。pgLoaderはデータにアクセスしてテーブルにロードするための幅広い特権を必要とするため、この新しい役割にスーパーユーザー特権を安全に付与できます。ENTER」を押します。(y/n)PostgreSQLには、コマンドラインからデータベースを作成できる別の便利なスクリプトが付属しています。pgLoaderにはソースデータをロードできるターゲットデータベースも必要なので、次のコマンドを実行して作成します。このデータベースに「++」という名前を付けますが、必要に応じて自由に変更してください。createdbエラーがない場合、このコマンドは出力なしで完了します。専用のPostgreSQLユーザーと、MySQLデータをロードできる空のデータベースが用意できたので、移行を実行する前に必要な変更がいくつかあります。ソースデータベースにアクセスできる専用のMySQLユーザーを作成し、クライアント側の証明書をUbuntuの信頼できる証明書ストアに追加する必要があります。ステップ4-MySQLでの専用ユーザーの作成と証明書の管理スヌーパーからデータを保護することは、データベース管理者の仕事の中で最も重要な部分の1つです。あるマシンから別のマシンにデータを移行すると、暗号化されていないネットワーク接続を通過するパケットをhttps://en.wikipedia.org/wiki/Sniffing_attack[sniff]に悪意のあるアクターがアクセスできるようになります。このステップでは、pgLoaderがSSL接続を介して移行を実行するために使用する専用のMySQLユーザーを作成します。MySQLプロンプトを開くことから始めます。USER`コマンドを使用して新しいMySQLユーザーを作成します。*という名前を付けます。このユーザーはPostgreSQLサーバーからのみMySQLにアクセスするため、「」を必ずPostgreSQLサーバーのパブリックIPアドレスに置き換えてください。「」を安全なパスワードまたはパスフレーズに置き換えます。+`句に注意してください。*ユーザーが安全なSSL接続を介してのみデータベースにアクセスするように制限されます。*ユーザーアクセスを許可します。ここでは、オプションのステップ1で作成したデータベースを指定しますが、独自のデータベースを移行する場合は、「++」の代わりにその名前を使用します。+`コマンドを実行して付与テーブルをリロードし、権限の変更を有効にします。PRIVILEGES;この後、MySQLプロンプトを閉じることができます。*ユーザーとしてMySQLサーバーへのログインを試みます。+`がインストールされており、次のコマンドで接続できるはずです。-hコマンドが成功すると、MySQLプロンプトが表示されます。*ユーザーが正常に接続できることを確認したら、先に進んでプロンプトを閉じます。exitこの時点で、Postgresマシンからソースデータベースにアクセスできる専用のMySQLユーザーがいます。SSLを使用してMySQLデータベースを移行しようとすると、失敗します。これは、pgLoaderがMySQLの構成ファイルを読み取ることができないため、前提条件https://www.digitaloceanでPostgreSQLサーバーにコピーしたCA証明書またはクライアント証明書を探す場所がわからないためです。SSL要件を無視するのではなく、MySQLへの接続にSSLが必要な場合、pgLoaderでは信頼できる証明書を使用する必要があります。+`ファイルをhttps://help.ubuntu.com/lts/serverguide/certificates-and-security.html.enに追加することにより、この問題を解決できます。[Ubuntuの信頼できる証明書ストア]。`ディレクトリにコピーします。+`になるようにする必要があることに注意してください。名前を変更しないと、システムはこれらの新しい証明書を追加したことを認識できません。+`コマンドを実行します。/etc/ca-certificates/update.d...done.これで、MySQLデータベースをPostgreSQLに移行する準備が整いました。ステップ5-データの移行PostgreSQLサーバーからMySQLサーバーへのリモートアクセスを設定したので、移行を開始する準備が整いました。pgLoaderを使用すると、ユーザーは1つのコマンドでデータベース全体を移行できます。MySQLデータベースから別のサーバー上のPostgreSQLデータベースに移行する場合、コマンドの構文は次のとおりです。+`コマンドと2つの_接続文字列_が含まれます。1つ目はソースデータベース用、2つ目はターゲットデータベース用です。[さまざまなオプション]このチュートリアルの前半で定義したパラメーターを使用して、次の構造のコマンドを使用してMySQLデータベースを移行できます。強調表示されている値を置き換えて、独自のセットアップに合わせてください。`オプションが含まれていることに注意してください。+」に設定すると、pgLoaderはSSL経由でMySQLに接続します。セキュアな接続のみを受け入れるようにMySQLサーバーを設定したため、これが必要です。このコマンドが成功すると、移行の進行状況を説明する出力テーブルが表示されます。0.084sデータが正しく移行されたことを確認するには、PostgreSQLプロンプトを開きます。psqlそこから、データをロードしたデータベースに接続します。\c次に、次のクエリを実行して、移行したデータがPostgreSQLデータベースに保存されているかどうかをテストします。.;データが実際に正しくロードされた場合、クエリの出力に次の表が表示されます。rows)Postgresプロンプトを閉じるには、次のコマンドを実行します。\qMySQLデータベースをネットワーク経由で移行してPostgreSQLデータベースにロードする方法を検討したので、pgLoaderが役立つ可能性のある他の一般的な移行シナリオをいくつか見ていきます。ステップ6-他の移行オプションの調査pgLoaderは、さまざまな状況で役立つ柔軟性の高いツールです。ここでは、pgLoaderを使用してMySQLデータベースをPostgreSQLに移行できる他のいくつかの方法について簡単に説明します。file_は、pgLoaderに移行の実行方法を指示するファイルです。このファイルには、pgLoaderの動作に影響するコマンドとオプションを含めることができます。これにより、PostgreSQLへのデータのロード方法をより細かく制御でき、複雑な移行を実行できます。pgLoaderのドキュメントは、これらのファイルを使用して拡張し、多くの移行タイプをサポートする方法に関する包括的な手順を提供します。比較的初歩的な例を通して作業します。+」コマンドも含まれます。開始するには、好みのテキストエディタを使用してPostgresサーバーに新しいロードファイルを作成します。pgload_test.load次に、以下のコンテンツを追加し、強調表示された値を更新して、独自の構成に合わせます。'public';これらの各句の機能は次のとおりです。+:この行は、ファイルまたはデータアーカイブではなく、個別のデータベースからデータをロードするようにpgLoaderに指示します。+:この句はソースデータベースを指定します。+:同様に、この行は、pgLoaderがデータをロードするPostgreSQLデータベースを指定します。+:この句により、pgLoaderの特定の動作を定義できます。+`オプションの完全なリストを見つけることができますhttps://pgloader.readthedocs.io/en/latest/ref/mysql.html#mysql-database-migration-options-with[here]。この例では、2つのオプションのみを含めます。+:このオプションを使用すると、pgLoaderは、ソースMySQLデータベースにも表示されるターゲットPostgreSQLデータベースのテーブルをすべて削除します。データを既存のPostgreSQLデータベースに移行するときにこのオプションを使用する場合は、データが失われないようにデータベース全体をバックアップする必要があります。+:このオプションは、MySQLデータベースに保持されているメタデータに基づいて、ターゲットPostgreSQLデータベースに新しいテーブルを作成するようにpgLoaderに指示します。+」が使用される場合、ターゲットテーブルは移行前にターゲットPostgresデータベースにすでに存在している必要があります。WITH`句の後に、このような特定のSQLコマンドを追加して、pgLoaderに追加のアクションを実行するように指示できます。`に変更するように指示しますが、それはスキーマを作成した後にのみです。+`などの他の句内にこのようなコマンドをネストして、pgLoaderに移行プロセスの特定のポイントでこれらのコマンドを実行するよう指示することもできます。これは、pgLoaderの動作を変更するためにロードファイルに含めることができるものの実例です。[公式のpgLoaderドキュメント]にあります。このコンテンツの追加が完了したら、ロードファイルを保存して閉じます。pgload_test.load移行が成功したことをテストするには、Postgresプロンプトを開きます。psql次に、データベースに接続します。\cそして、次のクエリを実行します。+`コマンドが期待どおりに機能したことを確認しますデータ。ロードファイルを使用して、あるデータベースに保持されているデータを別のマシンにある別のマシンに移行する場合、移行を成功させるために関連するネットワークおよびファイアウォールルールを調整する必要があります。MySQLデータベースのPostgreSQLへのローカル移行pgLoaderを使用して、MySQLデータベースを同じマシンに格納されているPostgreSQLデータベースに移行できます。MySQLユーザーにアクセスできるLinuxユーザープロファイルから移行コマンドを実行することだけです。pgsql://:@localhost/このようなローカル移行を実行すると、MySQLのデフォルトのネットワーク設定やシステムのファイアウォールルールを変更する必要がなくなります。CSVファイルからの移行CSVファイルのデータを使用してPostgreSQLデータベースをロードすることもできます。+`という名前のデータのCSVファイルがあると仮定すると、Postgresデータベースにロードするコマンドは次のようになります。pgsql://:@localhost/CSV形式は完全に標準化されていないため、この方法でCSVファイルから直接データを読み込むと問題が発生する可能性があります。[pgLoaderのコマンドラインオプション]にさまざまなオプションを含めるか、それらをロードファイルで指定することで、不規則性を修正できます。documentation]を参照してください。自己管理データベースから管理されたPostgreSQLデータベースへの移行を実行することもできます。Databaseを使用します。https://www.digitalocean.com/community/tutorials/how-to-migrate-mysql-database-to-postgres-using-pgloader#step-1-%E2%で作成したサンプルデータベースも使用します。80%94-(オプション)-サンプルデータベースとテーブルをmysqlで作成する[ステップ1]が、そのステップをスキップして、移行する独自のデータベースがある場合は、その代わりに。」オプションは必要ありません。これは、リモートMySQLデータベースでのみ機能し、ローカルMySQLデータベースからこの移行を実行するためです。+`オプションを使用します。これにより、データが保護されたままになります。+`パッケージとともにインストールできます。Databaseにアクセスできます。+`コマンドを実行してデータベースを移行できます。これを行うには、管理対象データベースの接続文字列が必要です。Databasesの場合、クラウドコントロールパネルから接続文字列をコピーできます。最初に、左側のサイドバーメニューで[データベース]をクリックし、データの移行先のデータベースを選択します。次に、[接続の詳細]セクションまで下にスクロールします。ドロップダウンメニューをクリックして、接続文字列*を選択します。次に、[コピー]ボタンをクリックして文字列をクリップボードにコピーし、次の移行コマンドに貼り付けて、ここに示すPostgreSQL接続文字列の例を置き換えます。PostgreSQLデータベースに移行されます。]移行が成功したことを確認します。postgres://doadmin:@/defaultdb?sslmode=require次に、次のクエリを実行して、pgLoaderがデータを正しく移行したことを確認します。rows)これにより、pgLoaderがMySQLデータベースを管理対象のPostgreSQLインスタンスに正常に移行したことが確認されます。結論pgLoaderは、単一のコマンドでデータベースの移行を実行できる柔軟なツールです。TLS接続を使用して、ある物理マシンから別の物理マシンにデータベース全体を移行できます。このチュートリアルに従うことで、pgLoaderの機能と潜在的なユースケースをより明確に理解することができます。データをPostgreSQLに移行した後、次のチュートリアルが役立つ場合があります。