PostgreSQLの「dump.sql」をMySQLに移行・インポート【CORESEVER】

先日、PostgreSQLで運用中のサイトが「500エラー(Internal Server Error)」になった。

ちょうどコアサーバーのリニューアル日程と同じタイミングで止まっていたみたいなので、その影響だろう。

以前もPostgreSQLに関しては、サーバーメンテナンスと同時にデータベースが全て消えたことがある。

そのとき問い合わせたときは、「サルベージしたけど、何も残ってない」との返答だったので、結局、自分で残してたバックアップを使って復元しました。

特にコアサーバーでPostgreSQLの廃止だとかいう情報は出ていないのですが、「こりゃもうPostgreSQLはトラブルの元だ」と思い、今回、PostgreSQLからMySQLへデータベースを移行することにしました。

ということで、そのときの備忘録になります。

状況

バリュードメインにログインし、コアサーバーの管理画面からPhpPgAdminにログインすると、下記のエラーが表示↓

「このバージョンの PostgreSQL はサポートしていません。バージョン 以上にアップグレードしてください。」

移行手順

PostgreSQLとMySQLではコマンドが違うので、dump.sqlの中身を書き換える必要があります。

ところが、以前、PostgreSQLで取っておいたバックアップファイル(dump.sql)の中身を見てみると、テーブルに関する情報が何も入っていない。

PostgreSQLはそういうものなのか?

結論から言うと、PostgreSQLで作ったdump.sqlをそのままインポートすることはできず。

PostgreSQLで作ったdump.sqlの中身からデータだけを取り出し、一旦CSV化、MySQLからそのCSVをインポートしました。

  1. コアサーバー管理画面から、MySQLデータベースを作成

  2. PostgreSQLで作ったdump.sqlの中身からデータだけを取り出したファイルを作成(SET・SELECT・COPYなどのコマンド類を全て削除。テーブルが複数ある場合は、その分、分けてファイルを作成します)

  3. MySQLにテーブル・カラムを手動で作成(テーブル名・カラム名はdump.sqlの中に残っていますが、データ型は残っていないので、記憶に頼りました)

  4. PostgreSQLで作ったdump.sqlの中身からデータだけを取り出したファイルをエクセルで開く(ファイルをダブルクリックしてエクセルを開くと、文字エンコードがUTF-8なので文字化けします。エクセルを開いて、[データ]-[テキストまたはCSVから]の手順でファイルを開いてください)

  5. CSV UTF-8(コンマ区切り)で保存

  6. テキストエディタ等でさきほどのCSVを開き、「\n(空)」を削除

  7. PhpPgAdminでMySQLに繋ぎ、CSVファイルをインポート

以上で作業完了です。

CGIプログラム側も、接続先がPostgreSQLになっているので、そちらのコード書き換えもお忘れなく。