Linuxでのcronバックアップの例

Firebirdの特徴 (Factsheet)
マッピング検証
What's new in Firebird v1.5
動作検証資料
Firebird1.5について
Embeded Server
Linuxでのcronバックアップの例
FirebirdとOOo(OpenOffice.org)
1.0.2リリースノート日本語版
How InterBase came to be
As Jim Starkey remembers it
Interbase With a Small 'b'
BLOBのインサートテスト
PHP4 RPM for Redhat Linux9
JayBirdとShiftJIS データベース
InterBase World Interview



Firebird日本ユーザー会はFirebird Foundation の公式スポンサーです
Firebird日本ユーザー会は
Firebird Foundation の
公式スポンサーです

しかく Linux上でcronによる
Firebirdのデータベースの世代バックアップ

(注記)この記事は保坂さんの公開MLでの投稿を元に作成されました。


主にLinux上でFirebirdを運用する場合、バックアップファイルはサーバ間で持ち合う用にしています。方法としては、リモートのTargetサーバを指定し、このスクリプトを走らせるローカルのgbakでバックアップファイルを作成します。
下記は世代バックアップを行うシェルスクリプトの例です。


くろまる 使い方

日単位で実行するようcronに登録すると、ローカルの $BAK_DIR に $BACKUP_DAYS に指定した世代(日付)分のバックアップを作成・保存します。
(注記)echoをloggerコマンドに変更すると /var/log/messages に実行ログを記録出来るので更に良いかもしれません。



#!/bin/sh

#TARGET HOST. IP Addrss or localhost.
HOST="localhost"

#DIRECTORY OF BACKUP FILES.
BAK_DIR="/home/backup"

#TARGET DB FILE.
FDB_FILE="/firebird/firebird.fdb"

#BACKUP DB FILE NAME.
FBK_FILE="firebird.fbk"

#GBAK PATH.
GBAK="/opt/firebird/bin/gbak"

#SYSDBA USER.
ISC_USER="SYSDBA"

#SYSDBA PASSWORD.
ISC_PASSWD="masterkey"

#BACKUP FILE WRAPPING DAYS.
BACKUP_DAYS=3

#DATE
DATE_PATH=`which date`

#TODAY
TODAY=`$DATE_PATH -I`

#ROTATE DAY.
ROTATE_DAY=`$DATE_PATH -I -d ${BACKUP_DAYS}days+ago`

#BACKUP FILE NAME OF TODAY.
FBK_FILE_TODAY="${FBK_FILE}.[${HOST}].${TODAY}"

#ROTATE FILE NAME.
ROTATE_FILE="${FBK_FILE}.[${HOST}].${ROTATE_DAY}"

#COMMAND
COMMAND="$GBAK -B -user $ISC_USER -pass $ISC_PASSWD ${HOST}:$FDB_FILE ${BAK_DIR}/${FBK_FILE_TODAY}"

#SWEEP SPAN.
SWEEP_SPAN=`expr 30 - ${BACKUP_DAYS}`




if [ ! -d $BAK_DIR ]
then
echo "INFO: mkdir ${BAK_DIR}."
mkdir $BAK_DIR
fi

if [ ! -f ${BAK_DIR}/$FBK_FILE_TODAY ]
then
echo "INFO: Starting gbak. -> $COMMAND."
$COMMAND
STATUS=$?
else
echo "INFO: Backup is not excuted. Backup file -> ${BAK_DIR}/${FBK_FILE_TODAY} allready exists."
exit 1
fi

if [ $STATUS -eq 0 ]
then
echo "INFO: Backup is completed."
if [ -f ${BAK_DIR}/${ROTATE_FILE} ]
then
echo "INFO: Removing old backup file. -> ${BAK_DIR}/${ROTATE_FILE}"
rm -rf ${BAK_DIR}/${ROTATE_FILE}
fi
else
echo "ERROR: Backup is failed. please check -> $COMMAND."
if [ -f ${BAK_DIR}/${FBK_FILE_TODAY} ]
then
echo "INFO: Removing failed backup file. -> ${BAK_DIR}/${FBK_FILE_TODAY}"
rm -rf ${BAK_DIR}/$FBK_FILE_TODAY
fi
fi

#SWEEP FUNCTION.
sweepFile () {

CHECK_COUNTER=0

while [ ${CHECK_COUNTER} -lt ${SWEEP_SPAN} ]
do
CURRENT_AMOUNT=`ls -l ${BAK_DIR}/${FBK_FILE}.[${HOST}].* | wc -l`
VALUE=`expr ${BACKUP_DAYS} + ${CHECK_COUNTER}`
SWEEP_DAY=`$DATE_PATH -I -d ${VALUE}days+ago`
SWEEP_FILE="${FBK_FILE}.[${HOST}].${SWEEP_DAY}"
if [ ${CURRENT_AMOUNT} -gt ${BACKUP_DAYS} ]
then
echo "INFO: Checking old backup file. -> ${BAK_DIR}/${SWEEP_FILE}"
if [ -f ${BAK_DIR}/${SWEEP_FILE} ]
then
echo "INFO: Old backup file is finded."
echo "INFO: Sweeping old backup file. -> ${BAK_DIR}/${SWEEP_FILE}"
rm -rf ${BAK_DIR}/${SWEEP_FILE}
SWEEP_STATUS=$?
if [ $SWEEP_STATUS -eq 0 ]
then
echo "INFO: Sweep is completed."
else
echo "ERROR: Sweep is failed. Pleas check -> rm -rf ${BAK_DIR}/${SWEEP_FILE}."
exit 1
fi
fi
fi

CHECK_COUNTER=`expr ${CHECK_COUNTER} + 1`
done

}

#AMOUNT OF BACKUP FILE.
AMOUNT=`ls -l ${BAK_DIR}/${FBK_FILE}.[${HOST}].* | wc -l`

#CHECK OLD FILES THAT OVER $BACKUP_DAYS AGO.
if [ $AMOUNT -gt ${BACKUP_DAYS} ]
then
echo "ERROR: The amount of backup files offensehe occured. Sweep is started."
sweepFile
fi


JayBird 2.2.7 / JDBCドライバがリリースされました。ダウンロードはこちら。(2015/01)
powered by Sylph version.1.0 rc4 / ©1998-2004.DipMeshSystems .

AltStyle によって変換されたページ (->オリジナル) /