古いMySQLからMySQL5の最新版にアップグレードする際の文字化けを防ぐバックアップ&リストア方法。先日、とあるサーバのMySQLのバージョンが相当古く4.1ということだったので最新GAの5.5.8にバージョンアップしました。(詳しくは奥野さんのブログを参照)尚、一つ前のGAである5.1系へのアップグレードにも使えます尚、rpmパッケージでのアップグレード方法ではなく、ソースのコンパイルベースのアップグレードなのでご注意ください。高速にバックアップ&リストアが出来て文字化けも一切なく作業が出来たので方法をご紹介です。いうデータベースをバックアップする例です。指定することで、文字コード変換なしの出力にします。--tabでtab区切りのファイルを出力し、リストア時にSQL解釈なしで高速に挿入できるようオプション指定します。いうデータベース単一の例ですが、複数のデータベースを回す場合はスクリプトを書いてあげれば簡単に対応できます。--tabと--all-databasesとの併用ができません。リストア古いバージョンのMySQLサーバをシャットダウンし、新しいバージョンをMySQLをインストールした後、MySQLデーモンを起動します。コマンドで流し込みますが、次のようにコマンドライン指定します。ここでは、cgmというデータベース内にa,b,cという3つのテーブルがあったことを想定します。¥"cgm/c.txt¥""テーブルが多数ある場合で、1個1個コマンドラインでやるのは現実的でない場合、スクリプトを書くなどして対応します。よって、ファイルをバイナリとして扱うように指定しています。よって、SQLを解釈しないため、高速にデータ挿入することができます。以上で、文字化けなしに最新バージョンのMySQLへのデータ移行が完了しました。インタフェースを提供するのでコマンドラインで実施できるみたいです。cgm/c.txtのようにすることで同等のことができます(奥野さんありがとうございます)追記)4.1から5.5.8なら化けないというSH2さんからの指摘を受けました。検証環境でまず5.1.xx系にアップした場合に文字化けが起きたため私の勘違いかもしれません。その後、4.1→5.5.8に一気にこの方法でバージョンを上げたのですが問題ないみたいでした。試す機会があった場合は訂正します。データとしてはテーブル別でujisやutf8が混在していました。関しては付けておいても特に問題は発生しないものと思われます。記事のタイトルも悪かったかもしれません。あと、コンパイルベースなんてどこにもないという指摘も頂きました。Codeを選択すれば入手可能です。