@@ -23,35 +23,48 @@ cd "${BACKUP_DIR}"
23
23
backup_full () {
24
24
echo " Taking a full backup"
25
25
LAST_FULL_DATE=$( date +%d-%m-%Y-%s)
26
+ BACKUP_FILE=" backup-full-${LAST_FULL_DATE} .mbs.gz"
27
+ BACKUP_PATH=" ${BACKUP_DIR} /full-${LAST_FULL_DATE} "
28
+ mkdir -p " ${BACKUP_PATH} "
29
+
26
30
mariabackup \
27
31
--defaults-file=" ${REPLICA_MY_CNF} " \
28
32
--backup \
29
33
--stream=mbstream \
30
- --history=" ${LAST_FULL_DATE} " | gzip > \
31
- " ${BACKUP_DIR} /mysqlbackup-${LAST_FULL_DATE} .qp.mbc.mbs.gz" && \
32
- echo " ${LAST_FULL_DATE} " > " ${BACKUP_DIR} /last_full_date"
34
+ --history=" ${LAST_FULL_DATE} " \
35
+ | gzip > " ${BACKUP_PATH} /${BACKUP_FILE} "
36
+
37
+ echo " ${BACKUP_PATH} /${BACKUP_FILE} " > " ${BACKUP_DIR} /last_full_file"
33
38
}
34
39
35
40
# Execute an incremental backup
36
41
backup_incremental () {
37
- if [ -r " ${BACKUP_DIR} /last_full_date" ]; then
38
- LAST_FULL_DATE=$( cat " ${BACKUP_DIR} /last_full_date" )
39
- else
40
- LAST_FULL_DATE=" "
41
- fi
42
- if [ ! -z " ${LAST_FULL_DATE} " ]; then
43
- echo " Taking an incremental backup"
44
- mariabackup \
45
- --defaults-file=" ${REPLICA_MY_CNF} " \
46
- --backup \
47
- --stream=mbstream \
48
- --incremental-history-name=" ${LAST_FULL_DATE} " \
49
- --history=" ${LAST_FULL_DATE} " | gzip > \
50
- " ${BACKUP_DIR} /incremental-$( date +%H) -mysqlbackup-${LAST_FULL_DATE} .qp.mbc.mbs.gz"
51
- else
52
- echo " Error: Full backup don't exist."
42
+ if [ ! -r " ${BACKUP_DIR} /last_full_file" ]; then
43
+ echo " Error: No full backup file found."
53
44
exit 1
54
45
fi
46
+
47
+ FULL_BACKUP_FILE=$( cat " ${BACKUP_DIR} /last_full_file" )
48
+ LAST_FULL_DATE=$( basename " $( dirname " ${FULL_BACKUP_FILE} " ) " | sed ' s/^full-//' )
49
+ NOW=$( date +%H-%M-%S-%d-%m-%Y)
50
+ INCR_DIR=" ${BACKUP_DIR} /incr-${NOW} -since-${LAST_FULL_DATE} "
51
+ mkdir -p " ${INCR_DIR} "
52
+
53
+ # Temp dir for full base restore
54
+ TMP_BASEDIR=$( mktemp -d)
55
+
56
+ echo " Decompressing full backup to temp dir: ${TMP_BASEDIR} "
57
+ gunzip -c " ${FULL_BACKUP_FILE} " | mbstream -x -C " ${TMP_BASEDIR} "
58
+
59
+ mariabackup \
60
+ --defaults-file=" ${REPLICA_MY_CNF} " \
61
+ --backup \
62
+ --stream=mbstream \
63
+ --incremental-basedir=" ${TMP_BASEDIR} " \
64
+ --history=" incr-${NOW} " \
65
+ | gzip > " ${INCR_DIR} /backup-incremental-${NOW} .mbs.gz"
66
+
67
+ rm -rf " ${TMP_BASEDIR} "
55
68
}
56
69
57
70
# Retry logic for database queries
@@ -119,15 +132,15 @@ if [ -n "${BACKUP_TYPE}" ]; then
119
132
get_and_set_replica_server
120
133
case " ${BACKUP_TYPE} " in
121
134
" full" )
122
- backup_full
123
- ;;
135
+ backup_full
136
+ ;;
124
137
" incremental" )
125
- backup_incremental
126
- ;;
138
+ backup_incremental
139
+ ;;
127
140
* )
128
- echo " Only full or incremental options are supported."
129
- exit 1
130
- ;;
141
+ echo " Only full or incremental options are supported."
142
+ exit 1
143
+ ;;
131
144
esac
132
145
else
133
146
echo " You need to specify either full or incremental backup options."
0 commit comments