Bootstrap

docker-compose 安装 pgsql (postgres)

docker-compose-pg.yml 文件内容

version: '3'
services:
  iepms-gateway:
    image: postgres:14.13
    container_name: postgresql-14.13
    restart: always
    privileged: true
    environment:
      - POSTGRES_PASSWORD: test@2024
    ports:
      - 15432:5432
    volumes:
      - /home/iepms/data/pgsql/data:/var/lib/postgresql/data
      - /home/iepms/backup/pgsql/data:/mnt
    networks:
      - env_iepms_app

networks:  
  env_iepms_app:  
    external: true

我这边指定了 外部网络 env_iepms_app 如果这个网络不存在,就会创建失败。

docker network ls 查看网络
docker network create env_iepms_app 创建网络

定时备份脚本
pg_backup.sh

#!/bin/bash

# 设置数据库连接参数
DB_HOST="localhost"
DB_PORT="5432"
DB_NAME="test"  # 替换为你的数据库名
DB_USER="postgres"  # 替换为你的数据库用户
DB_PASS="test@2024"  # 替换为你的数据库密码

# 设置备份目录
BACKUP_DIR="/mnt"  # 替换为你的备份文件存放目录

# 获取当前时间戳
TIMESTAMP=$(date +"%Y%m%d%H%M%S")

# 设置备份文件名
BACKUP_FILE="$BACKUP_DIR/backup_$DB_NAME_$TIMESTAMP.sql"

# 使用pg_dump命令备份数据库
docker exec -u postgres 容器名称 pg_dump -h $DB_HOST -p $DB_PORT -U $DB_USER -d $DB_NAME -Fc -b -v -f "$BACKUP_FILE"

# 检查备份是否成功,并导出备份日志
if [ $? -eq 0 ]; then
    echo "$TIMESTAMP Backup completed successfully: $BACKUP_FILE" >> $BACKUP_DIR/pg_backup.log
else
    echo "$TIMESTAMP Backup failed." >> $BACKUP_DIR/pg_backup.log
fi

# 检查并删除指定天数前的备份文件(例如:删除5天前的备份)
find "$BACKUP_DIR" -type f -name "$DB_NAME_*.sql" -mtime +1 -exec rm {} \;
echo "$TIMESTAMP Backup completed and old backups cleaned up." >> $BACKUP_DIR/pg_backup.log

Linux 添加定时任务

crontab -e 编辑当前用户的cron任务
crontab -l 查看任务列表

0 1 * * * /home/backup/pg_backup.sh 每天凌晨1点执行脚本

第一个数字代表分钟(0-59)。

第二个数字代表小时(0-23)。

第三个数字代表一个月中的某一天(1-31)。

第四个数字代表月份(1-12)。

第五个数字代表一周中的某一天(0-7),0或7代表周日。

;