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}/
#vi2009-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も無事入れました。
いやぁ〜
もう、ほんと
逆転サヨナラホームランの気持ちです。
助かりました。