« 全学統一認証システム | メイン | 読書の日 »

2006年02月06日

MySQL 3.23 から 4.1 へのデータ移行

古いサーバから開発サーバにニュースのデータを移しましたが、そのときの手順を。

古いサーバは MySQL 3.23 でした。新しいサーバは MySQL 4.1 です。MySQL のデータって、基本的にバイナリをコピーするだけでバックアップが取れたりするのが便利ですが、バージョンが違ってもいけるのだろうか… という不安が。

MySQL 3.23 で動かしていたデータを 4.1 のデータディレクトリに入れても、普通に認識されました。ストレージエンジンが MyISAM だったと言うのが大きいかも。

少し落とし穴が…

MySQL 4.1 から、文字列の取り扱い方が変わっています。4.0 までは、CHAR型のカラムに格納されたデータの長さをバイト数として扱っていましたが、4.1では、文字数として扱うようになりました。

3.23(4.0) VARCHAR(15) → 4.1 VARCHAR(5)

となるということです。この例では、文字列は ujis として処理しています(ujis の1文字は最大3バイト)。これがよろしくないのは、 3.23 で1バイト文字を15文字入っていたのが、 4.1 では1バイト文字であっても5文字しか入らなくなるという点です。

カラムの変更は、忘れずに行いましょう。これを忘れたので、無駄な作業をしてしまう羽目になりました。

ということで、手順をまとめてみます。

1. 旧サーバ MySQL 3.23 から 新サーバ MySQL 4.2 にバイナリデータをコピー
2. 新サーバの MySQL 4.2 をスタート
3. VARCHAR などのカラムの修正
4. 新サーバの MySQL 4.2 をストップ
5. myisamchk -r *.MYI な感じで復旧・最適化
6. 新サーバの MySQL 4.2 をスタート

データの復旧や最適化は、旧サーバが急に停止したので念のために行いました。たまに最適化するのも良いと思いますし。プロセスの停止を行わないとデータを壊してしまうことになりかねないので、注意が必要です。

MySQL のすごさを再認識しました。

データの移行以外では、プログラムを少し修正しました。デフォルトでは utf8 として扱ってしまうので、設定ファイルを読み込み、必ず ujis と扱うようにしました。この辺は、過去のエントリーでも。

【関連記事】
MySQL 4.1 の日本語設定 (2005年07月05日)

【関連情報】
・バージョン 4.0 から 4.1 へのアップグレード
 http://dev.mysql.com/doc/refman/4.1/ja/upgrading-from-4-0.html
・バージョン 3.23 から 4.0 へのアップグレード
 http://dev.mysql.com/doc/refman/4.1/ja/upgrading-from-3-23.html
・MySQLの高度な管理とチューニングテクニック
 http://www.atmarkit.co.jp/flinux/rensai/mysql11/mysql11a.html

2006年02月06日 04:56 | Technology

トラックバック

コメント