Marlock Homes Diary

備忘録。忘れないように書きます。

PostgreSQL世代バックアップスクリプト

#/bin/sh

# ログ出力関数の読み込み
# log.fncは別途作成してください。
. log.fnc
# ログ出力
LOG "pgbackup_day.shの実行開始"

# pg_basebackupコマンド
PG_BACKUPCMD=/usr/local/pgsql/bin/pg_basebackup
# PostgreSQLデータベースクラスタ
PGDATA=/home/postgres/data
# アーカイブログ格納ディレクトリ
PGARCHIVEDIR=/home/postgres/data/pg_archivelog

# 実行された曜日の取得
DAY=`date +%w`
# echo ${DAY}

# ベースバックアップ格納ディレクトリ
BACKUP_DIR=/home/postgres/backup${DAY}/

#アーカイブログ削除関数
archivelog_del()
{
        PG_ARCHIVEDEL=/usr/local/pgsql/bin/pg_archivecleanup
        OLDESTKEPTWAL=`grep file ${BACKUP_DIR}/backup_label | cut -f 6-6 -d ' ' | cut -f 1 -d ')'`
    OLDESTKEPTWAL=`ls ${PGARCHIVEDIR}/${OLDESTKEPTWAL}.*.backup | xargs -i basename {}`
    ${PG_ARCHIVEDEL} ${PGARCHIVEDIR}/ ${OLDESTKEPTWAL}
        return 0
}


# 曜日別のベースバックアップ格納ディレクトリの初期化
if test -d ${BACKUP_DIR} 
then
    # アーカイブログの削除
    archivelog_del
    LOG "ベースバックアップ格納ディレクトリ内を削除"
    rm -rf ${BACKUP_DIR}/*

else
     LOG "ベースバックアップ格納ディレクトリを作成"
     mkdir -p ${BACKUP_DIR}
fi

# ベースバックアップの取得
LOG "ベースバックアップの取得"
${PG_BACKUPCMD} -D ${BACKUP_DIR} -h localhost -p 5432 -c fast -X f

#ログ出力
LOG "pgbackup_day.shの実行完了"

exit 0