利用AWS batch备份PostgreSql数据库到S3

这里只是关键步骤,使用需要对PostgreSql,docker,aws有一定的了解。

PostgreSql 数据备份和恢复

备份PostgreSql数据库成二进制文件(压缩率高)
  • 利用pg_dump备份
r 复制代码
pg_dump  -h {pg_host} -U {pg_username} -d {pg_database} -F c -f {pg_backupfile}
恢复
  • 恢复时候首先需要创建数据库
ini 复制代码
CREATE DATABASE {pg_database};
  • 利用pg_restore直接还原二进制文件备份文件到相应的数据库。

    pg_restore -h {pg_host} -U {pg_username} -d {pg_database} {pg_backupfile}

利用AWS batch备份PostgreSql数据库到S3

有了上面的基础我们就可以利用aws batch 实现数据库的备份

  • 首先我们写一个Dockerfile(这里aws的权限直接使用batch的配置,所以没在docker里面配置)
bash 复制代码
FROM ubuntu
RUN apt update
RUN apt install postgresql-client unzip curl -y
RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
RUN unzip awscliv2.zip
RUN ./aws/install
RUN ./aws/install --bin-dir /usr/local/bin --install-dir /usr/local/aws-cli --update
COPY ./postgresql_backup.sh .
RUN  chmod +x postgresql_backup.sh
  • 下面是Dockerfile 用到的sh脚本 (里面用到了batch环境变量,不使用batch直接替换成明文即可)
bash 复制代码
#!/bin/bash
echo "start"
echo $pg_host
echo $pg_username
echo $pg_database
echo $pg_backupfile
echo $pg_s3_path
aws --version
export PGPASSWORD=$pg_password
pg_dump  -h $pg_host -U $pg_username -d $pg_database -F c -f $pg_backupfile
aws s3 cp $pg_backupfile $pg_s3_path
echo "end"
  • 这时候可以本地自己生成images放到AWS ECR. 也可以使用gitlab的CI/CD. 下面是.gitlab-ci.yml 参考

CI/CD环境请自行配置

css 复制代码
stages:
    - dockerimage

dockerize:
    stage: dockerimage
    script:
        - aws --version
        - echo `aws ecr get-login --registry-ids {aws_account_id} --no-include-email --region <region>`
        - docker buildx build --file Dockerfile --pull --tag <aws_account_id>.dkr.ecr.<region>.amazonaws.com/postgresql_backup:$CI_COMMIT_TAG --build-arg VersionSuffix=$CI_COMMIT_TAG --push .
    tags:
        - linux
    only:
        - tags

AWS Batch简单配置

任务运行命令,以及环境变量

Job command : ["/bin/bash","./postgresql_backup.sh"]

Job environment variable:

key value
pg_backupfile
pg_s3_path
pg_username
pg_host
pg_password
pg_database
相关推荐
望江东浪20 小时前
Vector 选型与实战:vs OTel / Logstash / Fluentd 全维对比,及统一日志与指标管道的 AWS ECS 落地
云计算·aws
威联通网络存储5 天前
基于TS-h3087XU-RP的大型成套空分设备DCS历史趋势数据治理
aws
A小辣椒21 天前
AWS Clould Support Engineer就职面试题
aws
亚林瓜子23 天前
AWS WAF中如何放行某个触发了托管规则的接口
aws·waf
悠悠1213825 天前
AWS DevOps Agent 体验一周后,我决定把 oncall 手机调成静音了
云计算·aws·devops
yyuuuzz25 天前
独立站运营的几个技术层面常见问题
大数据·运维·服务器·网络·数据库·aws
yyuuuzz25 天前
游戏云服务器推荐的技术选择思路
大数据·运维·服务器·游戏·云计算·aws
kernelcraft1 个月前
Boto3:Python 操作 AWS 的官方 SDK
开发语言·python·其他·aws
普通网友1 个月前
Serverless 框架:多云函数部署(AWS + 阿里云 + 腾讯云)
阿里云·serverless·aws
TG_yunshuguoji1 个月前
亚马逊云代理商:如何用 CloudWatch+Lambda 打造自动化告警系统
大数据·运维·自动化·云计算·aws