redmineのDBをSQLite3からMySQLに変更してみる

例によって人様のパクリです。忘れないうちにメモ書き。

  1. config, db, filesだけはバックアップしておく
  2. mysqlredmineデータベースを作成
  3. config/database.yml の設定を、mysql用に修正
  4. rake db:migrate RAILS_ENV=...
  5. roles, schema_migrations, usersの3テーブルだけは初期データが入っているのでdelete
  6. http://d.hatena.ne.jp/damegane/20080220/1203506126の内容を参考にスクリプト作成
  7. スクリプト実行

ただし、上記のスクリプトだと(恐らく)文字化けが発生。
けいの開発記録MySQL/Rubyを用いてMySQLへのデータベースアクセスによると、MySQL/Rubyを使った場合、/etc/my.cnfのdefault-character-setの内容を無視してLatin-1を使用する模様。
なので、上記サイトを参考に、$my = Mysql::new ... を下記のように書き換える。

$my = Mysql.init()
$my.options(Mysql::SET_CHARSET_NAME, "utf8")
$my.real_connect("localhost", MYSQL_USER, MYSQL_PW, DB_MYSQL)

まだ100%確認してませんが、これで上手くいったみたい。

参考文献

  1. http://d.hatena.ne.jp/damegane/20080220/1203506126
  2. けいの開発記録MySQL/Rubyを用いてMySQLへのデータベースアクセス

2009-03-18追記
Null値の扱いがおかしくなる模様。
問題になるのは、以下の2点

  • issues.due_date未記入分が、"0000-00-00"になる。
    • 0.8.1だと、後で一括変更する時にこける
  • journal_details.old_value未記入分が、空文字列になる。
    • issues_helper.rbのshow_detailで、due_dateの整形を使用としてエラーになる。

どちらも、Nullに更新する必要がある。
その他

  • issues.fixed_version_idが0になる。
  • issues.category_idが0になる。
  • issue_categories.assigned_to_idが0。
  • issues.assigned_to_idが0。
  • issues.start_dateが0000-00-00