MySQL から Heroku 上の Postgres への移行
最終更新日 2022年12月01日(木)
Table of Contents
MySQL は、Oracle によって管理されている一般的なリレーショナルデータベースです。Heroku Postgres は、プラットフォームとの緊密な統合のために Heroku アプリに推奨されるリレーショナルデータベースですが、現在 MySQL 上で実行されているアプリケーションにもいくつかのオプションがあります。
MySQL アドオンのプロビジョニング
アプリケーションが MySQL 固有の機能を使用している場合、Heroku Add-ons マーケットプレイスには Heroku Postgres の代わりに使用できるいくつかの MySQL プロバイダーがあります。選択されたアドオンのプロビジョニング手順はプロバイダーごとに異なるため、各アドオンのドキュメントを参照してください。
Heroku Postgres への移行
ORM ライブラリを使用してデータベースにアクセスするほとんどのアプリケーションは、PostgreSQL データベースに容易に切り替えることができます。MySQL から PostgreSQL に切り替えるには、次の手順に従います。
PostgreSQL をローカルで実行する
開発と本番の同等性を確保するために、最初に PostgreSQL を使用してアプリケーションを開発環境で実行します。Heroku Postgres のドキュメントには、PostgreSQL をローカルにインストールするための手順が含まれています。
pgloader をインストールする
pgloader プロジェクトは、データベースを MySQL から Postgres に変換するための最も成熟したユーティリティです。このプロジェクトの README の手順に従って pgloader
をインストールします。
データを移行する
Postgres データベースを作成し、CLI を使用して pgloader
で MySQL データをそのデータベースに移行します。
createdb pgdbname
pgloader mysql://username:password@localhost/mysqldbname postgresql:///pgdbname
詳細は、README の使用法のセクション、または pgloader のクイックスタート を参照してください。
移行時間は、データベースのサイズや性質によって異なります。pgloader
のデフォルトレポートには、移行の進捗状況の推定に役立つ bytes
メトリクスが含まれています。古いハードウェアでは、1 分間に約 300 万行の移行速度が一般的です。一部の本番ハードウェアでは、pgloader
は 1 秒間に 6 MB のハード制限 (これは、CPU がボトルネックになる) に達します。
いずれかの一般的なエラーを識別して解決するには、アプリケーションを新しい PostgreSQL データベースに対して実行します。
データをローカルで PostgreSQL に移行したら、PG バックアップを使用して、このデータを Heroku Postgres データベースにインポートできます。