はじめに
あるアプリケーション内のDBを別のアプリケーションに取り込みたい場合があります。同じミドルウェア同士、例えばMySQLからMySQLなどなら比較的簡単なのですが、異なるミドルウェア同士だと少し手間が掛かります。
頻繁に行う作業ではありませんがその度に調べ直したり検証するのは面倒なので、今回はPostgreSQLからMySQLにDBを移行する方法をまとめました。
概要
大まかな移行の流れは下記になります。
- PostgreSQLリストア
- CSVエクスポート
- MySQLインポート
味噌はCSV形式で扱うことで汎用性を持たせている点です。
PostgreSQLリストア
PostgreSQLコンテナ起動
まずはPostgreSQLコンテナを起動するところから始めていきます。Dockerfileとdocker-compose.ymlを作成します。
※既にPostgreSQLが動いているアプリケーションがある場合は必要ありません。
FROM postgres:11-alpine
ENV LANG ja_JP.utf8
version: '3'
services:
db:
build: .
ports:
- 5433:5432
environment:
POSTGRES_USER: admin
POSTGRES_PASSWORD: admin
POSTGRES_DB: test01
PostgreSQLリストア
「pgAdmin4」というDBクライアントソフトをインストールして下さい。インストールしたら起動するとhttp://127.0.0.1:53441/browser/
にアクセスして管理画面にログインします。
下図を参考にサーバを作成します。
サーバとDBが作成されたらテーブルと追加していきます。このままGUIでリストアすることも可能なのですがサイズが大きいとエラーが起こるので自分は基本CUIから行っています。
お手元のリストア用の.sqlファイルをPostgreSQLコンテナ内にコピーします。
$ docker cp [リストア用ファイル.sql] [コンテナID]:/
PostgreSQLコンテナに入りリストアを実行します。
# psql -U admin -d test01
# \i [リストア用ファイル.sql]
CSVエクスポート
リストアが成功したら管理画面に戻り対象のテーブルで右クリックを押下して、エクスポート画面を開きます。
出力するファイル名、エスケープ文字などを入力して「OK」を押下します。
これでPostgreSQLからCSV形式でエクスポートが完了しました。
MySQLインポート
「Sequel Ace」というDBクライアントソフトをインストールして下さい。移行先のDBに接続して下さい。この辺りの設定は割愛します。
CSVデータを追加したいテーブルを選択して、「File」からインポートを押下します。
ファイルを選択するとインポートウィンドウが開きます。左列のCSVファイルの値と、右列のMySQLカラムが適当に合致するように調整したら「Import」を押下して下さい。
成功していればレコードが追加されます。
終わりに
DBの移行は意外とよくあることです。CSVでエクスポート・インポートする方法を知っておけば大抵のRDBMSに対応出来るかと思います。
また今回インストールしたソフトは普段使っているというだけで特別な思い入れはありません。既にお使いの物がある場合はそちらを利用してもらって良いと思います。