PostgreSQL备份和恢复(Docker安装)

如果你不相信努力和时光,那么成果就会是第一个选择辜负你的。不要去否定你自己的过去,也不要用你的过去牵扯你现在的努力和对未来的展望。不是因为拥有希望你才去努力,而是去努力了,你才有可能看到希望的光芒。PostgreSQL备份和恢复(Docker安装),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

一.准备备份脚本并拷贝进容器

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/199986.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!