@@ -13,6 +13,11 @@ MODE="${MODE:-SIMPLE}"
1313TARGET_PREFIX=" /target"
1414DATA_DIRECTORY=" /var/lib/mysql"
1515
16+ find_last_full_backup () {
17+ FILES=( $( ls $TARGET /full-???? -?? -?? ) )
18+ echo ${FILES[-1]}
19+ }
20+
1621download_rancher_compose () {
1722
1823 RANCHER_COMPOSE_VERSION=" $1 "
@@ -57,39 +62,40 @@ createRestoreService() {
5762 sed \
5863 -e " s~%%BACKUP%%~$TARGET_BACKUP ~" \
5964 -e " s~%%BACKUP_ALPHANUM%%~$ALPHANUM_TARGET_BACKUP ~" \
60- -e " s~%%RANCHER_URL%%~$RANCHER_URL ~" \
61- -e " s~%%RANCHER_KEY%%~$RANCHER_ACCESS_KEY ~" \
62- -e " s~%%RANCHER_SECRET%%~$RANCHER_SECRET_KEY ~" \
63- -e " s~%%BACKUP_VOLUME%%~$BACKUP_VOLUME ~" \
64- -e " s~%%BACKUP_DRIVER%%~$BACKUP_DRIVER ~" \
65- -e " s~%%STORAGEBOX_URL%%~$STORAGEBOX_URL ~" \
66- -e " s~%%STORAGEBOX_USER%%~$STORAGEBOX_USER ~" \
67- -e " s~%%STORAGEBOX_PASSWORD%%~$STORAGEBOX_PASSWORD ~" \
65+ -e " s~%%RANCHER_URL%%~${ RANCHER_URL} ~" \
66+ -e " s~%%RANCHER_KEY%%~${ RANCHER_ACCESS_KEY} ~" \
67+ -e " s~%%RANCHER_SECRET%%~${ RANCHER_SECRET_KEY} ~" \
68+ -e " s~%%BACKUP_VOLUME%%~${ BACKUP_VOLUME} ~" \
69+ -e " s~%%BACKUP_DRIVER%%~${ BACKUP_DRIVER} ~" \
70+ -e " s~%%STORAGEBOX_URL%%~${ STORAGEBOX_URL} ~" \
71+ -e " s~%%STORAGEBOX_USER%%~${ STORAGEBOX_USER} ~" \
72+ -e " s~%%STORAGEBOX_PASSWORD%%~${ STORAGEBOX_PASSWORD} ~" \
6873 /tmp/docker-compose.yml.tpl > /tmp/docker-compose.yml
69- download_rancher_compose $RANCHER_COMPOSE_VERSION
74+ download_rancher_compose ${ RANCHER_COMPOSE_VERSION}
7075
71- echo " Using ${ANCHER_COMPOSE } as rancher-compose executable"
72- ${RANCHER_COMPOSE} -p " $RESTORE_STACK " create
76+ echo " Using ${RANCHER_COMPOSE } as rancher-compose executable"
77+ ${RANCHER_COMPOSE} -p " ${ RESTORE_STACK} " create
7378
7479 cd " $OLDDIR "
7580}
7681
7782setDefaults () {
78- if [ -z " $MYSQL_USER " ] ; then
83+ if [ -z " ${ MYSQL_USER} " ] ; then
7984 echo " WARNING: Running with default user."
8085 else
81- echo " Connecting as $MYSQL_USER "
82- USER=(--user " $MYSQL_USER " )
86+ echo " Connecting as ${ MYSQL_USER} "
87+ USER=(--user " ${ MYSQL_USER} " )
8388 fi
8489
85- if [ -z " $MYSQL_PASSWORD " ] ; then
90+ if [ -z " ${ MYSQL_PASSWORD} " ] ; then
8691 echo " WARNING: Running without password."
8792 else
8893 echo " Connecting with password"
89- PASSWORD=(--password " $MYSQL_PASSWORD " )
94+ PASSWORD=(--password " ${ MYSQL_PASSWORD} " )
9095 fi
9196
92- if [ -z " $MYSQL_HOST " ] ; then
97+ if [ -z " ${MYSQL_HOST} " ] ; then
98+
9399 echo " WARNING: Connecting to default host 'source', make sure to set links"
94100 MYSQL_HOST=" target"
95101 else
@@ -171,12 +177,30 @@ case $1 in
171177
172178
173179 RUNNING=" true"
174- while [ " $RUNNING " = " true" ] ; do
175-
180+ while [ x" $RUNNING " = x" true" ] ; do
176181
177182 DATE=$( date ' +%Y-%m-%d-%H%M%S' )
178183 NAME=" ${DATE} "
179184
185+ if [ x" ${MODE} " = x" FULL" ] ; then
186+ echo " ======================================================================"
187+ echo " = Full backup process"
188+ echo " ======================================================================"
189+ echo " "
190+
191+ NAME=" full-${DATE} "
192+ else if [ x" ${MODE} " = x" INCREMENTAL" ] ; then
193+ echo " ======================================================================"
194+ echo " = Incremental backup process"
195+ echo " ======================================================================"
196+ echo " "
197+ BASE_BACKUP=" $( find_last_full_backup) "
198+ BASE_PATH=" ${TARGET_PREFIX} /${BASE_BACKUP} "
199+ NAME=" full-${BASE_BACKUP} -inc-$DATE "
200+ echo " Base backup: ${BASE_BACKUP} "
201+ echo " "
202+ fi
203+
180204 TARGET=" ${TARGET_PREFIX} /$NAME "
181205
182206 echo " ======================================================================"
@@ -195,14 +219,30 @@ case $1 in
195219
196220 backupRancher $TARGET
197221
198- # Backup - copies innodb files and reads binary log while doing so
199- xtrabackup --backup --datadir=" $DATA_DIRECTORY " \
200- --target-dir=" $TARGET " ${USER[@]} ${PASSWORD[@]} \
201- --host " $MYSQL_HOST " --port $MYSQL_PORT \
222+ if [ x" ${MODE} " = x" INCREMENTAL" ] ; then
223+ # Backup - copies innodb files and reads binary log while doing so
224+ xtrabackup --backup --datadir=" $DATA_DIRECTORY " \
225+ --incremental-basedir=" ${BASE_PATH} " \
226+ --target-dir=" $TARGET " ${USER[@]} ${PASSWORD[@]} \
227+ --host " ${MYSQL_HOST} " --port ${MYSQL_PORT} \
228+ else
229+ # Backup - copies innodb files and reads binary log while doing so
230+ xtrabackup --backup --datadir=" $DATA_DIRECTORY " \
231+ --incremental-basedir=/data/backups/base\
232+ --target-dir=" $TARGET " ${USER[@]} ${PASSWORD[@]} \
233+ --host " ${MYSQL_HOST} " --port ${MYSQL_PORT} \
234+ fi
235+
236+
237+
238+ if [ x" ${MODE} " = x" SIMPLE" ] ; then
239+ echo " Mode is SIMPLE, preparing backups"
240+
202241 # First prepare - selfheal innodb and apply binary log to make it consistent
203- xtrabackup --prepare --target-dir=" $TARGET "
204- # Second prepare - write logfiles for faster server startup
205- xtrabackup --prepare --target-dir=" $TARGET "
242+ xtrabackup --prepare --target-dir=" $TARGET "
243+ # Second prepare - write logfiles for faster server startup
244+ xtrabackup --prepare --target-dir=" $TARGET "
245+ fi
206246 echo " $TARGET Done"
207247
208248 createRestoreService " $NAME "
@@ -284,9 +324,8 @@ case $1 in
284324 echo " "
285325
286326 FILES=( $( ls $TARGET /full-???? -?? -?? ) )
287-
327+ exit 0
288328 ;;
289-
290329 run)
291330 shift
292331
@@ -297,12 +336,12 @@ case $1 in
297336
298337 $*
299338 echo " Done"
339+ exit 0
300340 ;;
301341 help)
302342 shift
303343 usage $*
304344 exit 0
305- exit 0
306345 ;;
307346 * )
308347 usage
0 commit comments