携帯 - コメント一覧 - 更新記録 - サイトマップ  

フォレスト・コンサルタンツ

icon HOME icon 会社案内 icon 冤罪を創る人々 icon 引かれ者の小唄 icon 経済事件ノート icon 山根治blog

サーバ移転にまつわるエトセトラ(主にMySQL5の文字化け対策) . はてなブックマーク  Twitter   2008-03-27

 「forest-consultants.com」ドメインのサーバ切替(DNS情報の変更)を3月25日15時前後に実施したところ、3月27日17時前後に世界中のDNSサーバに情報が行き渡ったようです。旧サーバのアクセスログを見るとそれ以降アクセスした形跡がないので、サーバ切替に要した時間は50時間ということになります。
 時間が結構かかるものだと思われるかもしれませんが、実を言うと、forest-consultants.comへのアクセスの99%は、3月26日から新サーバへ切り替わっていました。1%のアクセスだけが、ズルズルと旧サーバへアクセスを繰り返していたのです。ちなみに、3月26日から3月27日にかけて旧サーバにアクセスしていたのは、asianetcom.netのクローラーだけです。(笑)

 ところで、サーバ移転を機に、サイトの文字コードをEUC-JP(ujis)からUTF-8に変更しました。これはMySQL4.0からMySQL5へデータ移行する際に発生した文字コード関係の問題のためです。いろいろ試してみましたが、EUC-JPだと、何かしら不都合が生じてしまうのです。
 と言うわけで、最近プログラムのほとんどをUTF-8で記述していることもあって、(大胆にも)文字コードを変更することにしました。

 以下、「Nucleus」というCMSのサーバ移転時に実施した作業を備忘的に残しておきます。


◇旧サーバ(※MySQL4.0。文字コードEUC-JP)

  1. phpMyAdminの「エクスポート」機能を使ってdumpファイルをダウンロード。(※設定等については後述)

◇ローカルでの作業

  1. ダウンロードしたdumpファイルをエディタで開いて、以下の文字を一括置換。
    1. 「japanese-euc」を「japanese-utf8」に変換。
    2. 「charset=EUC-JP」を「charset=UTF-8」に変換。
    3. 「encoding="EUC-JP"」を「encoding="UTF-8"」に変換。
    4. 「encoding=\"EUC-JP\"」を「encoding=\"UTF-8\"」に変換。
    5. 「ja_JP.eucJP」を「ja_JP.utfJP」に変換。
  2. 文字コードをUTF-8で保存。

◇ローカルサーバ(※MySQL5。文字コードUTF-8)

  1. 「Nucleus」をインストール。
  2. phpMyAdminでNucleusの全テーブルのデータを空にする。
  3. phpMyAdminの「インポート」機能を使ってdumpファイルを読み込む(「ファイルの文字セット」があれば読み込む際に「utf8」と設定する)。ファイルサイズが大きいときは適宜分割。
  4. phpMyAdminの「エクスポート」機能を使ってdumpファイルを書き出し。(※設定等については後述)

◇新サーバ(※MySQL5。文字コードUTF-8)

  1. 「Nucleus」をインストール。
  2. phpMyAdminでNucleusの全テーブルのデータを空にする。
  3. phpMyAdminの「インポート」機能を使ってdumpファイルをアップロード(「ファイルの文字セット」があればアップロードする際に「utf8」と設定する)。ファイルサイズが大きいときは適宜分割。

 MySQLのバージョンが大きく異なる上に文字コードをEUC-JPからUTF-8に変更するので、念のためにローカルサーバでデータをMySQL4.0からMySQL5(EUC-JPからUTF-8)へ変換しましたが、これは絶対に必要な手順という訳ではないと思います。なお、ローカルサーバでMySQLやPHPを使うには「xampp」を利用するのがお手軽です。

◇phpMyAdminの「エクスポート」設定

phpMyAdminエクスポート
 この中の「長い INSERT 文を作成する(拡張 INSERT 文を作成する)」というオプションは、マルチプル「INSERT INTO」を作成してqueryの発行回数を激減させる効果があるので、データ量が結構多い時など重宝するかと思われます。マルチプル「INSERT INTO」については、「MySQLの最適化」や「サイトリニューアルに伴なうMySQLの最適化」をご覧下さい。

 MySQL4.1・MySQL5系では(特にphpMyAdminで)文字化けが発生しやすいですが、テーブルの作成と、データの作成を切り離して作業すると、文字コードがUTF-8であれ、EUC-JPであれ、うまくいく可能性が高くなるような気がします。既存のシステム(※今回は「Nucleus」というCMS)を利用してサイトを構築している場合にサーバ移転する際は、新サーバに既存のシステムをインストールをして新たにテーブルを作成するのがベターかと。
 今回の場合、「Nucleus」をインストールすることで新たにテーブルを作成し、さらにテーブルの全データを一度空にした上で、改めて移転元のデータをphpMyAdminを通してテーブルに流し込みました。ちなみに、データのインポート時に、SQL文では「set names utf8;」、コマンドでは「--default-character-set=utf8」など、いろいろ試してみましたが、うまくいきませんでした。
 文字化けが起きていることが確認できたら、テーブルを一度全削除した上で、あらためてテーブルを作り直してからデータをインポートした方がいいと考えています。データを空にするだけでは根本的な解決にならないみたいなので。

 ところで、「phpMyAdminの文字化け解消」において、かなり乱暴なやり方(※phpMyAdminのコードの書換え)で文字化けを回避しましたが、試しに今回の作業後にphpMyAdminのコードを元に戻したところ、どういう訳か文字化けが直っていました。(笑)

 参考資料としてMySQL5における「my.cnf」の文字コード関係の設定を書き記しておきます。
[mysqld]
 default-character-set=utf8
 character-set-server=utf8
 init-connect="SET NAMES utf8"
 skip-character-set-client-handshake

 なお、文字コードがEUC-JPでも、phpMyAdminでインポートする際に、「ファイルの文字セット」を「ujis」と設定すれば、文字化けすることなく取り込まれました。
 文字コードのことがあって苦手意識を持っていたMySQL5ですが、基本に忠実でさえあれば、実はとても扱いやすいのかもしれません。



 最後にサーバ移転についての雑感。
 現時点ではサーバ移転は正解だったと思われます。レスポンスが早くなりましたし、MySQLのコネクトエラーに一度も遭遇していませんし、おまけにMySQL5の文字コードに対する理解が進んだような気がします。
 ただ、この状態がいつまで続くか分からないので、サーバ移転先の検討を引き続き行なっていこうと考えています。

サーバ移転にまつわるエトセトラ(主にMySQL5の文字化け対策) (2008-03-27) . はてなブックマーク  Twitter  


前後のページ

このエントリーへのトラックバック

   [告知] ※トラックバックスパムが多いので、トラックバックの受付を停止いたします。(2006-08-08)


このエントリーへのコメント

   [告知] ※コメントの書き込みができない場合があるようですが原因を特定することができないので、コメントの受付自体を停止いたします。(2015-03-31)


Copyright©2004-2019 "Forest Consultants Co.,LTD". Powered by Nucleus CMS v3.71.