« フィットネス | メイン | WebLogic Server + MacOSX = ∞ »

2005年02月25日

PostgreSQLのバックアップ

PowerBook2400の古いサーバにあるPostgreSQLのデータをバックアップ、のメモ
# su - postgres
$ pg_ctl -w start
waiting for postmaster to start...FATAL 2: control file context is broken
/usr/local/pgsql/bin/postmaster: Startup proc 1206 exited with status 512 - abort
あれ、postmaster を起動できない。以前停電になったときに壊れてしまったのだろうか。
調べてみると pg_control ってファイルにあり得ない値が記録されていると発生するとのこと。前回シャットダウンしたときにシステムクロックがおかしな値になっていないか?と。確かに時計用の電池はもう切れてるので時々時間が狂ってる。
確認してみるとタイムスタンプは 1904 年に。
cd /usr/local/pgsql/data/global
$ ls -la pg_control
-rw------- 1 postgres postgres 8192 Jan 1 1904 pg_control

http://www.mail-archive.com/pgsql-admin@postgresql.org/msg05176.html
src/backend/access/transam/xlog.c でチェックしている箇所をコメントアウトすれば復活できるかも、とのこと。C言語なんて読みたくないけれどもしかたない。
なんとなくここっぽい。
------
if (ControlFile->logSeg == 0 ||
ControlFile->time <= 0 ||
ControlFile->state < DB_SHUTDOWNED ||
ControlFile->state > DB_IN_PRODUCTION ||
!XRecOffIsValid(ControlFile->checkPoint.xrecoff))
elog(STOP, "control file context is broken");
------
"ControlFile->time <= 0 ||" の部分をコメントアウト、data フォルダをバックアップして再インストールしてみた
$ ./configure --enable-multibyte=EUC_JP
$ make
$ make check
====================================================
2 of 76 tests failed, 1 of these failures ignored.
====================================================
なんかテストが失敗してるけど無視。もうこの環境で運用する訳じゃないし。

$ make install
$ pg_ctl -w start
$ pg_ctl -w start
waiting for postmaster to start....DEBUG: database system was interrupted at 1904-01-01 00:05:22 CJT
DEBUG: CheckPoint record at (0, 18009432)
DEBUG: Redo record at (0, 18009432); Undo record at (0, 0); Shutdown TRUE
DEBUG: NextTransactionId: 72060; NextOid: 77273
DEBUG: database system was not properly shut down; automatic recovery in progress...
DEBUG: ReadRecord: record with zero len at (0, 18009496)
DEBUG: redo is not required
The Data Base System is starting up
.The Data Base System is starting up
.INSERT @ 0/18009496: prev 0/18009432; xprev 0/0; xid 0: XLOG - checkpoint: redo 0/18009496; undo 0/0; sui 75; xid 72060; oid 77273; shutdown
XLogFlush: rqst 0/18009560; wrt 0/18009496; flsh 0/18009496
DEBUG: database system is in production state
done
postmaster successfully started
無理矢理起動成功!
$ pg_dump ${バックアップデータベース名} > backup.dump

投稿者 yusuke : 2005年02月25日 22:15

トラックバック

このエントリーのトラックバックURL:
http://yusuke.homeip.net/diary/mt/mt-tb.cgi/191

コメント