MySQL 4.0.x 系統から 5.0.x 系統へのWordPress データベースの移行

2007年8月21日

会社のマシンがいろいろあって今時のスペックのものに変わったので、これまでローカルで xampp for windows を使ってカスタマイズとか実験とかしていた WordPress の環境を、仮想PC にインストールした Vine 4.1 上に移すために試行錯誤。

問題になるのはやはり MySQL のバージョンが、既存の環境では 4.0.25 (Vine 3.2) で、Vine 4.1 では 5.0.27 となっていること。そもそも 4.0.x 系統と 4.1.x 系統の間でも断絶があったりするのに、一気に 5.0.x 系統へのアップグレードは不安が残ります。

最小インストールした Vine 4.1 に Apache2 やら PHP4 やら MySQL やらを apt-get で突っ込んで、必要なプログラムのインストールを確認した後に、 4.0.25 からデータベースを mysqldump でダンプして、インポートしてみました。

素の状態でインストールしたときは、見事に文字化け。やはり上手くはいかないようで。

my.cnf の書き換えで対応

で、MySQL 文字化け でぐぐると、それっぽい情報がたくさん出てくる出てくる。MySQL で使われる文字コードを統一して、余計なことをしないようにするのが無難なようで、MySQL5にACCESSやADO.NETでアクセスした際に、文字化けをしないようにするのは?~MySQL関係 を参考に、以下のようにすると文字化けは解決しました。my.cnf は 初期状態では存在しなかったので、

$ cp /usr/share/mysql/my-medium.cnf /etc/my.cnf

としてやって作成しました。以下はその my.cnf に対して追記した内容です。

[client]
default-character-set=utf8

[mysqld]
default-character-set=utf8
skip-character-set-client-handshake

[mysqldump]
default-character-set=utf8

[mysql]
default-character-set=utf8

それぞれの設定箇所に、 default-character-set=utf8 を追加してやり、MySQL を再起動。skip-character-set-client-handshake はクライアント/サーバー間でのキャラクターセットの変換を行わないというオプションのようですね。これで、サーバ内では文字コードが UTF-8 に統一されたはず。

その後、データベースの作成も、

mysql> CREATE DATABASE データベース DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;

としてやることで、文字コードを UTF-8 と指定。

そうしてからのインポートでは無事に文字化けもせずに内容が表示されるようになりました。
使用した WordPress のバージョンは 2.2.1 の本家版。日本語リソースを突っ込んで日本語化したものです。

最初 PHP は 5 を入れたんだけれど、動かないプラグインがあったりで、結局は 4 系統(4.4.7)に戻しました。php.ini 内の mbstring については編集する必要もなく、デフォルトの設定で動きました。ただ、memory_limit = 8MB では PHP Fatal error: Allowed memory size of 8388608 bytes exhausted とか出て途中で落ちてしまったので、そこだけ 64MB に変更して稼働させています。

さて、仮想環境でも問題なく動くようなら、サーバの OS もアップグレードしたいところだなあ。もう1台マシンを調達して交換の準備をするとしますかね。