- バックアップのバックアップを定時に実行する。
[postgres@example2 postgres]$ mkdir /home/postgres/backupall
- DBサーバにバックアップされているデータの一覧を取得して、ファイルに書き込む。
[postgres@example2 postgres]$ vi /home/postgres/login.sh
open 192.168.2.1
user postgres xxxxxxxx
idle 600
prompt
lcd /home/postgres/backupall
cd /home/postgres/backup
mls /home/postgres/backup /home/postgres/remote.list
bye
[postgres@example2 postgres]$ vi remote_1.sh
#!/bin/sh
login=/home/postgres/login.sh
cd /usr/bin
ftp -n < ${login}
- 当日分のバックアップのみFTPで回収する。
- ラージオブジェクトを使用しているとデータが大きくなるので、全データを回収するとサーバも疲れる。
[postgres@example2 postgres]$ vi remote_2.sh
#!/bin/sh
msgfile=/home/postgres/remote.list
ipaddr=192.168.2.1
dbuser=postgres
dbpass=xxxxxxxx
nasdir=/home/postgres/backupall
dbdir=/home/postgres/backup
offset=22
login=/home/postgres/daily_login.sh
filename=dbname.`date +%y%m%d`
todump=${dbdir}/$filename
while read line
do
if [ $(echo $line | grep ${todump}) ];then
dumpfile=${line:${offset}}
printf "open ${ipaddr}\nuser ${dbuser} ${dbpass}\nidle 600\nprompt\nlcd ${nasdir}\ncd ${dbdir}\nbinary\nget ${dumpfile}\n" > ${login}
/bin/chmod 775 ${login}
break
fi
done < $msgfile
[postgres@example2 postgres]$ vi remote_3.sh
#!/bin/sh
login=/home/postgres/daily_login.sh
cd /usr/bin
ftp -n < ${login}
[postgres@example2 postgres]$ chmod 775 login.sh
[postgres@example2 postgres]$ chmod 775 remote_1.sh
[postgres@example2 postgres]$ chmod 775 remote_2.sh
[postgres@example2 postgres]$ chmod 775 remote_3.sh
- rootで実行する。
- remote_1.sh,remote_2.sh,remote_3.shの順に実行する。
[root@example2 root]# vi /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
# Backup
30 5 * * * postgres /home/postgres/remote_1.sh > /dev/null 2 >&1
40 5 * * * postgres /home/postgres/remote_2.sh > /dev/null 2 >&1
50 5 * * * postgres /home/postgres/remote_3.sh > /dev/null 2 >&1