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をインポートしました。
-
コアサーバー管理画面から、MySQLデータベースを作成
-
PostgreSQLで作ったdump.sqlの中身からデータだけを取り出したファイルを作成(SET・SELECT・COPYなどのコマンド類を全て削除。テーブルが複数ある場合は、その分、分けてファイルを作成します)
-
MySQLにテーブル・カラムを手動で作成(テーブル名・カラム名はdump.sqlの中に残っていますが、データ型は残っていないので、記憶に頼りました)
-
PostgreSQLで作ったdump.sqlの中身からデータだけを取り出したファイルをエクセルで開く(ファイルをダブルクリックしてエクセルを開くと、文字エンコードがUTF-8なので文字化けします。エクセルを開いて、[データ]-[テキストまたはCSVから]の手順でファイルを開いてください)
-
CSV UTF-8(コンマ区切り)で保存
-
テキストエディタ等でさきほどのCSVを開き、「\n(空)」を削除
-
PhpPgAdminでMySQLに繋ぎ、CSVファイルをインポート
以上で作業完了です。
CGIプログラム側も、接続先がPostgreSQLになっているので、そちらのコード書き換えもお忘れなく。