MySQL 4 から 5へ

このサイトを設置している、さくらインターネットのサーバ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&#91;/plain&#93;

と、ここでも問題が。
ほぼ問題なく、インポートできたんですが一部の文字(&quot;〜(波ダッシュ)&quot;、&quot;−(全角マイナス)&quot;等)が<strong>&quot;?&quot;</strong>になってしまう...

てなわけで、こんな時は古から存在する文字コードコンバータ nkf を使いましょう。
[plain]% 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

MySQL 4 から 5へ」への5件のフィードバック

  1. ピンバック: WP3.0.5に移行したった at KIKIDOG

  2. ピンバック: MySQL5にバージョンアップ…ってそれ食べられる? - うすよごれ。

  3. ピンバック: Taraco-sell’s 2DIE | Fly,Fly,TSUCHINOKO

  4. ピンバック: MySQLを4から5へ(さくら+WPの場合) « Waviaei

  5. ピンバック: Yuriko.Net » Force Wave Dash 1.0.0 ベータ版(その1)

コメントを残す

メールアドレスが公開されることはありません。