From 9a07552731618f0e5eb1fad96252fbb99d91eaee Mon Sep 17 00:00:00 2001 From: Jeremy Dubois Date: Tue, 27 Oct 2020 10:45:11 +0100 Subject: [PATCH] Import last zzz_evobackup file version --- roles/base/files/zzz_evobackup | 104 ++++++++++++++++++++------------- 1 file changed, 64 insertions(+), 40 deletions(-) diff --git a/roles/base/files/zzz_evobackup b/roles/base/files/zzz_evobackup index ec64280..b38afc2 100755 --- a/roles/base/files/zzz_evobackup +++ b/roles/base/files/zzz_evobackup @@ -30,7 +30,7 @@ SERVERS="node0.backup.example.com:2XXX node1.backup.example.com:2XXX" SERVERS_FALLBACK=${SERVERS_FALLBACK:-1} # timeout (in seconds) for SSH connections -SSH_CONNECT_TIMEOUT=${SSH_CONNECT_TIMEOUT:-30} +SSH_CONNECT_TIMEOUT=${SSH_CONNECT_TIMEOUT:-90} ## We use /home/backup : feel free to use your own dir LOCAL_BACKUP_DIR="/home/backup" @@ -83,7 +83,7 @@ test_server() { else # SSH connection failed new_error=$(printf "Failed to connect to \`%s' within %s seconds" "${item}" "${SSH_CONNECT_TIMEOUT}") - SERVERS_SSH_ERRORS=$(printf "%s\n%s" "${SERVERS_SSH_ERRORS}" "${new_error}" | sed -e '/^$/d') + SERVERS_SSH_ERRORS=$(printf "%s\\n%s" "${SERVERS_SSH_ERRORS}" "${new_error}" | sed -e '/^$/d') return 1 fi @@ -96,16 +96,16 @@ pick_server() { if [ "${increment}" -ge "${list_length}" ]; then # We've reached the end of the list new_error="No more server available" - SERVERS_SSH_ERRORS=$(printf "%s\n%s" "${SERVERS_SSH_ERRORS}" "${new_error}" | sed -e '/^$/d') + SERVERS_SSH_ERRORS=$(printf "%s\\n%s" "${SERVERS_SSH_ERRORS}" "${new_error}" | sed -e '/^$/d') # Log errors to stderr - printf "%s\n" "${SERVERS_SSH_ERRORS}" >&2 + printf "%s\\n" "${SERVERS_SSH_ERRORS}" >&2 # Log errors to logfile - printf "%s\n" "${SERVERS_SSH_ERRORS}" >> $LOGFILE + printf "%s\\n" "${SERVERS_SSH_ERRORS}" >> $LOGFILE return 1 fi - # Extract the day of month, without leading 0 (which would give an octal based number) + # Extract the day of month, without leading 0 (which would give an octal based number) today=$(date +%e) # A salt is useful to randomize the starting point in the list # but stay identical each time it's called for a server (based on hostname). @@ -123,14 +123,14 @@ pick_server() { if [ -e "${PIDFILE}" ]; then pid=$(cat "${PIDFILE}") # Does process still exist ? - if kill -0 ${pid} 2> /dev/null; then + if kill -0 "${pid}" 2> /dev/null; then # Killing the childs of evobackup. for ppid in $(pgrep -P "${pid}"); do kill -9 "${ppid}"; done # Then kill the main PID. kill -9 "${pid}" - printf "%s is still running (PID %s). Process has been killed" "$0" "${pid}\n" >&2 + printf "%s is still running (PID %s). Process has been killed" "$0" "${pid}\\n" >&2 else rm -f ${PIDFILE} fi @@ -160,29 +160,33 @@ if [ "${LOCAL_TASKS}" = "1" ]; then # mysqldump --defaults-extra-file=/etc/mysql/debian.cnf --force -P 3306 -Q --opt --events --hex-blob --skip-comments \ # --fields-enclosed-by='\"' --fields-terminated-by=',' -T /home/mysqldump/$i $i; done + ## Dump all grants (requires 'percona-toolkit' package) + # mkdir -p -m 700 ${LOCAL_BACKUP_DIR}/mysql/ + # pt-show-grants --flush --no-header > ${LOCAL_BACKUP_DIR}/mysql/all_grants.sql + ## example with SQL dump (schema only, no data) for each databases - # mkdir -p -m 700 /home/mysqldump/ + # mkdir -p -m 700 ${LOCAL_BACKUP_DIR}/mysql/ # for i in $(mysql --defaults-extra-file=/etc/mysql/debian.cnf -P 3306 -e 'show databases' -s --skip-column-names \ # | egrep -v "^(Database|information_schema|performance_schema|sys)"); do - # mysqldump --defaults-extra-file=/etc/mysql/debian.cnf --force -P 3306 --no-data --databases $i > /home/mysqldump/${i}.schema.sql + # mysqldump --defaults-extra-file=/etc/mysql/debian.cnf --force -P 3306 --no-data --databases $i > ${LOCAL_BACKUP_DIR}/mysql/${i}.schema.sql # done ## example with compressed SQL dump (with data) for each databases - # mkdir -p -m 700 /home/mysqldump/ + # mkdir -p -m 700 ${LOCAL_BACKUP_DIR}/mysql/ # for i in $(mysql --defaults-extra-file=/etc/mysql/debian.cnf -P 3306 -e 'show databases' -s --skip-column-names \ # | egrep -v "^(Database|information_schema|performance_schema|sys)"); do - # mysqldump --defaults-extra-file=/etc/mysql/debian.cnf --force -P 3306 --events --hex-blob $i | gzip --best > /home/mysqldump/${i}.sql.gz + # mysqldump --defaults-extra-file=/etc/mysql/debian.cnf --force -P 3306 --events --hex-blob $i | gzip --best > ${LOCAL_BACKUP_DIR}/mysql/${i}.sql.gz # done ## example with *one* uncompressed SQL dump for *one* database (MYBASE) - # mkdir -p -m 700 /home/mysqldump/MYBASE - # chown -RL mysql /home/mysqldump/ + # mkdir -p -m 700 ${LOCAL_BACKUP_DIR}/mysql/MYBASE + # chown -RL mysql ${LOCAL_BACKUP_DIR}/mysql/ # mysqldump --defaults-extra-file=/etc/mysql/debian.cnf --force -Q \ - # --opt --events --hex-blob --skip-comments -T /home/mysqldump/MYBASE MYBASE + # --opt --events --hex-blob --skip-comments -T ${LOCAL_BACKUP_DIR}/mysql/MYBASE MYBASE ## example with mysqlhotcopy - # mkdir -p -m 700 /home/mysqlhotcopy/ - # mysqlhotcopy BASE /home/mysqlhotcopy/ + # mkdir -p -m 700 ${LOCAL_BACKUP_DIR}/mysqlhotcopy/ + # mysqlhotcopy BASE ${LOCAL_BACKUP_DIR}/mysql/mysqlhotcopy/ ## example for multiples MySQL instances # mysqladminpasswd=$(grep -m1 'password = .*' /root/.my.cnf|cut -d" " -f3) @@ -225,7 +229,14 @@ if [ "${LOCAL_TASKS}" = "1" ]; then ## Redis ## example with copy .rdb file + ## for the default instance : # cp /var/lib/redis/dump.rdb ${LOCAL_BACKUP_DIR}/ + ## for multiple instances : + # for instance in $(ls -d /var/lib/redis-*); do + # name=$(basename $instance) + # mkdir -p ${LOCAL_BACKUP_DIR}/${name} + # cp -a ${instance}/dump.rdb ${LOCAL_BACKUP_DIR}/${name} + # done ## ElasticSearch @@ -295,7 +306,7 @@ if [ "${LOCAL_TASKS}" = "1" ]; then ## Dump findmnt(8) output FINDMNT_BIN=$(command -v findmnt) - if [ -x ${FINDMNT_BIN} ]; then + if [ -x "${FINDMNT_BIN}" ]; then ${FINDMNT_BIN} > ${LOCAL_BACKUP_DIR}/findmnt.txt fi else @@ -362,36 +373,49 @@ if [ "${SYNC_TASKS}" = "1" ]; then # Remote shell command RSH_COMMAND="ssh -p ${SSH_PORT} -o 'ConnectTimeout ${SSH_CONNECT_TIMEOUT}'" - rsync -avzh --stats --delete --delete-excluded --force --ignore-errors --partial \ + # ignore check because we want it to split the different arguments to $rep + # shellcheck disable=SC2086 + rsync -avzh --relative --stats --delete --delete-excluded --force --ignore-errors --partial \ + --exclude "dev" \ --exclude "lost+found" \ --exclude ".nfs.*" \ - --exclude "/var/log" \ - --exclude "/var/log/evobackup*" \ + --exclude "/usr/doc" \ + --exclude "/usr/obj" \ + --exclude "/usr/share/doc" \ + --exclude "/usr/src" \ + --exclude "/var/apt" \ + --exclude "/var/cache" \ + --exclude "/var/lib/amavis/amavisd.sock" \ + --exclude "/var/lib/amavis/tmp" \ + --exclude "/var/lib/clamav/*.tmp" \ + --exclude "/var/lib/elasticsearch" \ + --exclude "/var/lib/metche" \ + --exclude "/var/lib/munin/*tmp*" \ --exclude "/var/lib/mysql" \ + --exclude "/var/lib/php5" \ + --exclude "/var/lib/php/sessions" \ --exclude "/var/lib/postgres" \ --exclude "/var/lib/postgresql" \ --exclude "/var/lib/sympa" \ - --exclude "/var/lib/metche" \ - --exclude "/var/run" \ --exclude "/var/lock" \ - --exclude "/var/state" \ - --exclude "/var/apt" \ - --exclude "/var/cache" \ - --exclude "/usr/src" \ - --exclude "/usr/doc" \ - --exclude "/usr/share/doc" \ - --exclude "/usr/obj" \ - --exclude "dev" \ + --exclude "/var/log" \ + --exclude "/var/log/evobackup*" \ + --exclude "/var/run" \ --exclude "/var/spool/postfix" \ - --exclude "/var/lib/amavis/amavisd.sock" \ - --exclude "/var/lib/munin/*tmp*" \ - --exclude "/var/lib/php5" \ --exclude "/var/spool/squid" \ - --exclude "/var/lib/elasticsearch" \ - --exclude "/var/lib/amavis/tmp" \ - --exclude "/var/lib/clamav/*.tmp" \ + --exclude "/var/state" \ + --exclude "lxc/*/rootfs/usr/doc" \ + --exclude "lxc/*/rootfs/usr/obj" \ + --exclude "lxc/*/rootfs/usr/share/doc" \ + --exclude "lxc/*/rootfs/usr/src" \ + --exclude "lxc/*/rootfs/var/apt" \ + --exclude "lxc/*/rootfs/var/cache" \ + --exclude "lxc/*/rootfs/var/lib/php5" \ + --exclude "lxc/*/rootfs/var/lock" \ + --exclude "lxc/*/rootfs/var/log" \ + --exclude "lxc/*/rootfs/var/run" \ + --exclude "lxc/*/rootfs/var/state" \ --exclude "/home/mysqltmp" \ - --exclude "/var/lib/php/sessions" \ ${rep} \ /etc \ /root \ @@ -406,11 +430,11 @@ fi END=$(/bin/date +"%d-%m-%Y ; %H:%M") -printf "EvoBackup - %s - START %s ON %s (LOCAL_TASKS=%s SYNC_TASKS=%s)\n" \ +printf "EvoBackup - %s - START %s ON %s (LOCAL_TASKS=%s SYNC_TASKS=%s)\\n" \ "${HOSTNAME}" "${BEGINNING}" "${SSH_SERVER}" "${LOCAL_TASKS}" "${SYNC_TASKS}" \ >> $LOGFILE -printf "EvoBackup - %s - STOP %s ON %s (LOCAL_TASKS=%s SYNC_TASKS=%s)\n" \ +printf "EvoBackup - %s - STOP %s ON %s (LOCAL_TASKS=%s SYNC_TASKS=%s)\\n" \ "${HOSTNAME}" "${END}" "${SSH_SERVER}" "${LOCAL_TASKS}" "${SYNC_TASKS}" \ >> $LOGFILE