プログラマーのメモ書き

伊勢在住のプログラマーが気になることを気ままにメモったブログです

Joomla!のDBを、MySQL 4.0 から 5.5 へアップデート

本サイトはJoomla!で運用しているのですが、最近Joomla!が2.5.xにバージョンアップしているので、このサイトもアップデートしようと思ったら、現在借りているさくらのレンタルサーバーのApacheが1.3系のためアップデートできないことがわかりました。

なので、当面はJoomla!2.5系は諦めて、Joomla!1.5の最新版でお茶を濁すことにしたのですが、その際さくらのレンタルサーバーのMySQLも4.0から5.5にアップデートしていることに気づいたので、これだけでもアップデートしてみることにしました。

とはいえ、せっかくなので、さくらのレンタルサーバーをもう1台借りて、テスト用サーバーと公開サーバーの2本立てでの運用を目指してみます。大まかな作業の流れは次のようになります。

  1. さくらのレンタルサーバーを1台追加で借りる
  2. 元の公開サーバーのJoomla!とMySQLのバックアップを取り、新サーバー(テスト用サーバー)へコピーする
  3. 公開サーバーのMySQLを5.5に上げる

2.で新サーバーが使うMySQLのDBを5.5で作れば、4.0から5.5への移行テストも兼ねられるという寸法です。ところが、この一連の作業が意外とはまったので、忘れないようにまとめておきます。

新サーバーへのコピー

さくらのレンタルサーバーを追加で借りる部分は飛ばします(スタンダードを借りました)。その後の作業をまとめると次のようになりました。

  1. 公開サーバーのJoomla!のディレクトリをtarで固めておく
  2. 公開サーバー(MySQL4.0)のphpmyadminでログイン
    この時、ログイン時の言語を必ず、「utf-8」にする


  3. データベースをエクスポートする
    圧縮無、文字コード変換なしとします


  4. エクスポートしたファイルをテキストエディタで開き、SQL文を修正する
    TYPE=MyISAM → ENGINE=MyISAM に修正
    修正しないと下記のようなエラーが表示されます

    (参考サイト)
    http://blog.infinity-dimensions.com/2012/02/mysql-4x-export-5x-import-1064-type.html

  5. 新サーバーでDBを作成
    MySQL5.5で作成し、文字コードはutf-8としておく
  6. 新サーバーのphpmyadminでログインし、4で修正したファイルから、作成したデータベースのインポートを行う
    この時文字コードはutf-8を指定する

    特に問題がなければ、エラーが表示されず、これでインポートが完了するはず

  7. 公開サーバーの設定ファイルを新サーバーへもコピーしておく
    php.ini(実際は、さくらのコントロールパネルから設定)
    .htacess及びエラーメッセージファイルを公開サイトからコピー
  8. 新サーバーのJoomla!の設定を修正
    joomlaディレクトリにある、configuration.phpを開き
    DBサーバー名、DB名、ユーザー名、パスワード、ログファイルパス、tmpフォルダパス
    を新サーバーに合わせて修正
  9. ブラウザから接続して、正しく表示されることを確認する

今回の目的の作業としてはここまでで終わりだが、ついでにテスト用サーバーとしての設定も行いました。

  • ドメイン名を割り当てる
  • テスト用のサーバーなので、不用意に接続されないように、.htaccessに特定のIPアドレス以外は接続させないように設定

ここで、ポイントは2.のログイン時の文字コード設定でした。

phpmyadminのバージョンが2.11.11だったのですが、ログイン時の文字コードとして『日本語(euc)』や『日本語(utf8)』などが選択可能になっています。最初、特に気にせず、『日本語(euc)』でログインしていたのですが、エクスポート時の文字コードを変更しても、インポートの文字コードを変更しても、うまくいかず新サーバーで文字化けが発生していました。

たまたま『日本語(utf8)』を選択して、エクスポートしたファイルを見ると文字化けがなかったので、不思議に思い、いろいろと調べると、下記資料にあるように、ここの文字コードがデータベースのエクスポート時の文字コードに影響を与えるようです。

http://stn8.blogspot.jp/2012/01/phpmyadmin.html

 

なお、MySQL4.0での文字コードを調べてみると、表示はlatin1になっていました。

ただ、Joomla!は内部的にutf8でデータを格納しているようなので、utf8でエクスポートすることで問題なくインポートができるようになりました。

(参考サイト)

http://www.moreslowly.jp/mw/index.php/%E3%81%95%E3%81%8F%E3%82%89%E3%81%AE%E3%83%AC%E3%83%B3%E3%82%BF%E3%83%AB%E3%82%B5%E3%83%BC%E3%83%90%E3%81%A7_MySQL_4.0_%E3%81%8B%E3%82%89_5.1_%E3%81%B8%E7%A7%BB%E8%A1%8C%E3%81%97%E3%81%9F%E8%A8%98%E9%8C%B2

 

公開サーバーのDBをMySQL5.5へ

ここまでくれば、公開サーバーのMySQLを4.0から5.5に変更するのは難しくありません。さくらの説明の通り、一旦MySQL4.0で作成したDBを削除して、MySQL5.5で作成し直せばOKです。

あとは、上記の手順と同じくエクスポートして修正済みのsqlファイルを使って、DBにデータを戻せばよいことになります。

ただ、さくらのレンタルサーバーのMySQLが5.5になるとデータベース名やパスワードの制約がMySQL4.0の時と変わってしまうので、Joomla!側の設定も変更してやる必要があります。

これで、無事にDBがMySQL5.5になりました。

 

(2012/8/15追記)記事の空白文字が文字化け

上記で問題ないと思っていたら、最近いくつかの記事で半角空白文字が『ツꀀ』のようになっていることが判明しました。どうも、MySQLのデータを移行する際に文字化けしていたようです(残念ながら詳細な経緯は不明)。

似たような経験している人も多くいるようです。

仕方ないので、phpMyAdminより、記事中の『ツꀀ』を空白に置換しました。

UPDATE jos_content SET `introtext` = REPLACE(`introtext`, 'ツꀀ', ' ');
UPDATE jos_content SET `fulltext` = REPLACE(`fulltext`, 'ツꀀ', ' ');

一応、無事直ったみたいです。他に問題がなければいいんだけどな。