Oleksii Molchanov | 2eeeb88 | 2020-02-27 11:56:23 +0200 | [diff] [blame^] | 1 | {%- from "xtrabackup/map.jinja" import server with context -%} |
Pavel Cizinsky | 7b1da74 | 2019-03-07 13:03:02 +0100 | [diff] [blame] | 2 | #!/bin/bash |
Jiri Broulik | 634ea8a | 2017-05-31 17:10:03 +0200 | [diff] [blame] | 3 | |
| 4 | # This script returns appropriate backup that client will restore |
Pavel Cizinsky | 7b1da74 | 2019-03-07 13:03:02 +0100 | [diff] [blame] | 5 | set -eo pipefail |
Jiri Broulik | 634ea8a | 2017-05-31 17:10:03 +0200 | [diff] [blame] | 6 | |
Pavel Cizinsky | 7b1da74 | 2019-03-07 13:03:02 +0100 | [diff] [blame] | 7 | BACKUPDIR="{{ server.backup_dir }}" # Backups base directory |
| 8 | FULL="$(find $BACKUPDIR/full -mindepth 1 -maxdepth 1 -type d -printf "%P\n" | sort -nr | head -$1 | tail -1)" |
| 9 | FULL_INCR="$(find $BACKUPDIR/incr -mindepth 1 -maxdepth 1 -type d -printf "%P\n" | sort -nr | head -$1 | tail -1)" |
| 10 | BEFORE_NEXT_FULL_INCR="$(find $BACKUPDIR/incr -mindepth 1 -maxdepth 1 -type d -printf "%P\n" | sort -nr | head -$(( $1 - 1 )) | tail -1 || true)" |
| 11 | |
| 12 | function prerequisites(){ |
| 13 | if [ $1 -eq 0 ]; then |
Jiri Broulik | 634ea8a | 2017-05-31 17:10:03 +0200 | [diff] [blame] | 14 | echo "No arguments provided" |
| 15 | exit 1 |
Pavel Cizinsky | 7b1da74 | 2019-03-07 13:03:02 +0100 | [diff] [blame] | 16 | fi |
Jiri Broulik | 634ea8a | 2017-05-31 17:10:03 +0200 | [diff] [blame] | 17 | |
Pavel Cizinsky | 7b1da74 | 2019-03-07 13:03:02 +0100 | [diff] [blame] | 18 | # if arg is not an integer |
| 19 | case $2 in |
Jiri Broulik | 634ea8a | 2017-05-31 17:10:03 +0200 | [diff] [blame] | 20 | ''|*[!0-9]*) echo "Argument must be integer"; exit 1 ;; |
| 21 | *) ;; |
Pavel Cizinsky | 7b1da74 | 2019-03-07 13:03:02 +0100 | [diff] [blame] | 22 | esac |
| 23 | } |
Jiri Broulik | 634ea8a | 2017-05-31 17:10:03 +0200 | [diff] [blame] | 24 | |
Pavel Cizinsky | 7b1da74 | 2019-03-07 13:03:02 +0100 | [diff] [blame] | 25 | function return_backup(){ |
| 26 | if [ -z "$BEFORE_NEXT_FULL_INCR" ]; then |
Jiri Broulik | 634ea8a | 2017-05-31 17:10:03 +0200 | [diff] [blame] | 27 | BEFORE_NEXT_FULL_INCR="Empty" |
Pavel Cizinsky | 7b1da74 | 2019-03-07 13:03:02 +0100 | [diff] [blame] | 28 | fi |
Martin Polreich | 710fab5 | 2019-08-06 16:35:28 +0200 | [diff] [blame] | 29 | if [ "$FULL" == "$FULL_INCR" ]; then |
Pavel Cizinsky | 7b1da74 | 2019-03-07 13:03:02 +0100 | [diff] [blame] | 30 | LATEST_FULL_INCR=$(find $BACKUPDIR/incr/$FULL_INCR -mindepth 1 -maxdepth 1 -type d -printf "%P\n" | sort -nr | head -1 | tail -1) |
| 31 | echo "$BACKUPDIR/incr/$FULL/$LATEST_FULL_INCR" |
| 32 | elif [ $FULL = $BEFORE_NEXT_FULL_INCR ]; then |
| 33 | LATEST_FULL_INCR=$(find $BACKUPDIR/incr/$BEFORE_NEXT_FULL_INCR -mindepth 1 -maxdepth 1 -type d -printf "%P\n" | sort -nr | head -1 | tail -1) |
| 34 | echo "$BACKUPDIR/incr/$FULL/$LATEST_FULL_INCR" |
| 35 | else |
| 36 | echo "$BACKUPDIR/full/$FULL" |
| 37 | fi |
| 38 | } |
Jiri Broulik | 634ea8a | 2017-05-31 17:10:03 +0200 | [diff] [blame] | 39 | |
Pavel Cizinsky | 7b1da74 | 2019-03-07 13:03:02 +0100 | [diff] [blame] | 40 | prerequisites "$#" "$1" |
| 41 | return_backup |