RSSの購読

About

2007年11月17日 19:04に投稿されたエントリーのページです。

ひとつ前の投稿は「Nokia N82」です。

次の投稿は「HD-CS500U2をCentOSサーバに」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

« Nokia N82 | メイン | HD-CS500U2をCentOSサーバに »

2007年11月17日 19:04

サーバー狂想曲

色んなプロジェクトのテスト環境として、自宅にサーバーをつくって、そこでプロジェクトのテストをしているわけですが、そのサーバーでやってはいけないことをしてしまった・・・

使っているのは、RedHatのコミュニティ(オープンソース)版LinuxのCentOS。
CentOSは、yumというコマンドでパッケージ管理をしていて、これが超便利。昔は、ソースファイルを探してきて、自分でコンパイルとか、rpmを探してきて、自分でインストールとかしていたわけですが、yumはコマンド一発でネットからダウンロードしてきて、インストールまでしちゃう。

例えば、yum search hogehogeで、hogehogeというソフトがCentOS用に作成されていているかどうか?というのを確認するわけです。

で・・・
yum updateで、yumでインストールしたすべてのソフトのアップデートをするんです。
yum -y updateで、アップデートする?というyumからの応答をyesとする省略。

金曜の深夜に、思わずyum -y updateとしちゃったわけです。
python-develが何かの依存関係で、バージョンがダメだとlogに書いてあって、個別に入れようと思って悪戦苦闘しているうちに、ついカッとなって・・・

それがまさか、こんな面倒くさいことを引き起こすとは。

yum -y updateしたら、中に入ってるソフトが新しくなるわけです。
新しくなるときに、データの互換性がないこともあるわけです。

特に、PostgreSQLというデータベースでは・・・

アップデートする前は、PostgreSQL 7.4でした。
アップデートした後は、PostgreSQL 8.1です。

アップデートしたら、PostgreSQL動いてない・・・
このデータベース、今やってるプロジェクトでエンジニアさんがせっせと使ってるデータベース・・・

えー・・・つまり、プロジェクトの妨げをしている、と。
かつ、可及的速やかにこのデータベースを稼働させないといけない。

どうやら、データベースソフトをバージョンアップするときは、pg_dumpall > dump.dbとしてデータベースのダンプを作成。
バージョンアップ後に書き戻す作業をしないとダメらしいんですわ。

・・・わかんねーよ。
というか、かれこれ何年もその業務のソバにいないから、本気でわかんねーよ。
そんな感じで逆ギレぎみになりつつも、あ、いやそんなことより、まずは直さないと・・・と。

直す前に、恐ろしいのでデータベースのコピーを作成する。

cp -rp /var/lib/pgsql ~/pgsql_fullcopy

試行錯誤はここから・・・
まず、PostgreSQL 8.1で7.4のデータベースを使って起動することはできないのか探して、できないことを知り。
次に、7.4のデータベースを8.1用にコンバートする方法を探して、そういう方法はないということを知った。

こりゃもう、PostgreSQLを7.4に戻せばいいな、と思いアップデートしたシステムのデータベースを7.4に落とそうと努力するも、うまくいかない。
ここでだいぶ時間を使が、結果は一歩も進まずガッカリ。

どうやら、7.4が動くシステムを別につくって、pg_dumpallしてそれを戻せばいいらしい。
絶望的に時間がかかる・・・自業自得ですが。

しかしこのままではどうしようもないので、VMwareにCentOSを入れてPostgreSQL 7.4をインストール。
新しいが旧いバージョンのCentOSで、PostgreSQLを起動。

/etc/rc.d/init.d/postgresql start

起動できたら、終了する。

/etc/rc.d/init.d/postgresql stop

終了したら、8.1にしてしまってどうしようもない方をコピーする。

scp -rp pgsql username@xxx.xxx.x.x:/var/lib/

コピーできたら、/var/lib/pgsqlのオーナーとパーミッションに注意して、新しいが旧いバージョンのCentOSにあるPostgreSQLを起動。

ここで、起動に失敗するようならオーナーやパーミッションが間違えてる。
起動できたら、データベースの中身を確認してから新しいが旧いバージョンのCentOSでダンプの作業。

su - postgress

でPostgreSQLのユーザになる。

pg_dumpall > pgdump.db

ダンプしたら、ちゃんと内容があるか容量だけ確認。

確認できたら、ダンプファイルをPostgreSQL 8.1が動いている方にコピー。
何が起こるか恐ろしいので、PostgreSQL 8.1の方で、データベースのディレクトリをコピーする。

cp -rp pgsql pgsql7_4

で、su - postgresしてpostgresユーザになって、データベースの初期化(initdb)をして、PostgreSQL 8.1を起動して書き戻す。

psql template1 < pgdump.db

書き戻せたら、中身をちょろっと見て、プロジェクトのシステムが動いてるか確認。
なんとか元に戻せた・・・。

カッとなってやるのは良くないです。反省。
あと、cronでdump取るようにします。

自分で自分にガッカリだ!

けど、7系より8系の方が良いんだよね、と一緒にやってるエンジニアさんが言っていたので、彼の言葉を信じるなら、この後良いことがあると良いなぁ・・・と希望的に考えることにします。

超が付くほど久しぶりにPostgreSQL使いのバイブル、PostgreSQ完全攻略ガイド(通称シーラカンス本)を読みまくりましたよ・・・。

ANAの旅行サイト【ANA SKY WEB TOUR】