背景
上一篇文章异地备份MYSQL数据库已经写明了如何备份Mysql数据库到oss和cos,如果使用的是postgres数据库,这种方法也仍然适用。
备份脚本准备
备份脚本基本和Mysql的备份脚本一致,工具是专用的工具:pg_dump,对应的shell:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 
 | #!/bin/bash
 DB_HOST=""
 DB_PORT=""
 DB_USER=""
 DB_PASSWORD=""
 
 OSS_BUCKET_NAME=""
 COS_BUCKET_NAME=""
 PREFIX="postgrep"
 
 # 备份目录
 BACKUP_DIR="postgrepbackup"
 
 BACKUP_FOLDER=$(date +"%Y-%m-%d-%H_%M_%S")
 # 拼接最新的文件夹
 BACKUP_FOLDER_PATH="$BACKUP_DIR/$BACKUP_FOLDER"
 # 创建好对应的文件夹
 mkdir -p $BACKUP_FOLDER_PATH
 # 校验postgres的本班
 psql --version
 
 # 获取数据库列表
 database_list=$(PGPASSWORD="${DB_PASSWORD}" psql -h "${DB_HOST}" -p "${DB_PORT}" -U "${DB_USER}" -l -t | cut -d'|' -f1 | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')
 
 # 备份每个数据库
 for database in ${database_list}; do
 # 备份文件名
 backup_file="${BACKUP_FOLDER_PATH}/${database}.sql"
 
 # 执行备份命令
 PGPASSWORD="${DB_PASSWORD}" pg_dump -h "${DB_HOST}" -p "${DB_PORT}" -U "${DB_USER}" -d "${database}" -f "${backup_file}"
 
 # 检查备份是否成功
 if [ $? -eq 0 ]; then
 echo "数据库 ${database} 备份成功: ${backup_file}"
 else
 echo "数据库 ${database} 备份失败"
 fi
 
 # 文件上传到oss
 ossutil cp -r postgrepbackup oss://$OSS_BUCKET_NAME/$PREFIX/ --update -c mysql/ossutilconfig
 #文件上传到cos
 coscli cp postgrepbackup/ cos://$COS_BUCKET_NAME/$PREFIX/ -r -c mysql/cos.yaml
 
 done
 
 
 | 
运行环境准备
阿里云的flow支持直接在docker镜像内运行对应的脚本,所以要准备一个合适的docker镜像,需要满足三个条件:
注意: 我的postgres的版本是14.4 对应pgdump 要安装对应的版本,不然会提示版本不匹配。
直接根据对应的需求写一个简单的dockerfile:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 
 | # centOS镜像FROM centos:7
 
 # 备份原始的yum源配置文件
 RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
 
 # 添加阿里云的yum源配置文件
 ADD https://mirrors.aliyun.com/repo/Centos-7.repo /etc/yum.repos.d/CentOS-Base.repo
 
 # 清除yum缓存
 RUN yum clean all
 RUN yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
 
 RUN yum -y update && yum install -y postgresql14-server
 
 COPY coscli /usr/bin/
 COPY ossutil /usr/bin/
 
 | 
需要提前将对应的文件下载到本地,然后赋予执行权限:
| 12
 
 | chmod +x cosclichmod +x ossutil
 
 | 
接下来就是build镜像,然后推送到镜像仓库(阿里云个人镜像):
| 12
 
 | docker build -t aliyun-postgres:latest .docker push aliyun-postgres:latest
 
 | 
创建GIT仓库
创建一个空的git仓库,将cosconfig、ossconfig需要的ak等信息存储在仓库中,然后push到git仓库
cosconfig.yaml示例:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 
 | cos:base:
 secretid:  sid加密
 secretkey: sek加密
 sessiontoken: token
 protocol: https
 mode: ""
 cvmrolename: ""
 buckets:
 - name: bucket-name
 alias: bucket-name
 region: "ap-shanghai"
 endpoint: cos.ap-shanghai.myqcloud.com
 ofs: false
 
 | 
ossconfig.yaml示例:
| 12
 3
 4
 5
 6
 
 | [Credentials]language=EN
 endpoint  = oss-cn-beijing.aliyuncs.com
 accessKeyID = akid
 accessKeySecret = aks
 mode = AK
 
 | 
创建阿里云flow任务
直接使用自定义镜像创建任务,将上述脚本写入到shell中,然后执行脚本,再设置定时触发,就可以定时备份postgres数据库了。
总结
由于有了鼓捣mysql备份的经验,再去鼓捣postgres备份就快的多了,基本上就是写脚本,自己拼接合适的镜像,然后再定时执行脚本,这个事就办好了。
学而时习之,不亦乐乎。