ykore::tech_memo

技術的な事を適当に書きます

PostgreSQL から MySQL への移行メモ

Redmine のバックエンドを PostgreSQL から MySQL へ移行しました。 ググってもあまり情報がありませんでしたので知見の蓄積も兼ねて記載しておきます。

今回使用したツールは以下:

github.com

このツールってリポジトリ名を見る限り Pivotal が作ってる気がするんですが一切情報が無いんですよね。(非公式扱い?)

作業項目は以下の順序で行いました。

  1. Redmine をセットアップする時の rake db:migrate で MySQL 上にスキーマを作成
  2. pg2mysql でデータベースの移行

今回は 2. の部分を解説します。

  1. Golang のソースからビルドする場合は go get でビルドします。
go get github.com/pivotal-cf/pg2mysql/cmd/pg2mysql

バイナリだけ欲しい場合は↓から pg2mysql_linux をダウンロードしてください。

https://github.com/pivotal-cf/pg2mysql/releases

  1. リポジトリの Readme.md にも書かれていますが、まずデータベース接続用の config.yml を作ります。
cat > /tmp/config.yml <<EOF
mysql:
  database: some-dbname
  username: some-user
  password: some-password
  host: 192.168.10.1
  port: 3306

postgresql:
  database: some-dbname
  username: some-user
  password: some-password
  host: 192.168.10.2
  port: 5432
  ssl_mode: disable
EOF  
  1. 事前チェックを行います。
pg2mysql -c /tmp/config.yml validate
  1. 移行します (truncate を指定するとテーブル移行前にレコードを削除します)。
pg2mysql -c /tmp/config.yml migrate --truncate

このツールは接続失敗等のログを一切出力しないので、 config.yml の内容が誤っていると嵌ります(嵌りました)。 pg_hba.conf や GRANT の指定を今一度確認した方が良いかと思います。 スキーマ構造がシンプルだとこれで事足りてしまいますね。 (構造が少し複雑だと MySQL Workbench を使った方が良いと思いますが。)