Skip to content

Commit 6e45140

Browse files
author
Sven Speckmaier
committed
creating incremental backups
1 parent 0de3411 commit 6e45140

File tree

1 file changed

+68
-29
lines changed

1 file changed

+68
-29
lines changed

entrypoint

Lines changed: 68 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@ MODE="${MODE:-SIMPLE}"
1313
TARGET_PREFIX="/target"
1414
DATA_DIRECTORY="/var/lib/mysql"
1515

16+
find_last_full_backup() {
17+
FILES=( $(ls $TARGET/full-????-??-??) )
18+
echo ${FILES[-1]}
19+
}
20+
1621
download_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

7782
setDefaults() {
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

Comments
 (0)