mirror of
https://github.com/wassname/docker-postgresql.git
synced 2026-08-11 11:17:48 +08:00
add support for creating backups using pg_basebackup
This commit is contained in:
@@ -9,6 +9,7 @@
|
|||||||
- added `PG_SSL` parameter to enable/disable SSL support
|
- added `PG_SSL` parameter to enable/disable SSL support
|
||||||
- `DB_LOCALE` config parameter renamed to `PG_LOCALE`
|
- `DB_LOCALE` config parameter renamed to `PG_LOCALE`
|
||||||
- complete rewrite of the README
|
- complete rewrite of the README
|
||||||
|
- add support for creating backups using `pg_basebackup`
|
||||||
|
|
||||||
**9.4-2**
|
**9.4-2**
|
||||||
- added replication options
|
- added replication options
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
- [Creating replication user](#creating-replication-user)
|
- [Creating replication user](#creating-replication-user)
|
||||||
- [Setting up a replication cluster](#setting-up-a-replication-cluster)
|
- [Setting up a replication cluster](#setting-up-a-replication-cluster)
|
||||||
- [Creating a snapshot](#creating-a-snapshot)
|
- [Creating a snapshot](#creating-a-snapshot)
|
||||||
|
- [Creating a backup](#creating-a-backup)
|
||||||
- [Logs](#logs)
|
- [Logs](#logs)
|
||||||
- [UID/GID mapping](#uid-gid-mapping)
|
- [UID/GID mapping](#uid-gid-mapping)
|
||||||
- [Maintenance](#maintenance)
|
- [Maintenance](#maintenance)
|
||||||
@@ -219,7 +220,7 @@ docker run --name postgresql -itd --restart always \
|
|||||||
> - No changes will be made if the user already exists
|
> - No changes will be made if the user already exists
|
||||||
> - Only a single user can be created at each launch
|
> - Only a single user can be created at each launch
|
||||||
|
|
||||||
*It is a good idea to create a replication user even if you are not going to use it as it will allow you to setup slave nodes and/or generate snapshots when the need arises.*
|
*It is a good idea to create a replication user even if you are not going to use it as it will allow you to setup slave nodes and/or generate snapshots and backups when the need arises.*
|
||||||
|
|
||||||
## Setting up a replication cluster
|
## Setting up a replication cluster
|
||||||
|
|
||||||
@@ -284,6 +285,26 @@ The difference between a slave and a snapshot is that a slave is read-only and u
|
|||||||
|
|
||||||
This is useful for developers to quickly snapshot the current state of a live database and use it for development/debugging purposes without altering the database on the live instance.
|
This is useful for developers to quickly snapshot the current state of a live database and use it for development/debugging purposes without altering the database on the live instance.
|
||||||
|
|
||||||
|
## Creating a backup
|
||||||
|
|
||||||
|
Just as the case of setting up a slave node or generating a snapshot, you can also create a backup of the data on the master master by specifying `REPLICATION_MODE=backup`.
|
||||||
|
|
||||||
|
> The backups are generated using [pg_basebackup](http://www.postgresql.org/docs/9.4/static/app-pgbasebackup.html) using the replication protocol.
|
||||||
|
|
||||||
|
Once the master node is created as specified in [Setting up a replication cluster](#setting-up-a-replication-cluster), you can create a point-in-time backup using:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker run --name postgresql-backup -it --rm \
|
||||||
|
--link postgresql-master:master \
|
||||||
|
--env 'REPLICATION_MODE=backup' -e 'REPLICATION_SSLMODE=prefer' \
|
||||||
|
--env 'REPLICATION_HOST=master' -e 'REPLICATION_PORT=5432' \
|
||||||
|
--env 'REPLICATION_USER=repluser' --env 'REPLICATION_PASS=repluserpass' \
|
||||||
|
--volume /srv/docker/backups/postgresql.$(date +%Y%m%d%H$M%S):/var/lib/postgresql \
|
||||||
|
sameersbn/postgresql:9.4-8
|
||||||
|
```
|
||||||
|
|
||||||
|
Once the backup is generated, the container will exit and the backup of the master data will be available at `/srv/docker/backups/postgresql.XXXXXXXXXXXX/`. Restoring the backup involves starting a container with the data in `/srv/docker/backups/postgresql.XXXXXXXXXXXX`.
|
||||||
|
|
||||||
## Logs
|
## Logs
|
||||||
|
|
||||||
By default the PostgreSQL server logs are sent to the standard output. Using the [Command-line arguments](#command-line-arguments) feature you can configure the PostgreSQL server to send the log output to a file using the `-c logging_collector=on` argument:
|
By default the PostgreSQL server logs are sent to the standard output. Using the [Command-line arguments](#command-line-arguments) feature you can configure the PostgreSQL server to send the log output to a file using the `-c logging_collector=on` argument:
|
||||||
|
|||||||
+9
-3
@@ -117,7 +117,7 @@ configure_ssl() {
|
|||||||
|
|
||||||
configure_hot_standby() {
|
configure_hot_standby() {
|
||||||
case ${REPLICATION_MODE} in
|
case ${REPLICATION_MODE} in
|
||||||
slave|snapshot) ;;
|
slave|snapshot|backup) ;;
|
||||||
*)
|
*)
|
||||||
echo "Configuring hot standby..."
|
echo "Configuring hot standby..."
|
||||||
set_postgresql_param "wal_level" "hot_standby"
|
set_postgresql_param "wal_level" "hot_standby"
|
||||||
@@ -132,7 +132,7 @@ configure_hot_standby() {
|
|||||||
initialize_database() {
|
initialize_database() {
|
||||||
if [[ ! -f ${PG_DATADIR}/PG_VERSION ]]; then
|
if [[ ! -f ${PG_DATADIR}/PG_VERSION ]]; then
|
||||||
case ${REPLICATION_MODE} in
|
case ${REPLICATION_MODE} in
|
||||||
slave|snapshot)
|
slave|snapshot|backup)
|
||||||
# default params
|
# default params
|
||||||
REPLICATION_PORT=${REPLICATION_PORT:-5432}
|
REPLICATION_PORT=${REPLICATION_PORT:-5432}
|
||||||
REPLICATION_SSLMODE=${REPLICATION_SSLMODE:-prefer}
|
REPLICATION_SSLMODE=${REPLICATION_SSLMODE:-prefer}
|
||||||
@@ -177,6 +177,12 @@ initialize_database() {
|
|||||||
exec_as_postgres PGPASSWORD=$REPLICATION_PASS ${PG_BINDIR}/pg_basebackup -D ${PG_DATADIR} \
|
exec_as_postgres PGPASSWORD=$REPLICATION_PASS ${PG_BINDIR}/pg_basebackup -D ${PG_DATADIR} \
|
||||||
-h ${REPLICATION_HOST} -p ${REPLICATION_PORT} -U ${REPLICATION_USER} -X fetch -w >/dev/null
|
-h ${REPLICATION_HOST} -p ${REPLICATION_PORT} -U ${REPLICATION_USER} -X fetch -w >/dev/null
|
||||||
;;
|
;;
|
||||||
|
backup)
|
||||||
|
echo "Backing up data on $REPLICATION_HOST..."
|
||||||
|
exec_as_postgres PGPASSWORD=$REPLICATION_PASS ${PG_BINDIR}/pg_basebackup -D ${PG_DATADIR} \
|
||||||
|
-h ${REPLICATION_HOST} -p ${REPLICATION_PORT} -U ${REPLICATION_USER} -X fetch -w >/dev/null
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
@@ -289,7 +295,7 @@ create_database() {
|
|||||||
|
|
||||||
create_replication_user() {
|
create_replication_user() {
|
||||||
case $REPLICATION_MODE in
|
case $REPLICATION_MODE in
|
||||||
slave|snapshot) ;; # replication user can only be created on the master
|
slave|snapshot|backup) ;; # replication user can only be created on the master
|
||||||
*)
|
*)
|
||||||
if [[ -n ${REPLICATION_USER} ]]; then
|
if [[ -n ${REPLICATION_USER} ]]; then
|
||||||
if [[ -z ${REPLICATION_PASS} ]]; then
|
if [[ -z ${REPLICATION_PASS} ]]; then
|
||||||
|
|||||||
Reference in New Issue
Block a user