チラシの裏

2010 年 6 月 19 日

pg_dumpallでパスワードを求められるのがウザい場合

カテゴリー: PostgreSQL — root @ 8:28 PM

データベースごとにパスワードを入力しないといけないらしいので
環境変数PGPASSWORDを使って

$ PGPASSWORD=パスワード
$ export PGPASSWORD
$ pg_dumpall > pgsql.dump
とすれば良いらしい。

定期的なバックアップをシェルスクリプトでとる場合は
#!/bin/sh

PGPASSWORD=パスワード
export PGPASSWORD

sudo -u postgres pg_dumpall > pgsql.dump

これで良いらしい。

他に良い解決方法はあるのかしら?

2010 年 3 月 1 日

JNDIでPostgreSQLにアクセスする

カテゴリー: Java, PostgreSQL, Tomcat — root @ 11:22 PM

環境:Redhat系Linux
Apache Tomcat:6.0.13
JVM:1.6.0_02-b05
JDBC:postgresql-8.4-701.jdbc4.jar
(続きを読む…)

2010 年 1 月 24 日

はじめてのlibpq

カテゴリー: C, PostgreSQL — root @ 5:29 PM

オンラインゲームのゲームサーバって
一体どんな仕組みなのかなと思って、いろいろ調べてみたら、
Cとlibpqで開発されているものもあるということが分かった。

面白そうなのでlibpqのお勉強をしてみました。
(続きを読む…)

2009 年 2 月 16 日

PostgreSQLのバックアップ&リストア&リカバリ

カテゴリー: Linux, PostgreSQL — root @ 2:16 PM

PostgreSQLはバージョン8.0からPITR(Point In Time Recovery)機能が
追加されたことにより、メディア障害が発生する直前の状態までデータを
リカバリすることが簡単にできるようになったようです。

手順はそれほど難しくはないようです。

テスト環境:
Redhat系Linux/PostgreSQL : 8.1.10-0vl0.40

シチュエーション:
ある日、突然データベースがぶっとんでしまった(’A`)、ので、
数日前に取っておいた全体バックアップとリアルタイムで更新される
トランザクションログを使用してデータベースを復旧させる。

●まず、PITR機能を利用するための下ごしらえ
rootになってPostgreSQLをストップ

# service postgresql stop

ユーザpostgresにチェンジ

# su – postgres

アーカイブログを保存するディレクトリを作成します。
データの保護を考慮して、物理的に別のディスクに作成するのが
良さそうです。

$ mkdir -p /backup/postgres/archive_dir

トランザクションログも別ディスクに移動しちゃいましょう^^

$ mv /var/lib/pgsql/data/pg_xlog /backup/postgres
$ ln -s /backup/postgres/pg_xlog /var/lib/pgsql/data/pg_xlog

mvコマンドは失敗するとファイルが消失することがあるらしい(’A`)ので
心配性の人はcpコマンドを使えば良いでしょう。

postgresql.confを書き換えます。

$ vi data/postgresql.conf
archive_command = ‘cp %p /backup/postgres/archive_dir/%f’

ルートになってPostgreSQLをスタートさせましょう。
(再起動しないとpostgresql.confの変更が反映されませんです。

# service postgresql start

これで、PITRを利用するための下ごしらえは完了です!!

●データベースの全体バックアップ
まず、pg_start_backupを実行します。
(”)の中の文字列は何でも良いそうです?(ホントカナ
バックアップ時にPostgreSQLを停止する必要はありません。
停止させなくても一貫性のあるバックアップを取得
することが可能です。

ユーザpostgresにチェンジ

# su – postgres

$ psql -c “select pg_start_backup(‘Label’)”

tarコマンドでdataディレクトリを丸ごとバックアップします。

$ tar cjvf /backup/postgres/data.tar.bz2 data

pg_stop_backupを実行します。

$ psql -c “select pg_stop_backup()”

この時点で/backup/postgres/archive_dir/に.backupという
ファイルが作成されているはずです。

これで、無事にバックアップを取ることができました。

ちゃんと、最新の状態までリカバリされることを確認するために、
試しに、データベースに対して挿入とか削除とか
いろいろやってみましょう。

●ある日、突然、データがぶっとんだ!!(’A`)
あわてる必要はありません。
数日前に取っておいた全体バックアップと
最新のトランザクションログがあれば、復旧できます。

まず、rootになってPostgreSQLをストップ

# service postgresql stop

ユーザpostgresにチェンジ

# su – postgres

完全バックアップをPostgreSQLのデータディレクトリに
解凍します。
念のため、現在のdataディレクトリは退避させておきましょう。

$ mv data data.back
(心配な人はこpそいf

完全バックアップファイルを解凍します。

$ tar xjvf /backup/postgres/data.tar.bz2

recovery.confファイルを用意します。

$ cp /usr/share/pgsql/recovery.conf.sample data/recovery.conf

$ vi data/recovery.conf

restore_command = ‘cp /backup/postgres/archive_dir/%f %p’

最後に、rootになってPostgreSQLをスタートさせましょう。

# service postgresql start

おめでとうございます!!

ちゃんと、障害が発生する直前の状態までリカバリできましたよね?

これで無事にリカバリが完了しました!!

Powered by WordPress