移転に伴う移行方法は既にいろんなところで書かれているけど、自分がさくらインターネットから Monster Host (http://www.hostmonster.com/) という格安サービスに移行した時の作業をまとめてみた。
・データベースをバックアップ
まずは、さくらから phpMyAdmin を使ってデータベースのデータをエクスポート。いくつかのphpでデータベースを使っているため、xoopsのものだけを選択してエクスポートした。その際、
にチェックを付けて保存する。
・ファイルのバックアップ
SSHを使ってさくらにログインし、以下のようにコマンドを実行。
tar cvzf バックアップファイル名.tar.gz www/バックアップ元ディレクトリ
これで、xoops のファイルが構造そのままアーカイブできたので、このファイルをダウンロードしておく。XOOPS_TRUST_PATH を使うモジュールをインストールしている場合は、XOOPS_TRUST_PATH も忘れずに同様の方法でバックアップしておくこと。
・データベースの書き換え
自分の場合は、URLを直接指定してリンクを張ったりしていたため、それを事前に書き換えた。バックアップしたSQLファイルを開いて置換するだけ。bulletin モジュールは絶対パスでファイル位置を指定している項目があるので、それも書き換える。ユーザー情報も適宜編集。
・データベースのインポート
Monster Host へデータをインポートする。データベースを一つ作っておき、そこへインポートすればいい。念のため、インポート前に [操作] から [照合順序] を「ujis_japanese_ci」にしておく。
インポート自体は、ファイルの文字セットを「ujis」にさえしておけば特に問題なく行われるはず。
・ファイルのアップロード
先ほどバックアップを取った tar.gz ファイルをアップロードし、Monster Host のコントロールパネルからファイルマネージャーを使って解凍。なぜそうするかというと、Monster Host は海外の安いサーバーなので、解凍したものを個別に転送しようとすると途中で止まったりしてうまくいかないため。SSHは写真入りの身分証明書を送らないと使えないし。まあこの方法でもパーミッションごと再現してくれるので問題ない。
・ファイルの編集
まずはサーバーの php.ini を編集。mbstring に関する部分だけなので、さくらで動かしていたものをベースに置き換えるだけ。一応、下に自分の php.ini の mbstring に関する部分のみを置いておく。他は初期状態で作られているものから全くいじっていない。
[mbstring] ; language for internal character representation. mbstring.language = Japanese ; internal/script encoding. ; Some encoding cannot work as internal encoding. ; (e.g. SJIS, BIG5, ISO-2022-*) mbstring.internal_encoding = EUC-JP ; http input encoding. mbstring.http_input = auto ; http output encoding. mb_output_handler must be ; registered as output buffer to function mbstring.http_output = pass ; enable automatic encoding translation accoding to ; mbstring.internal_encoding setting. Input chars are ; converted to internal encoding by setting this to On. ; Note: Do _not_ use automatic encoding translation for ; portable libs/applications. mbstring.encoding_translation = On ; automatic encoding detection order. ; auto means mbstring.detect_order = auto ; substitute_character used when character cannot be converted ; one from another mbstring.substitute_character = none; ; overload(replace) single byte functions by mbstring functions. ; mail(), ereg(), etc are overloaded by mb_send_mail(), mb_ereg(), ; etc. Possible values are 0,1,2,4 or combination of them. ; For example, 7 for overload everything. ; 0: No overload ; 1: Overload mail() function ; 2: Overload str*() functions ; 4: Overload ereg*() functions ;mbstring.func_overload = 0
続いて mainfile.php の編集を行う。これはローカルでも、リモートのファイルをファイルマネージャーからでもどちらでも構わないが、自分はバックアップを取る目的でローカルにて編集し、FTPでアップロードした。
下記設定項目を、新しい環境に合わせて書き換える。XOOPS_DB_PREFIX は、この方法で移行したなら書き換える必要はない。
XOOPS_ROOT_PATH
XOOPS_TRUST_PATH (使っていれば)
XOOPS_URL
XOOPS_DB_HOST
XOOPS_DB_USER
XOOPS_DB_PASS
XOOPS_DB_NAME
これで設定やモジュール等は全てそのまま引き継げたが、このままだと日本語が文字化けして全く使えない。理由としては、さくらが MySQL の 4.0.27 を使っているのに対し、Monster Host は 5.0.27。PHP のバージョンも、さくらが 4.4.6 に対し Monster Host は 5.1.6 なためだろう。
そこで、/class/database/mysqldatabase.php の236行目にある、
$result =& mysql_query($sql, $this->conn);
という行の前に、以下の行を追加する。
mysql_query("SET CHARACTER SET ujis", $this->conn);
これで文字化けせずに使えるようになる。
この情報は、
XOOPS.JP – XOOPSをインストールした後に文字化けした場合の対処方法
を参考にさせていただきました。この情報のおかげで、全コンテンツを捨ててCMSを乗り換える必要が無くなり、大変助かりました。
が、自分の環境ではコンテンツは文字化けしないものの、管理画面でアイコン表示される部分のモジュール名が文字化けしてしまった。これは以前の環境から持ち越したキャッシュが原因なので、/cache ディレクトリの中を空にすることで解決。
ただしその際、adminmenu.php というファイルまで削除すると、管理画面に入るときに「管理画面への初めてのログインです」みたいに言われる(1回だけ)。とはいえ特に支障はないので、一度全部消しておいた方が精神衛生上いいかも。
以上のようなやり方で、今のところ不具合なく使えている。しばらくテスト運用して問題がないようなら、本格的に運用を再開させようっと。ということで、昨日書いてたJoomlaへの乗り換えは今のところなしで。