這里只是關(guān)鍵步驟,使用需要對(duì)PostgreSql,docker,aws有一定的了解庶近。
PostgreSql 數(shù)據(jù)備份和恢復(fù)
備份PostgreSql數(shù)據(jù)庫(kù)成二進(jìn)制文件(壓縮率高)
- 利用
pg_dump
備份
pg_dump -h {pg_host} -U {pg_username} -d {pg_database} -F c -f {pg_backupfile}
恢復(fù)
- 恢復(fù)時(shí)候首先需要?jiǎng)?chuàng)建數(shù)據(jù)庫(kù)
CREATE DATABASE {pg_database};
- 利用
pg_restore
直接還原二進(jìn)制文件備份文件到相應(yīng)的數(shù)據(jù)庫(kù)。
pg_restore -h {pg_host} -U {pg_username} -d {pg_database} {pg_backupfile}
利用AWS batch備份PostgreSql數(shù)據(jù)庫(kù)到S3
有了上面的基礎(chǔ)我們就可以利用aws batch 實(shí)現(xiàn)數(shù)據(jù)庫(kù)的備份
首先我們寫一個(gè)Dockerfile(這里aws的權(quán)限直接使用batch的配置,所以沒在docker里面配置)
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環(huán)境變量,不使用batch直接替換成明文即可
#眷蚓!/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"
這時(shí)候可以本地自己生成images放到AWS ECR. 也可以使用gitlab的CI/CD. 下面是.gitlab-ci.yml 參考
CI/CD環(huán)境請(qǐng)自行配置
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
batch簡(jiǎn)單配置
任務(wù)運(yùn)行命令鼻种,以及環(huán)境變量
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 |