sql >> データベース >  >> RDS >> Mysql

MySQLからPostgreSQLへの移行-知っておくべきこと

    データベースまたはプロジェクトをMySQLからPostgreSQLに移行する場合でも、MySQLの知識のみを持つ新しいプロジェクトにPostgreSQLを選択する場合でも、PostgreSQLと2つのデータベースシステムの違いについて知っておくべきことがいくつかあります。

    PostgreSQLは、独自のライセンスであるPostgreSQLライセンスの下でリリースされた完全なオープンソースデータベースシステムであり、「BSDまたはMITライセンスに類似したリベラルなオープンソースライセンス」と呼ばれています。これにより、オープンソースプロジェクトを開発および保守しているPostgreSQLグローバル開発グループ(一般にPGDGと呼ばれる)は、世界中の人々の助けを借りてプロジェクトを改善し、最も安定した機能豊富なデータベースソリューションの1つに変えることができました。現在、PostgreSQLは、機能、パフォーマンス、人気について、独自のオープンソースデータベースシステムと競合しています。

    PostgreSQLは、スケーラブルでカスタマイズ可能な、コンプライアンスの高いリレーショナルデータベースシステムであり、毎日それを改善する人々の活発なコミュニティがあります。

    PostgreSQLに必要なもの

    以前のブログでは、新しいプロジェクト用にPostgreSQLをセットアップして最適化する方法について説明しました。これはPostgreSQLの構成と動作の優れた入門書であり、https://severalnines.com/blog/setting-optimal-environment-postgresqlにあります。

    アプリケーションをMySQLからPostgreSQLに移行する場合、開始するのに最適な場所は、ソースMySQLデータベースと同様のハードウェアまたはホスティングプラットフォームでアプリケーションをホストすることです。

    オンプレミス

    データベースをオンプレミスでホストする場合、PostgreSQLをホストするには、通常、(仮想マシンではなく)ベアメタルホストが最適なオプションです。仮想マシンは時々いくつかの便利な機能を追加しますが、それらは一般にホストからの電力とパフォーマンスを失うという犠牲を伴いますが、ベアメタルはPostgreSQLソフトウェアがハードウェアとの間のより少ない層でパフォーマンスに完全にアクセスできるようにします。オンプレミスのホストは、フルタイムの従業員であろうと請負業者であろうと、アプリケーションのニーズに適したデータベースを維持するための管理者を必要とします。

    クラウド内

    クラウドホスティングは過去数年で長い道のりを歩んできました。世界中の無数の企業がクラウドベースのサーバーでデータベースをホストしています。クラウドホストは高度に構成可能であるため、データベースの特定のニーズに合わせて適切なサイズとパワーのホストを選択でき、それに見合ったコストがかかります。

    使用するホスティングオプションに応じて、新しいホストをすばやくプロビジョニングしたり、メモリ/ CPU /ディスクをすばやく調整したり、追加のバックアップ方法を利用したりすることができます。クラウドホストを選択するときは、ホストが専用か共有かを確認してください。専用は非常に高負荷のデータベースに適しています。もう1つの重要な点は、クラウドホストで利用可能なIOPSが、データベースアクティビティのニーズに十分対応できることを確認することです。 PostgreSQLのメモリプールが大きい場合でも、データをディスクに書き込んだり、メモリにないときにデータをフェッチしたりするためのディスク操作が常にあります。

    クラウドサービス

    PostgreSQLの人気が高まっているため、Heroku、Amazon AWSなどの多くのクラウドデータベースホスティングサービスで利用できるようになり、MySQLの人気に急速に追いついています。これらのサービスにより、サードパーティはPostgreSQLデータベースを簡単にホストおよび管理できるため、アプリケーションに集中できます。

    概念/用語の比較

    MySQLからPostgreSQLに移行する際にカバーするいくつかの比較、同様に動作するが違いがある一般的な構成パラメーター、用語、または概念があります。

    データベース用語

    さまざまなデータベース用語は、テクノロジのさまざまな実装内でさまざまな意味を持つ可能性があります。 MySQLとPostgreSQLの間には、少し異なって理解されるいくつかの基本的な用語があるため、翻訳が必要になる場合があります。

    「クラスター」

    MySQLでは、「クラスター」とは通常、クライアントには単一のデータベースまたはデータベースのセットとして表示されるように接続された複数のMySQLデータベースホストを指します。

    PostgreSQLでは、「クラスター」を参照する場合、それはデータベースソフトウェアとそのすべてのサブプロセスの単一の実行中のインスタンスであり、1つ以上のデータベースが含まれます。

    「データベース」

    MySQLでは、クエリは異なるデータベースのテーブルに同時にアクセスできます(ユーザーが各データベースにアクセスする権限を持っている場合)。

    SELECT *
    FROM customer_database.customer_table t1
    JOIN orders_database.order_table t2 ON t1.customer_id = t2.customer_id
    WHERE name = ‘Bob’;

    ただし、PostgreSQLでは、Foreign Data Wrappers(別のトピック)を使用しない限り、これは発生しません。代わりに、PostgreSQLデータベースには、MySQLのデータベースと同様に動作する複数の「スキーマ」のオプションがあります。スキーマにはテーブルやインデックスなどが含まれており、それらを格納するデータベースへの同じ接続から同時にアクセスできます。

    SELECT *
    FROM customer_schema.customer_table t1
    JOIN orders_schema.order_table t2 ON t1.customer_id = t2.customer_id
    WHERE name = ‘Bob’;

    PostgreSQLとのインターフェース

    MySQLコマンドラインクライアント(mysql)では、データベースとのインターフェースで「DESCRIBEテーブル」や「SHOWTABLES」などのキーが使用されます。 PostgreSQLコマンドラインクライアント(psql)は、独自の形式の「バックスラッシュコマンド」を使用します。たとえば、「SHOW TABLES」の代わりに、PostgreSQLのコマンドは「\ dt」であり、「SHOW DATABASES;」の代わりに、コマンドは「\l」です。

    「psql」のコマンドの完全なリストは、psql内のバックスラッシュコマンド「\?」で見つけることができます。

    言語サポート

    MySQLと同様に、PostgreSQLには、すべての主要言語用のライブラリとプラグイン、およびMySQLとOracleに沿ったODBCドライバーがあります。必要な言語に対応する優れた安定したライブラリを見つけるのは簡単な作業です。

    ストアドプロシージャ

    MySQLとは異なり、PostgreSQLにはサポートされている手続き型言語が幅広く用意されています。 PostgreSQLの基本インストールでは、サポートされている言語はPL / pgSQL(SQL Procedural Language)、PL / Tcl(Tcl Procedural Language)、PL / Perl(Perl Procedural Language)、およびPL / Python(Python Procedural Language)です。サードパーティの開発者は、メインのPostgreSQLグループで公式にサポートされていない言語をさらに使用している可能性があります。

    構成

    • メモリ

      MySQLは、MyISAMを使用する場合はkey_buffer_sizeで、InnoDBを使用する場合はinnodb_buffer_pool_sizeでこれを調整します。

      PostgreSQLは、データをキャッシュするためにデータベースに与えられたメインメモリブロックにshared_buffersを使用し、特定のシナリオで変更が必要な場合を除いて、通常はシステムメモリの約1/4を保持します。並べ替えにメモリを使用するクエリでは、work_mem値を使用しますが、この値は慎重に増やす必要があります。

    移行用のツール

    PostgreSQLへの移行には多少の作業が必要ですが、プロセスを支援するためにコミュニティが開発したツールがあります。通常、データをMySQLからPostgreSQLに変換/移行し、テーブル/インデックスを再作成します。ストアドプロシージャまたは関数は別の話であり、通常、部分的に、またはゼロから手動で書き直す必要があります。

    利用可能なツールの例としては、pgloaderとFromMySqlToPostgreSqlがあります。 Pgloaderは、Common Lispで記述されたツールで、COPYコマンドを使用してMySQLからPostgreSQLにデータをインポートし、データ、インデックス、外部キー、およびデータ変換を伴うコメントをロードして、意図したとおりにPostgreSQLでデータを正しく表します。 FromMySqlToPostgreSqlは、PHPで記述された同様のツールであり、MySQLデータ型をPostgreSQL、および外部キーとインデックスに変換できます。どちらのツールも無料ですが、他にも多くのツール(無料および有料)が存在し、各データベースソフトウェアの新しいバージョンがリリースされると新しく開発されます。

    データが正しく変換され、機能が期待どおりに機能することを確認するために、変換には常に移行後の詳細な評価を含める必要があります。タイミングとデータ検証のために、事前にテストすることを常にお勧めします。

    レプリケーションオプション

    レプリケーションが使用されているMySQLからのものである場合、または何らかの理由でレプリケーションが必要な場合、PostgreSQLにはいくつかのオプションがあり、レプリケーションで必要なものに応じて、それぞれに長所と短所があります。

    • 組み込み:

      デフォルトでは、PostgreSQLにはポイントインタイムリカバリ(PITR)用の独自のレプリケーションモードが組み込まれています。これは、ログ先行書き込みファイルが読み取られて再生されるスタンバイサーバーに送られるファイルベースのログ配布、または読み取り専用のスタンバイサーバーがデータベース接続を介してトランザクションログをフェッチして再生するストリーミングレプリケーションのいずれかを使用して設定できます。それら。

      これらの組み込みオプションのいずれかを「ウォームスタンバイ」または「ホットスタンバイ」として設定できます。「ウォームスタンバイ」は接続を許可しませんが、問題のあるマスターを置き換えるためにいつでもマスターになる準備ができています。 。 「ホットスタンバイ」を使用すると、読み取り専用接続で接続してクエリを発行できるだけでなく、必要に応じていつでも読み取り/書き込みマスターになる準備ができます。

    • スロニー:

      PostgreSQLの最も古いレプリケーションツールの1つはSlonyです。これは、高度なカスタマイズを可能にするトリガーベースのレプリケーション方法です。 Slonyを使用すると、マスターノードと任意の数のレプリカノードをセットアップでき、マスターを任意のノードに切り替えることができます。また、管理者は、複製するテーブル(すべてのテーブルが必要ない場合)を選択できます。障害や負荷分散の場合にデータを複製するだけでなく、特定のデータを他のサービスに送信したり、複製がPostgreSQLのさまざまなバージョン間で行われる可能性があるため、ダウンタイムのアップグレードを最小限に抑えたりするためにも使用されています。

      Slonyには、複製されるすべてのテーブルにPRIMARY KEY、またはnull許容列のないUNIQUEインデックスがあるという主な要件があります。

    • ブカルド:

      マルチマスターオプションに関しては、BucardoはPostgreSQLにとって数少ないものの1つです。 Slonyと同様に、PostgreSQLの上にあるサードパーティのソフトウェアパッケージです。 Bucardoは、自身を「非同期PostgreSQLレプリケーションシステムであり、マルチマスターとマルチスレーブの両方の操作を可能にします」と呼んでいます。主な利点はマルチマスターレプリケーションです。これはかなりうまく機能しますが、競合の解決が不足しているため、アプリケーションは発生する可能性のある問題を認識し、それに応じて修正する必要があります。

      他にも多くのレプリケーションツールがあり、アプリケーションに最適なものを見つけることは、特定のニーズによって異なります。

    今日のホワイトペーパーをダウンロードするClusterControlを使用したPostgreSQLの管理と自動化PostgreSQLの導入、監視、管理、スケーリングを行うために知っておくべきことについて学ぶホワイトペーパーをダウンロードする

    コミュニティ

    PostgreSQLには、必要となる可能性のある問題や情報を喜んで支援する活発なコミュニティがあります。

    • IRC

      管理者と開発者がPostgreSQLと関連するプロジェクト/問題について世界中でチャットしているため、#postgresqlという名前のアクティブなIRCチャットルームがfreenodeで利用できます。 Slony、Bucardoなどの詳細のためのさらに小さな部屋があります。

    • メーリングリスト

      「general」、「admin」、「performance」、さらには「初心者」(PostgreSQLを初めて使用する場合は、開始するのに最適な場所)用のPostgreSQLメーリングリストがいくつかあります。メーリングリストは世界中の多くの人によって購読されており、回答が必要な質問に回答するための非常に有用な豊富なリソースを提供します。

      PostgreSQLメーリングリストの完全なリストはhttps://www.postgresql.org/list/

      にあります。
    • ユーザーグループ

      ユーザーグループは、コミュニティに参加して積極的に参加するのに最適な場所です。世界中の多くの大都市では、PostgreSQLユーザーグループ(PUG)に参加して参加できます。参加できない場合は、開始することを検討してください。これらのグループは、ネットワーキング、新しいテクノロジーの学習、さらにはあらゆるレベルの経験を持つ人々に直接質問するのに最適です。

    • ドキュメント

      最も重要なことは、PostgreSQLが非常によく文書化されていることです。構成パラメーター、SQL関数、使用法などの情報はすべて、PostgreSQLのWebサイトで提供されている公式ドキュメントから簡単に知ることができます。不明な点がある場合は、コミュニティが前に概説したオプションを支援します。


    1. 'IN'句から順序を維持する

    2. プロバイダーは、Oracleクライアントのバージョンと互換性がありません

    3. MariaDBでSHOWLOCALESを実行する方法

    4. SQLServerの日付と時刻のデータ型の比較