postgresqlデータテーブルバックアップansibleリモートサーバへバックアップファイルを送信
2760 ワード
制作の考え方:
1.データベース情報を構成に書き込む
2.転送されたパラメータ(resourceTable)でバックアップが必要なテーブルを明確にします(理由:フロントでバックアップが必要なテーブルを選択できます).
3.バックアップ・ファイルを生成してリモート・サーバに送信し(ローカルで障害が発生した場合、リモート・サーバでバックアップ情報を取得することができる)、ファイルの詳細を記録する
4.スケジュールは毎日1つのバックアップファイルを生成するので、リソーススペースを節約します.バックアップファイルdump_を定期的にクリーンアップする必要があります.clear_dayは構成のパラメータです.
#!/bin/sh
# =========================================================================
#
# :1. (db_name) 2. (bakDir) 3. (resourceTables) 4. IP( ) 5. (remoteBakDir)
#
# wd 2019.1.23
#
# =========================================================================
resourceTables=${@:1}
today=`date +%Y-%m-%d`
function sourceConfig(){
echo $INSPECTORWEB_HOME
configfile=$INSPECTORWEB_HOME/bin/config.sh
if [ -f $configfile ]; then
printTime
echo source $configfile
source $configfile
else
printTime
echo [FATAL] cannot find $configfile.
exit -1
fi
}
function printTime(){
echo -n `date "+%Y-%m-%d %H:%M:%S"`" "
}
function insertInfo(){
bakDir=$INSPECTORWEB_HOME/${dump_backup_path}
if [ ! -d $bakDir ];then
mkdir -p $bakDir
fi
statusFile=${bakDir}/${db_name}_bak_${today}.status
/usr/local/pgsql/bin/pg_dump -U ${db_user} ${db_name} -a ${resourceTables} --inserts -f ${bakDir}/${db_name}_bak_${today}.sql
step1=$?
if [ ${step1} != '0' ];then
echo ".........pg_dump failed!"
echo -e "${today}\t1" >${statusFile}
exit 1
else
path=${bakDir}/${db_name}_bak_${today}.sql
fileName=${db_name}_bak_${today}.sql
fileSize=`ls -l ${path} | awk '{print $5}'`
echo "---------------${path}-----------------${fileSize} "
psql -U ${db_user} ${db_name} <${statusFile}
exit 2
fi
fi
echo -e "${today}\t0" >${statusFile}
}
function clearDocuments(){
find ${bakDir} -mtime +${dump_clear_day} -type f -name "${db_name}_bak_*" -exec rm -f {} \;
if [ ! -z ${dump_remote_ip} ];then
ansible ${remoteIp} -u ${dump_remote_user} -e ansible_ssh_pass:${dump_remote_password} -m shell -a 'find '${remoteBakDir}' -mtime +'${dump_clear_day}' -type f -name '${db_name}'_bak_* -exec rm -f {} \;'
echo $?
fi
deleteInfo
}
function main(){
# source config.sh
sourceConfig
insertInfo
sendToRemote
clearDocuments
}
main