先日、管理しているサーバーの移転をした時に、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 コメント:
コメントを投稿