昨日の続きです.データベースの移行,Subversionリポジトリの移行,そしてホスト情報の交換について書いています.
データベースの移行
PostgreSQLのデータは,pg_dampallでバックアップをとり,そのまま投入します.具体的には:
postgres@旧サーバ$ pg_dumpall > /tmp/YYYYMMDD-旧サーバ-pg_dumpall.sql 一般ユーザ@新サーバ$ scp 一般ユーザ@旧サーバ:/tmp/YYYYMMDD-旧サーバ-pg_dumpall.sql postgres@新サーバ$ psql -f /tmp/YYYYMMDD-旧サーバ-pg_dumpall.sql
新旧でworld-readableな/tmpに書き出していますが,これはいわゆる俺サーバだからで,セキュリティに配慮するなら,他の人がアクセスできないディレクトリに書くべきでしょうね.
あと,PostgreSQLで新旧合わせておかないといけないファイルは,pg_hba.confです.新サーバでは /etc/postgresql/8.2/main/pg_hba.conf にありました.
MySQLのデータは,登録プログラムをRubyで書いていたので*1,新サーバでそれを走らせました.
HyperEstraierについては,新旧ともソースから入れていて,バージョンが少し違います.ともあれ,テンプレートもインデックスも,rsync -avz -e sshで丸ごとコピー.estseek.cgiだけは交換*2で,動作確認するとうまくいけました.
Subversionリポジトリ
新サーバでも,旧サーバと同じく,WebDAVでリポジトリを見えるようにします.
リポジトリファイルについては,
root@旧サーバ# svnadmin dump リポジトリのパス名 > /tmp/20080402-svn-リポジトリ名
で保存し,新サーバにコピーして,
root@新サーバ# mkdir パス名 root@新サーバ# svnadmin create パス名 root@新サーバ# svnadmin load --force-uuid パス名 > /tmp/20080402-svn-リポジトリ名 root@新サーバ# chwon -R www-data.www-data パス名
とします.「--force-uuid」をつけないと,クライアント側は同じリポジトリURLでも別物とみなされるのですね.
息を止める
運用実験をしているWebアプリケーションで,データベースやログに情報を書き出し,かつその情報も移行したいなら,「ファイルをコピーしてから,ホスト名を変える」のでは,ホスト名を変える直前にアクセスがあったときに記録がなくなる可能性があります.
「サービスを止め,ファイルをコピーし,ホスト名を変えて再起動してから,サービスを起動する」とします.
ホスト名変更は,実際には同一ネットワーク*3でホスト名とIPアドレスを交換しました.具体的には以下の通り.
*1:MySQLに問い合わせるWebアプリケーションも一つ作っているのですが,初期登録するだけで,Webを介してレコードを登録していないのでした.
*2:「cp /usr/local/libexec/estseek.cgi .」.これはソースから入れた場合ですが.
*3:違っていたら,ゲートウェイアドレスの設定も必要ですが,そこはしなかったのでした.
*4:GUIで変更しましたので,具体的にどのファイルかは分かっていません.管理のやり方として,よくないなあ.
*5:外からこのサーバにSSHで入る前に,~/.ssh/known_hostsを見て,新旧サーバの情報があれば消しておきます.
*6:こちらはテキストで.Gentooの特殊性も含まれているかもしれませんが,/etc/conf.d/net,/etc/conf.d/hostname,/etc/hosts,/etc/postfix/main.cf に手を加えました.