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

news/2024/7/9 23:15:45 标签: 数据库, postgresql

postgresql_0">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

查看定时任务列表命令:

crontab -l

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

systemctl status crond

完结!!


http://www.niftyadmin.cn/n/5006984.html

相关文章

数字化时代,企业为什么要做数字化转型?

企业需要在数字时代进行数字化转型的原因是多方面的: 1.竞争优势:数字化转型使企业能够获得竞争优势。通过采用先进技术和数字化运营,他们可以提供创新的产品和服务,比竞争对手更快地满足客户不断变化的需求。 2.提高效率和降低…

React三属性之:state

作用: state是用于在组件中存储数据,称之为"状态机" 类似于vue2中的data属性,不过操作和vue中data差别很大. 使用: this.state的值不能直接进行赋值操作,如:this.state.value_str 修改的值,需要使用this.setState方法 this.setState({修改的key:修改的value},数…

EFCore sharing

前言 由于项目变动,最近接手了一个新的团队,发现代码常出现SQL性能问题,使用到EF Core技术,故针对常用的EF Core使用场景做了一些培训,同时也亲测这些代码。 一、Initiate tables 示例:主要使用到以下几个…

【数据结构】链表C语言编写的,它定义了一个链表,并实现了一些基本的链表操作,如创建新节点、插入节点、清空链表、输出链表以及查找节点

#include <stdio.h> // 引入标准输入输出库&#xff0c;用于输入输出操作 #include <stdlib.h> // 引入标准内存分配库&#xff0c;用于动态内存分配 #include <time.h> // 引入标准时间库&#xff0c;用于使用随机数生成函数 // 定义常量DL为…

Qt MinGW / MSVC

MinGW/MSVC的关系 MinGW / MSVC.dll / .lib / .a 的关系 MinGW / MSVC Qt 中有两种方式编译&#xff1a;一种是MinGW &#xff0c;另一种MSVC&#xff0c;是两种不同的编译器。 MinGW(Minimalist GNUfor Windows)&#xff0c;它是一个可自由使用和自由发布的Windows特定头文件…

ELK集群搭建流程(实践可用)

一、概述 ELK 是一个由三个开源软件工具组成的数据处理和可视化平台&#xff0c;包括 Elasticsearch、Logstash 和 Kibana。这些工具都是由 Elastic 公司创建和维护的。 Elasticsearch 是一个分布式的搜索和分析引擎&#xff0c;可以将大量数据存储在一个或多个节点上&#xf…

一个新工具 nolyfill

名字的意思&#xff0c; 我自己的理解 no(po)lyfill 正如它的名字, 不要再用补丁了, 当然这里说的是过时的补丁。 polyfill 是补丁的意思 为什么要用这个插件 文档原文: 当您通过安装最新的 Node.js LTS 来接受最新的功能和安全修复时&#xff0c;像eslint-plugin-import、…

作为产品经理,有必要考PMP或者NPDP么?

产品经理的核心竞争力是什么? 三点&#xff1a;知识、能力和决策 懂得越多&#xff0c;能力越强&#xff0c;决策越正确&#xff0c;核心竞争力越强。一般来说&#xff0c;看的越多&#xff0c;做的越多&#xff0c;实践出经验才是王道&#xff0c;但是&#xff0c;总有看不…