manekineko倉金家ホームページ

趣味の部屋/サーバー構築メモ その2

httpデータの移行

2010年8月21日(土) 2010年9月4日(土)更新
httpサーバーとphpMyAdminがそこそこ稼動したところで、古いサーバーから新しいサーバーへホームページの移行を行います。

新しいサーバーにホームページデータの移行を行うにあたっては、いろいろ心配ごとがあります。
? 言語コードが違うが文字化けしないだろうか。(euc-jpからutf-8に変わる。)
? ホームページはほとんどphpを使って書かれているが、ちゃんと動作するだろうか。
 (ちなみに古いVine4のphpのバージョンは5.2.9、CentOS5は5.1.6)
? MySQLやSQLiteのデータをそっくりコピーするだけでいけるだろうか。
などなど。
問題があったらそのときはそのとき。まずは元気にやってみよう!

準備
古いサーバーと新しいサーバーで apache, mysql の uid, gid が合っているか確認。apache は同じでしたが mysql は違っていました。今後のことを考えて古いサーバーの mysql の uid, gid を新しいサーバーに合わせました。(当然データなどのディレクトリやファイルの uid, gid もそれに合わせて変更。たまたま番号があいていたからよかったけど。)

次に、データのコピーを行うためのプログラム(スクリプト)を準備します。

バックアップスクリプトの作成
現行のサーバーのホームページコンテンツは日々アップデートされており、サーバーの入れ替えまで続きます。
一回だけのデータ移行では済まないので、バックアップする形でデータの移行プログラムを作成。
こんな感じ。
#!/bin/sh

LOGFILE="/root/Desktop/backup.log"

# フォルダの内容をコピーする
# 新規か新しい場合のみコピー
function backup()
{
echo "updatecopying from $1 to $2" | tee -a "$LOGFILE"
if [ -d "$1" -a -d "$2" ] ; then
cd "$1"
find . -print | cpio -avdmp "$2" 2>&1 \
| grep -v "newer or same age version exists" \
| sed "s/\/\.\//\//" \
| tee -a "$LOGFILE"
echo | tee -a "$LOGFILE"
else
echo "********** Can't open $1 or $2 ***********" | tee -a "$LOGFILE"
echo | tee -a "$LOGFILE"
fi
}

echo "$0 start" | tee "$LOGFILE"
date | tee -a "$LOGFILE"
echo | tee -a "$LOGFILE"

# ここにバックアップを羅列
# ホームページのプログラム、写真等
SRCDIR="/mnt/oldhome/(古いサーバーの表示ディレクトリ)"
TGTDIR="/home/http/(新しいサーバーの表示ディレクトリ)"
backup $SRCDIR $TGTDIR
echo | tee -a $LOGFILE
# SQLデータ
SRCDIR="/mnt/oldhome/mysql/(古いサーバーのサイトSQLデータディレクトリ)"
TGTDIR="/home/mysql/(新しいサーバーのサイトSQLデータディレクトリ)"
backup $SRCDIR $TGTDIR
echo | tee -a $LOGFILE

. . . .
. . . .

echo "MySQL restart" | tee -a $LOGFILE
service mysqld restart | tee -a $LOGFILE
echo | tee -a $LOGFILE

echo "$0 finished" | tee -a $LOGFILE
date | tee -a $LOGFILE
echo | tee -a $LOGFILE
exit

新しいサーバーにバックアップ先のhttp表示ディレクトリやMySQLデータディレクトリをつくり、このバックアップスクリプトを走らせます。

表示させてみる
http://localhost/(サイト名)/でコピーしたサイトを表示させてみます。
...何も表示されずエラーが出たり、表示されても文字化けしたり。

ホームページプログラム"IRORIBATA"と各サイトの設定ファイルをすべてutf-8に変換。
charset宣言部分<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">などのeuc-jpをutf-8に変更。

今度はMySQLを使ったサイトはばっちり表示はされます。文字化けもありません。MySQLの場合は内部ではutf-8で保存されており、my.confの設定にしたがってそれをeuc-jpあるいはutf-8その他で出力しているだけのようです。

しかしSQLiteを使ったサイトはまったく表示されません。
原因調査!…どうやらCentOS5ではそのままでは従来のSQLite関数は使えないようです。apacheエラーログにはSQLite関連の関数がundefined functionと記録されています。

対策
もともとホームページのデータサーバーはMySQLで、途中からSQLiteも試してみただけのことで、SQLiteにこだわる必要はありません。
他に選択肢がないならともかく、データサーバーはMySQLを使うことに変更。
SQLiteを使えるようにするのはそのうち暇を見て。
(SQLiteの場合は言語コードの変換はしてくれないらしいということもあり。)
SQLiteからMySQLへの変換プログラムを作り、データをすべてMySQLに変換、データベースをMySQLに切り替えて一件落着。

いちおうすべてのサイトをコピーし、必要なファイルの言語変換や設定を行いサイト移行の準備は完了です。(けっこう時間がかかってしまった。)

しかしせっかくSQLiteも使えるようにプログラムを組んであるのにCentOSでは使えないというのも面白くありません。
なんとか使えるように検討してみます。

...それにしても今年の夏は暑いなー。脳味噌に力が入らん。