postgresql数据库定时备份到远程数据库

postgresql数据库定时备份到远程数据库

1.老规矩,服务器目录结构:
在这里插入图片描述

conf目录无内容
profile:

# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).

if [ "`id -u`" -eq 0 ]; then
  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
  PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
fi
export PATH

if [ "${PS1-}" ]; then
  if [ "${BASH-}" ] && [ "$BASH" != "/bin/sh" ]; then
    # The file bash.bashrc already sets the default PS1.
    # PS1='\h:\w\$ '
    if [ -f /etc/bash.bashrc ]; then
      . /etc/bash.bashrc
    fi
  else
    if [ "`id -u`" -eq 0 ]; then
      PS1='# '
    else
      PS1='$ '
    fi
  fi
fi

if [ -d /etc/profile.d ]; then
  for i in /etc/profile.d/*.sh; do
    if [ -r $i ]; then
      . $i
    fi
  done
  unset i
fi



export PGPASSWORD='root'

其中: 最后一行
export PGPASSWORD=‘root’
是需要备份的数据库的密码,因为直接用 pg_dump 命令备份需要输入密码交互,而我们需要达到自动备份,所以借助这种方式不需要输入密码

docker-compose.yml:

version: '3.1'

services:
    postgresdb:
        image: postgres:12-alpine
        container_name: postgres
        restart: on-failure:500
        environment:
            POSTGRES_USER: "root"
            POSTGRES_PASSWORD: "root"
        volumes:
            - ./data:/var/lib/postgresql/data
            - ./profile:/etc/profile
            - ./conf:/usr/share/postgresql
        ports:
            - 5432:5432

启动容器:

docker-compose up -d

然后再data目录下面创建 back目录,在back目录下面创建 backup.sh 命令。
在这里插入图片描述
backup.sh:

#!/bin/bash

# 数据库信息
DB_HOST=远程数据库的ip
DB_PORT=5432
DB_USER=root
DB_NAME=carbonease_procostra
#文备份文件夹目录
BACKUP_DIR=/var/lib/postgresql/data/back

#备份文件名称
BACKUP_FILE=$BACKUP_DIR/$DB_NAME-$(date +%Y%m%d%H%M%S).sql.gz


pg_dump -h $DB_HOST -p $DB_PORT -U $DB_USER -d  $DB_NAME   | gzip >$BACKUP_FILE


#查找7天前的数据 删除
find $BACKUP_DIR -type f -name "*.gz" -mtime +7 -exec rm {} \;

给执行文件赋予权限:

chmod u+x backup.sh

然后测试一下备份命令:

docker exec 001341f581f1 bash -c "source /etc/profile && /var/lib/postgresql/data/back/backup.sh"

在这里插入图片描述
成功备份!

最后,设置定时任务

输入命令:

crontab -e 

进入编辑框,里面内容:

0 1 * * * sudo docker exec 001341f581f1 bash -c "source /etc/profile && /var/lib/postgresql/data/back/backup.sh" >> /opt/PostgreSQL/data/back/back.log 2>&1

每天晚上10点半备份一次

30 22 * * * sudo docker exec 001341f581f1 bash -c "source /etc/profile && /var/lib/postgresql/data/back/backup.sh" >> /opt/PostgreSQL/data/back/back.log 2>&1

查看定时任务列表命令:

crontab -l

在这里插入图片描述
查看定时任务服务状态:

systemctl status crond

完结!!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值