背景
上一篇文章异地备份MYSQL数据库已经写明了如何备份Mysql数据库到oss和cos,如果使用的是postgres数据库,这种方法也仍然适用。
备份脚本准备
备份脚本基本和Mysql的备份脚本一致,工具是专用的工具:pg_dump
,对应的shell:
1 2 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:
1 2 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/
|
需要提前将对应的文件下载到本地,然后赋予执行权限:
1 2
| chmod +x coscli chmod +x ossutil
|
接下来就是build镜像,然后推送到镜像仓库(阿里云个人镜像):
1 2
| docker build -t aliyun-postgres:latest . docker push aliyun-postgres:latest
|
创建GIT仓库
创建一个空的git仓库,将cosconfig
、ossconfig
需要的ak等信息存储在仓库中,然后push到git仓库
cosconfig.yaml
示例:
1 2 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
示例:
1 2 3 4 5 6
| [Credentials] language=EN endpoint = oss-cn-beijing.aliyuncs.com accessKeyID = akid accessKeySecret = aks mode = AK
|
创建阿里云flow任务
直接使用自定义镜像创建任务,将上述脚本写入到shell中,然后执行脚本,再设置定时触发,就可以定时备份postgres数据库了。
总结
由于有了鼓捣mysql备份的经验,再去鼓捣postgres备份就快的多了,基本上就是写脚本,自己拼接合适的镜像,然后再定时执行脚本,这个事就办好了。
学而时习之,不亦乐乎。