抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

背景

上一篇文章异地备份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镜像,需要满足三个条件:

  • 容器中包含pgdump命令
  • 容器中带阿里云OSS的操作工具:ossutil
  • 容器中包含腾讯云COS的操作工具:coscli

注意: 我的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仓库,将cosconfigossconfig需要的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备份就快的多了,基本上就是写脚本,自己拼接合适的镜像,然后再定时执行脚本,这个事就办好了。

学而时习之,不亦乐乎。

评论