备份在Digital Ocean上的容器中运行的PostgreSQL数据库

时间:2020-09-11 03:25:19

标签: postgresql docker docker-compose

我是Docker的新手,我正在开发另一个开发人员编写的项目,该项目正在Digital Ocean Ubuntu 18.04 上运行。它由2个容器组成(1个容器用于Django App,1个容器用于PostgreSQL数据库)。

现在我需要获得数据库的备份,我找到了以前程序员编写的bash文件:

### Create a database backup.
###
### Usage:
###     $ docker-compose -f <environment>.yml (exec |run --rm) postgres backup
set -o errexit
set -o pipefail
set -o nounset


working_dir="$(dirname ${0})"
source "${working_dir}/_sourced/constants.sh"
source "${working_dir}/_sourced/messages.sh"


message_welcome "Backing up the '${POSTGRES_DB}' database..."


if [[ "${POSTGRES_USER}" == "postgres" ]]; then
    message_error "Backing up as 'postgres' user is not supported. Assign 'POSTGRES_USER' env with another one and try again."
    exit 1
fi

export PGHOST="${POSTGRES_HOST}"
export PGPORT="${POSTGRES_PORT}"
export PGUSER="${POSTGRES_USER}"
export PGPASSWORD="${POSTGRES_PASSWORD}"
export PGDATABASE="${POSTGRES_DB}"

backup_filename="${BACKUP_FILE_PREFIX}_$(date +'%Y_%m_%dT%H_%M_%S').sql.gz"
pg_dump | gzip > "${BACKUP_DIR_PATH}/${backup_filename}"


message_success "'${POSTGRES_DB}' database backup '${backup_filename}' has been created and placed in '${BACKUP_DIR_PATH}'."

我的第一个问题是:
这个命令对吗?我的意思是如果我跑了:

docker-compose -f production.yml (exec |run --rm) postgres backup

会在书面位置为我的数据库创建备份吗?

第二个问题:我可以在数据库容器运行时运行此命令吗?还是我应该运行 docker-compose down ,然后运行命令进行备份,然后再次运行 docker-compose up

1 个答案:

答案 0 :(得分:0)

确保您可以运行该脚本进行备份,一种实现方法是使用docker-compose exec db /bin/bash在容器中执行Shell,然后运行该脚本。

其他方法是运行连接到postgres容器网络的新的postgres容器:

docker run -it --name pgback -v /path/backup/host:/var/lib/postgresql/data --network composeNetwork postgres /bin/bash

这将创建一个新的postgres容器,该容器连接到用compose创建的网络,并附加了绑定卷,然后您可以在容器中创建此脚本并将数据库备份到该卷,以将其保存到容器外的其他位置

然后,当您要备份简单的启动docker容器并备份时: docker start -a -i pgback

您不需要创建其他撰写文件,只需将脚本复制到容器中并运行它,也可以使用该脚本创建一个新的postgres图像并从CMD运行它,仅用于运行容器,有很多方法去做。