わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

サーバ交換メモ(2)

昨日の続きです.データベースの移行,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. 旧サーバからLANケーブルを抜きます.
  2. 新サーバからLANケーブルを抜きます.
  3. 新サーバのホスト情報を変更します*4
  4. 新サーバを再起動します.起動画面が出るあたりで,LANケーブルを差し込みます.クライアントとしてサーバとして*5,うまく通信できるならOKです.
  5. 旧サーバのホスト情報も変更します*6
  6. 旧サーバも再起動して,途中でLANケーブルを差し込み,新サーバと衝突をしていなければOKです.

*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 に手を加えました.