このサイトを設置している、さくらインターネットのサーバOSが FreeBSD 7.1 にバージョンアップされました。
その際 MySQL も 4.0.x と 5.1.x を選択できるようになりました。
てなわけで、WordPress で使用する DB を MySQL4系から5.1系に移行したわけなんですが、文字コード周りでちょっとハマってしまったので、メモを残しておきます。
今回ハマったのは、"〜"(波ダッシュ)等の文字コードが Win系のUTF-8と標準UTF-8で異なる問題(いわゆる波ダッシュ問題)。
とりあえず、エクスポートした過去エントリのデータを文字コード変換して、さらに今後のエントリのためにForce Wave Dashプラグインを導入しました。
データのエクスポート
普段は、ひろまささんの、エントリにあった backup.sh をさくら用に書き換えたものを cron で日に一度バックアップしています。
これでバックアップされたファイルを元に MySQL に流し込もうとしたのですが、文字化けしてどうしてもうまくいかない。
しょうがないので PHPMyAdmin でエクスポートしました。
この辺は、以下のエントリが参考になります。
HashiMのたわごと(?) : 2009年3月14日(土) – MySQLを4から5へ
データのインポート
次は、データのインポート。
PHPMyAdmin の管理パネルからやってもいいんですが、バックアップファイルが 63.3 MB と巨大になってしまったので、今回は mysql コマンドでインポートしました。
# エクスポートファイルが巨大になった一番の原因は wp-jrelated。
% /usr/local/bin/mysql --host=mysql***.db.sakura.ne.jp -u ******* -p w******* --password=****** < mysql.dump
と、ここでも問題が。
ほぼ問題なく、インポートできたんですが一部の文字("〜(波ダッシュ)"、"−(全角マイナス)"等)が"?"になってしまう...
てなわけで、こんな時は古から存在する文字コードコンバータ nkf を使いましょう。
% nkf -w mysql.dump > mysql.utf8.dump
このファイルをインポートすれば、ほぼ問題なく終了です。
一部文字化けしているところがあったら、適宜、手でなおしていきましょう。
記事エントリ時の文字化け対策
Windows PC から、新規記事をエントリする際、"〜(波ダッシュ)"、"−(全角マイナス)" 等が化けてしまいます。
MySQL4系のときは、そのままのコードで格納されていたため、一見すると正常に表示されていたのですが、MySQL5.1系では、そうは問屋がおろさないようです。
と言うわけで、Force Wave Dashプラグインを導入したのですが、WordPress 2.7.1だと正常に動作しないようです。
このプラグインは "save_post" をフックして文字コード変更しているのですが、このフックが有効になるのは、すでにDBに登録されて post_ID が割り振られた後。
さくらの MySQL サーバでは、この時点で"〜(波ダッシュ)"、"−(全角マイナス)" 等が化けてしまってます。
なので、DB登録前に有効になるフィルタフック "wp_insert_post_data" で、入力された文章の文字コードを変換してやるように修正しました。
以下に Force Wave Dash Ver.0.81 用の差分ファイルを置いておきます。
http://dl.getdropbox.com/u/110305/force_wavedash.diff
この差分ファイルは、Force Wave Dash プラグイン作者のゆりこさんにも送付してあるので、そのうちマージしてもらえるでしょう。
おまけ
backup に使っているシェルスクリプト
#!/bin/sh
# 設定(ここを自分に合わせる)
DATABASE=********
DBUSERNAME=********
PASSWORD=********
SAKURAUSERNAME=********
BACKUPDIR=backup-mysql
KEEPDAY=14d
# 初期化(SAKURA用)
PREFIX=mysql
SERVER=mysql**.db.sakura.ne.jp
NOWDATE=`date +%Y%m%d`
DESTDIR=/home/$SAKURAUSERNAME/$BACKUPDIR
DUMPFILE=$PREFIX.$NOWDATE.dump
TARFILE=$PREFIX.$NOWDATE.tar.gz
OLDDATE=`date -v-$KEEPDAY +%Y%m%d`
# MySQLダンプ/圧縮
cd $DESTDIR
/usr/local/bin/mysqldump $DATABASE --host=$SERVER -u $DBUSERNAME --password=$PASSWORD > $DUMPFILE
if [ -e $TARFILE ]; then
rm -f $TARFILE
fi
tar zcvf $TARFILE $DUMPFILE > /dev/null 2>&1
# 処理判定
if [ $? != 0 -o ! -e $TARFILE ]; then
echo "backup faild -- ($DUMPFILE)"
exit 1
fi
# 圧縮前ファイル削除
if [ -e $DUMPFILE ]; then
rm -f $DUMPFILE
fi
# n日ローテートを削除
RMFILE=$DESTDIR/$PREFIX.$OLDDATE.tar.gz
if [ -e $RMFILE ]; then
rm -f $RMFILE
fi

2011年2月14日 月曜日 7:26 PM




「さくらインターネットのサーバOSが FreeBSD 7.1 にバージョンアップされました。その際 MySQL も 4.0.x と 5.1.x を選択できるようになりました。てなわけで、WordPress で使用する DB を MySQL4系から5.1系に移行した」
「さくらインターネットのサーバOSが FreeBSD 7.1 にバージョンアップされました。その際 MySQL も 4.0.x と 5.1.x を選択できるようになりました。てなわけで、WordPress で使用する DB を MySQ… http://htn.to/ddUojK
RT @hyam: @toshiro @toshiro そーですねー。私はここを参考にしましたよ。http://bit.ly/9EYfm6
@toshiro @toshiro そーですねー。私はここを参考にしましたよ。http://bit.ly/9EYfm6
MySQL 4 から 5へ : dogmap.jp http://dogmap.jp/2009/05/11/mysql-4-%E3%81%8B%E3%82%89-5%E3%81%B8/
RT @wokamoto: @toshiro さくらは MySQL5.1系に移行すれば、アップデート可能です。 http://wp.me/p4w87-dX http://dogmap.jp/yz
波ダッシュ問題はこれでいけそうなんだけど、diffでパッチ当てる環境がないという罠。http://bit.ly/5vepcV