分享一个PostgreSQL+Dropbox自动备份

一、PostgreSQL 自动备份

  1、创建 pgbackup.sh,内容如下:
        #!/usr/bin/sh
        export PGPASSWORD="123456"
        /opt/PostgreSQL/9.4/bin/pg_dump  dbname  -h loclahost -p 5432 -U  user  | gzip >  ~/bak/pgbak `date +%Y%m%d`.gz

  2、创建 pgbackup.service 内容如下:
       [Unit]
       Description=pg_dump backup

       [Service]
       User=postgres
       Group=postgres
       Type=simple
       ExecStart=~/pgbackup.sh

       [Install]
       WantedBy=timers.target

  3、创建 pgbackup.timer;内容如下
       [Unit]
       Description=pg_dump backup every day

       [Timer]
       OnBootSec=10min
       OnStartupSec=10min
       OnCalendar=*-*-* 02:00:00        # 每天的凌晨 2 点执行
       Unit=pgbackup.service

       [Install]
       WantedBy=multi-user.target

然后执行以下命令:
systemctl enable pgbackup.service
systemctl enable pgbackup.timer

systemctl start pgbackup.timer

二、安装 Dropbox,并设定每天凌晨 5 点开始备份,完成备份后自动退出

   1、安装 Dropbox,请自行搜索 Google,很简单。记得下载 dropbox.py,放在~/ 下即可, 并执行以下命令:
        sudo chmod +x ~/dropbox.py
        ln -s  ~/bak/  ~/Dropbox/       # 将上面 postgresql 的备份目录加入 Dropbox 的主目录(同步)
   
   2、创建~/dropbox.sh(这个非常重要,因为 dropbox.py 有一个问题,完成 sync 后,不会退出,会在后台一直占用 140M 左右的内存),内容如下:

#!/usr/bin/sh

start() {
~/dropbox.py start
}
stop() {
~/dropbox.py stop
}
isidle() {
if “$(~/dropbox.py status)” == “Up to date” ]; then
return 1;
else
return 0;
fi
}

case $1 in
"start")
start
sleep 30
isidle
while $? == 0 ]
do
sleep 30
isidle
done
stop
;;
“stop”)
stop
;;
*)
;;
esac

  3、创建 dropbox.service 内容如下:
       [Unit]
       Description=dropbox sync

       [Service]
       User=user
       Group=users
       Type=simple
       ExecStart= ~/dropbox.sh  start >/dev/null 2>&1

       [Install]
       WantedBy=timers.target

  4、创建 dropbox.timer;内容如下
       [Unit]
       Description=dropbox sync every day

       [Timer]
       OnBootSec=10min
       OnStartupSec=10min
       OnCalendar=*-*-* 05:00:00        # 每天的凌晨 5 点执行
       Unit=dropbox.service

       [Install]
       WantedBy=multi-user.target

然后执行以下命令:
systemctl enable dropbox.service
systemctl enable dropbox.timer

systemctl start dropbox.timer

这样,每天凌晨 2 点 postgresql 会自动备份数据库到~/bak;然后在凌晨 5 点的时候,Dropbox 开始同步,一周自己下载备份到移动硬盘一次,完全自动化。

以上红色的字体,请注意路径或文件名,记得修改为你自己的文件名或路径。

技术实用贴,要顶一下