docker-compose-pg.yml 文件内容
version: '3'
services:iepms-gateway:image: postgres:14.13container_name: postgresql-14.13restart: alwaysprivileged: trueenvironment:- POSTGRES_PASSWORD: test@2024ports:- 15432:5432volumes:- /home/iepms/data/pgsql/data:/var/lib/postgresql/data- /home/iepms/backup/pgsql/data:/mntnetworks:- env_iepms_appnetworks: 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 ]; thenecho "$TIMESTAMP Backup completed successfully: $BACKUP_FILE" >> $BACKUP_DIR/pg_backup.log
elseecho "$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代表周日。