2012年7月11日水曜日

MySQL 5.1系から5.5系にダンプ→復元する時は文字コード設定に気をつける

先日、管理しているサーバーの移転をした時に、MySQLのバージョン違いでハマった話。

移転前のサーバーには、MySQLの5.1.xがインストールされてて、いくつかのDBがある状態だった。で、サーバー移転するために、まずは全てのDBをダンプした。

% mysqldump -u root -x --all-databases > mysqlDump.sql

んで、このファイルを新サーバーにコピーして復元。

% mysql -u root -p < mysqlDump.sql

この時点で、MySQLをコマンドラインから見ると問題なくデータが復元されてた。で、もろもろのWebサービスも移転したんだけど、唯一Java+Tomcat+Apache+MySQLな構成のWebサービスだけ挙動が不審。

Javaから検索に行っても正常に検索されず、updateをすると文字化け、でもupdateしたデータは検索できる。と、明らかに文字コード関連で変な挙動をしている。

ダンプ→復元時にDBの文字コードが反映されなかったかな?と思って見たけど、移行前後ともにUTF-8。

mysql> show create database DB名

結局原因は、MySQL 5.5からmy.cnfに対する文字コード設定が変わったことだった。元々、my.cnfには [mysql]、[mysqld]共に

default-character-set=utf8

としてたんだけど、MySQL 5.5からは [mysqld] のみ

character-set-server=utf8

じゃないとダメだった。設定し直して、MySQLを再起動したら無事動作するようになった。それにしても、こんな微妙な仕様変更しなくても良いのに…。

【参考サイト】 MySQL 5.1 系と MySQL 5.5 系の文字コード - make world

0 コメント:

コメントを投稿