Skip to content
Snippets Groups Projects
Select Git revision
  • 3902974926601e71675d22630fd9ee6232cfd062
  • main default protected
  • f-fix-patch-8.1.0
  • dev protected
  • f-linkahead-rename
  • f-real-id
  • f-filesystem-import
  • f-filesystem-link
  • f-filesystem-directory
  • f-filesystem-core
  • f-filesystem-cleanup
  • f-filesystem-main
  • f-name
  • keep_changes
  • f-permission-checks-2
  • f-mysql8-tests
  • f-retrieve-history
  • t-distinct-parents
  • v8.1.0
  • v8.0.0
  • v7.0.2
  • v7.0.1
  • v7.0.0
  • v6.0.1
  • v6.0.0
  • v5.0.0
  • v4.1.0
  • v4.0.0
  • v3.0
  • v2.0.30
30 results

backup.sh

Blame
  • user avatar
    Daniel authored
    fc7e5ff7
    History
    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