PostgreSQL备份和恢复(Docker安装)
一.准备备份脚本并拷贝进容器
vi backup.sh
#内容如下
#!/bin/bash
# PostgreSQL database credentials
DB_NAME="<要备份的数据库名>"
DB_USER="<具有该数据库导出权限的用户>"
DB_PASS="<用户密码>"
DB_HOST="localhost"
DB_PORT="5432"
# Backup directory
BACKUP_DIR="/var/lib/postgresql/backup"
# Export the PostgreSQL password
export PGPASSWORD=$DB_PASS
# Check if the backup file already exists and delete it if it does
if [[ -f "$BACKUP_DIR/$DB_NAME.tar" ]]; then
rm "$BACKUP_DIR/$DB_NAME.tar"
fi
# Create a backup file
pg_dump -h $DB_HOST -p $DB_PORT -U $DB_USER -F t -b -f "$BACKUP_DIR/$DB_NAME.tar" $DB_NAME
# Unset the PostgreSQL password
unset PGPASSWORD
保存后docker cp
到容器里的某一个文件夹内,这边选择的是/var/lib/postgresql
docker cp backup.sh <容器名>:/var/lib/postgresql
二,在宿主机写定时任务去执行容器内的备份脚本
#!/bin/bash
DB_NAME="<要备份的数据库名>"
remove_dir="/home/ngtl/backup/pgsql"
DATE=$(date +"%Y-%m-%d_%H-%M-%S")
#进入容器内部执行dump命令
docker exec -u 0 <容器名> bash -c "su - postgres -c 'cd /var/lib/postgresql; ./backup.sh'"
#拷贝备份文件
docker cp <容器名>:/var/lib/postgresql/backup/$DB_NAME.tar ./
# 使用时间戳重命名
mv "./$DB_NAME.tar" "./$DB_NAME_$DATE.tar"
# 只保留四天内的
find . -type f -name "$DB_NAME_*.tar" -mtime +4 -exec rm {} \;
#scp到其他服器,移动前清空目标路径下的所以backup文件,与宿主机一致
ssh root@<备份机IP> "rm -f $remove_dir/$DB_NAME_*.tar"
scp ./gitea_*.tar root@<备份机IP>:/home/ngtl/backup/pgsql/
crontab -e
#添加如下内容
0 1 * * * <宿主机脚本地址>/backup.sh >> <宿主机脚本地址>/backup.log 2>&1
分类:
Java加班工作日记
标签:
Linux运维
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具