Postgres8.1.4のDisk圧迫で死ねる

久しぶりの書き込みになってしまった。。。


今日はポスグレの話。
引き取ったプロジェクトの保守でPostgreSQL8.1.4を使っていたのだが、
結構前からHDDのdata領域が90%ほどまで達していました。


「いっぱいになりますよー」って報告してたけど、どっかで自分の叫びは封印されていたらしく、動きがぜんぜんありませんでした。


まぁ、勝手に動けないのと、そこは自分の甘さで、別件に忙しく、ほっておきました。
そしたら、昨日、なんと、97%とな。
ぎゃーっと連絡しまくって、ようやく、客先が動くこととなり、いらないデータを消さないととなったが、そこからまた1日。
ちなみに自分はPostgreSQLあんま知りません。


ようやく、消していいデータが決まり、
さぁ、削除するぞと、データを確認すると。。。

/dev/sda0 162G 162G 13M 100% /db



(*゚∀゚)=3うはぁ


逝ってよし
いや、逝ってしまいまいました。
postmaster死にました。


Σ (゚Д゚;)うはぁ


で、しばらく、現実逃避で30分ほど睡眠したあと、復旧しなければならないことを思い出す。


まず、捨てられるログファイルとか全部削除してみました。
でも、数MBですた。


もう消せるのは、pg_xlogとbaseだけとなってしまいました。

# du -s *
148,763,384 base
9,016,504 pg_xlog

こんな感じ。
他のファイルは自重。


さすがに、baseに手を出してはいけないとpg_xlog内の古いWALファイルに手を出しました。
別のディレクトリに移動。
その後、PosgreSQL起動したら

{POSGRE_HOME}/bin/postmaster -D {DATA}/data -i &

起動しました。
そして、調子こいてDELETEしてたら、すごい勢いでpg_xlogの下のWALファイルが増えていく。
そりゃそうだ。。。


また、100%近くにまで達してきた。
(((((( ;゚Д゚)))))ガクガクブルブル


でも、さっき、WALファイル移動したら大丈夫だったから
(゚∀。)移動すればいいやー
と、移動したのが今日の一番の間違いでした。


移動後、postmasterが起動しない。
起動しないです。ハイ
やばいです。
壊れたか・・・。
ここで、本日2度目の現実逃避で15分ほど睡眠。


もうどうやっても起動せず、エラーを見ると

#cd {POSTGRES_HOME}/
#vi

2009-11-11 22:30:42 JST 31576LOG: database system was interrupted while in recovery at 2009-11-11 22:01:01 JST
2009-11-11 22:30:42 JST 31576HINT: This probably means that some data is corrupted and you will have to use the last backup for recovery.
2009-11-11 22:30:42 JST 31576LOG: checkpoint record is at 316/80FFEE98
2009-11-11 22:30:42 JST 31576LOG: redo record is at 316/80FFEE98; undo record is at 0/0; shutdown TRUE
2009-11-11 22:30:42 JST 31576LOG: next transaction ID: 889311318; next OID: 24605
2009-11-11 22:30:42 JST 31576LOG: next MultiXactId: 1; next MultiXactOffset: 0
2009-11-11 22:30:42 JST 31576LOG: database system was not properly shut down; automatic recovery in progress
2009-11-11 22:30:42 JST 31576LOG: redo starts at 316/80FFEEDC
2009-11-11 22:32:18 JST 31574LOG: received fast shutdown request

とな。
で、起動しません。
いろいろしました。
少しずつWALファイルを戻したりとか。


でも駄目です。
数時間悩んだあと、最終手段に出ました。
もう、打つ手は一つでした。


pg_resetxlogです。


これはしたくありませんでした。
なぜなら、グーグル先生に相談すると、ネガティブな情報しかなかったから。
でも、もう他にありませんでした。

#{POSTGRE_HOME}/bin/pg_resetxlog -f {DATA_HOME}/data

やったりました。
待つこと数秒。
久しぶりに、胃に穴が開くと思いました。
なんか、成功したっぽい。
で、postmaster起動すると。。。
キタ Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒(。A。)!!!
psqlも無事入れました。
いやぁ〜
もう、ほんと
逆転サヨナラホームランの気持ちです。
助かりました。