Select Git revision
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
backup.sh 3.69 KiB
#!/bin/bash
#
# ** header v3.0
# This file is a part of the CaosDB Project.
#
# Copyright (C) 2018 Research Group Biomedical Physics,
# Max-Planck-Institute for Dynamics and Self-Organization Göttingen
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
# ** end header
#
# Dump a database with all procedures, permissions, structure and data
# The directory which the dump is to be stored to. Do not change it here. Use
# the --backupdir=./my/dir/ option or an environment variable instead.
BACKUPDIR="${BACKUPDIR:-../backup}"
# Iff this (environment) variable is "true" as lower-case, then this script also
# outputs a machine readable status report. The variable can also be set by
# giving the `--yaml` command line option.
YAML="${YAML:-false}"
PRINT_HELP="--backupdir=BACKUPDIR\n\tThe directory which the dump is to be stored to. (Defaults to ./backup,\n\tcan also be set as an environment variable.)\n"
# YAML string templates #######################################################
YAML_FAIL=$(cat << "EOF"
#### YAML ####
error:
code: $error_code
message: $error_message
#### YAML END ####
EOF
)
YAML_SUCCESS=$(cat << "EOF"
#### YAML ####
error:
code: 0
message: Backup successfully created
backup:
location: $file_location
date: $date
#### YAML END ####
EOF
)
# Config and command line parameter loading ###################################
. ../.config
# load useful stuff - parses the commandline parameters and so on...
. ../patches/utils/patch_header.sh
function backup() {
NARG_NAME="$1"
NARG_FILE="$2"
shift 2
# parameters: connection, database, outfile
if [ -e "$NARG_FILE" ]; then
failure "dumpfile already exists."
fi
echo "Dumping database $NARG_NAME to $NARG_FILE ... "
$CMD_MYSQL_DUMP $MYSQL_CONNECTION_NO_DB $* --opt --default-character-set=utf8 --routines \
"$NARG_NAME" > "$NARG_FILE"
if [[ "$YAML" == "true" ]] ; then
yaml_success "$NARG_FILE" "$DATE"
fi
success
}
# Print a YAML failure message, if YAML is true.
#
# Arguments:
# - $1 Error code, integer > 0
# - $2 Error message
function yaml_fail() {
err_code="$1"
err_msg="$2"
local yaml="${YAML_FAIL/\$err_code/$err_code}"
yaml="${yaml/\$err_msg/$err_msg}"
echo "$yaml"
}
# Print a YAML success message, if YAML is true.
#
# Arguments:
# - $1 The file location of the backup file.
# - $2 The current date & time
function yaml_success() {
file_location="$1"
date="$2"
local yaml="${YAML_SUCCESS/\$file_location/$file_location}"
yaml="${yaml/\$date/$date}"
echo "$yaml"
}
## test if dump file exists
#touch dumpfile.tmp
#backup 0 1 2 "dumpfile.tmp"
#rm dumpfile.tmp
# Assert backup dir
mkdir -p "$BACKUPDIR"
DATE=$(date -u --rfc-3339=ns | sed 's/ /T/g')
BACKUPFILE=${BACKUPDIR}/${DATABASE_NAME}.${DATE}.dump.sql
# echo "date: $date" >&2
# echo "file_location: $file_location" >&2
#YAML_SUCCESS=$(cat <<"EOF"
read -r -d '' YAML_SUCCESS <<"EOF" || true
#### YAML ####
error:
code: 0
message: Backup successfully created
backup:
location: $file_location
date: $date
#### YAML END ####
EOF
backup $DATABASE_NAME $BACKUPFILE