diff --git a/Makefile.am b/Makefile.am index d1e8ab6..29ac829 100644 --- a/Makefile.am +++ b/Makefile.am @@ -27,7 +27,9 @@ bin_SCRIPTS = \ scripts/guix-data-service-process-branch-updated-email \ scripts/guix-data-service-process-branch-updated-mbox \ scripts/guix-data-service-manage-build-servers \ - scripts/guix-data-service-query-build-servers + scripts/guix-data-service-query-build-servers \ + scripts/guix-data-service-backup-database \ + scripts/guix-data-service-create-small-backup moddir = $(prefix)/share/guile/site/$(GUILE_EFFECTIVE_VERSION) godir = $(prefix)/lib/guile/$(GUILE_EFFECTIVE_VERSION)/site-ccache diff --git a/scripts/guix-data-service-backup-database b/scripts/guix-data-service-backup-database new file mode 100755 index 0000000..365f78c --- /dev/null +++ b/scripts/guix-data-service-backup-database @@ -0,0 +1,25 @@ +#!/bin/sh + +set -eux + +DATABASE_NAME=guix_data_service +DEFAULT_BACKUP_DIRECTORY="/var/lib/guix-data-service/dumps" +BACKUP_DIRECTORY="${GUIX_DATA_SERVICE_BACKUP_DIRECTORY:-$DEFAULT_BACKUP_DIRECTORY}" + +DATE="$(date "+%Y-%m-%d")" + +FULL_BACKUP_NAME="guix_data_service_full.dump" +TEMPORARY_FILE_NAME="${TMPDIR:-/tmp}/guix_data_service_full-$DATE.dump.tmp" +DESTINATION_FILE_NAME="$BACKUP_DIRECTORY/$DATE/$FULL_BACKUP_NAME" + +renice 19 -p $$ +ionice -p $$ -c 3 + +pg_dump --format=custom --compress=9 --serializable-deferrable \ + --username=guix_data_service \ + --file="$TEMPORARY_FILE_NAME" \ + "$DATABASE_NAME" + +mkdir -p "$BACKUP_DIRECTORY/$DATE" + +mv "$TEMPORARY_FILE_NAME" "$DESTINATION_FILE_NAME" diff --git a/scripts/guix-data-service-create-small-backup b/scripts/guix-data-service-create-small-backup new file mode 100755 index 0000000..c5c5678 --- /dev/null +++ b/scripts/guix-data-service-create-small-backup @@ -0,0 +1,228 @@ +#!/bin/sh + +set -eux + +TMP_DATABASE_NAME=guix_data_service_small +DEFAULT_BACKUP_DIRECTORY="/var/lib/guix-data-service/dumps" +BACKUP_DIRECTORY="${GUIX_DATA_SERVICE_BACKUP_DIRECTORY:-$DEFAULT_BACKUP_DIRECTORY}" + +if [ -z "${1:-}" ]; then + DATE="$(date "+%Y-%m-%d")" +else + DATE="$1" +fi + +FULL_BACKUP_NAME="guix_data_service_full.dump" +SMALL_BACKUP_NAME="guix_data_service_small.dump" + +renice 19 -p $$ +ionice -p $$ -c 3 + +TMP_DATABASE=$(mktemp -d -t guix-data-service-database-XXXX) +URI=$(pg_tmp -w 0 -d "$TMP_DATABASE") + +function cleanup { + pg_tmp stop -w 1 -d "$TMP_DATABASE" +} +trap cleanup EXIT + +psql --no-psqlrc "$URI" --command="CREATE USER guix_data_service" +psql --no-psqlrc "$URI" --command="CREATE DATABASE $TMP_DATABASE_NAME WITH OWNER guix_data_service" + +URI_FOR_DATABASE="${URI/test/$TMP_DATABASE_NAME}" + +pg_restore --username=guix_data_service --jobs=8 --dbname="$URI_FOR_DATABASE" \ + "$BACKUP_DIRECTORY/$DATE/$FULL_BACKUP_NAME" + +psql -v ON_ERROR_STOP=1 --echo-queries --no-psqlrc "$URI_FOR_DATABASE" -U guix_data_service <