备份postgres数据库

2020-12-08  本文已影响0人  Lupino

在我这里 postgres 数据库,是通过docker 跑的,所有很对个节点。

我来看导出SQL的命令:

pg_dumpall -f backup.sql

我们通过 docker exec 进入到数据库的容器中,执行上面的命令就可以备份数据库了。

docker exec -u postgres -w /var/lib/postgresql/data xxx_postgres_1 pg_dumpall -f backup.sql

然后将备份的 SQL 从容器中复制出来就可以。

docker cp xxx_postgres_1:/var/lib/postgresql/data/backup.sql backup.sql

我们 postgres 服务用docker跑了多个节点,所以需要利用bash来批量备份。

#!/usr/bin/env bash

ROOT=$(cd "$(dirname "$0")" || exit; pwd)

BACKUP_PATH=${ROOT}/backup/$(date +"%Y-%m-%d")

mkdir -p ${BACKUP_PATH}

NOW=$(date +"%H.%M")

dump_postgres () {
    CONTAINER=$1
    echo "Dump ${CONTAINER}"
    SQL_FILE=${BACKUP_PATH}/${CONTAINER}-${NOW}.sql
    docker exec -u postgres -w /var/lib/postgresql/data ${CONTAINER} pg_dumpall -f backup.sql
    docker cp ${CONTAINER}:/var/lib/postgresql/data/backup.sql ${SQL_FILE}
    gzip ${SQL_FILE}
}

docker ps | grep postgres | awk '{print $NF}' | while read CONTAINER; do
    dump_postgres ${CONTAINER}
done

建了一个日期的目录,将要备份的SQL文件放到里面。
考虑到我们一天可能备份很多次,所以文件名记一个时间。

我们写成一个 dump_postgres 的函数, 这个函数导出postgres 数据并复制到备份目录下面,然后压缩。

我们用 docker ps 查看正在运行的 Container,然后用 grep postgres 过滤出 postgres 数据库的 Container, 再用 awk '{print $NF}' 输出最后一列 Container 名称, 最后 while read CONTAINER 读出来,然后执行 dump_postgres ${CONTAINER}

通过这个脚本,我们就可以一次导出所有 postgres 的数据,将其备份起来。

上一篇下一篇

猜你喜欢

热点阅读