initial release
All checks were successful
All checks were successful
This commit is contained in:
107
rootfs/app/backup.sh
Executable file
107
rootfs/app/backup.sh
Executable file
@@ -0,0 +1,107 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -o pipefail
|
||||
|
||||
STATUS_FILE=/last_backup_status.txt
|
||||
|
||||
|
||||
MARIADB_HOST=${MARIADB_HOST:-db}
|
||||
MARIADB_USER=${MARIADB_USER:-root}
|
||||
MARIADB_PORT=${MARIADB_PORT:-3306}
|
||||
MARIADB_PASSWORD=${MARIADB_PASSWORD:-1StrongPassword}
|
||||
MARIADB_DATABASE=${MARIADB_DATABASE:-my-db}
|
||||
COMPRESSION=${COMPRESSION:-gzip}
|
||||
RCLONE_CONFIG_FILE=${RCLONE_CONFIG_FILE:-/config/rclone.conf}
|
||||
RCLONE_REMOTE=${RCLONE_REMOTE:-myremote}
|
||||
RCLONE_PATH=${RCLONE_PATH:-/backups}
|
||||
|
||||
TMPDIR=$(mktemp -d)
|
||||
DEST_FILENAME=$(date +%Y-%m-%d_%H-%M-%S).sql
|
||||
BACKUP_FILE="${TMPDIR}/${DEST_FILENAME}"
|
||||
|
||||
|
||||
trap cleanup EXIT
|
||||
cleanup() {
|
||||
# rm -rf "${TMPDIR}"
|
||||
echo "Removed temporary file"
|
||||
}
|
||||
|
||||
if [ ! -f "${RCLONE_CONFIG_FILE}" ]; then
|
||||
echo "Rclone config file not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Backup started"
|
||||
|
||||
dump_failed() {
|
||||
echo "Database dump failed"
|
||||
echo "dump failed" > "${STATUS_FILE}"
|
||||
exit 1
|
||||
}
|
||||
|
||||
mkdir_failed() {
|
||||
echo "Backup mkdir failed"
|
||||
echo "mkdir failed" > "${STATUS_FILE}"
|
||||
exit 1
|
||||
}
|
||||
|
||||
copy_failed() {
|
||||
echo "Backup copy failed"
|
||||
echo "copy failed" > "${STATUS_FILE}"
|
||||
exit 1
|
||||
}
|
||||
|
||||
COMPRESSOR=cat
|
||||
if [ "${COMPRESSION}" = "gzip" ]; then
|
||||
COMPRESSOR="gzip"
|
||||
BACKUP_FILE="${BACKUP_FILE}.gz"
|
||||
DEST_FILENAME="${DEST_FILENAME}.gz"
|
||||
fi
|
||||
if [ "${COMPRESSION}" = "bzip2" ]; then
|
||||
COMPRESSOR="bzip2"
|
||||
BACKUP_FILE="${BACKUP_FILE}.bz2"
|
||||
DEST_FILENAME="${DEST_FILENAME}.bz2"
|
||||
fi
|
||||
if [ "${COMPRESSION}" = "xz" ]; then
|
||||
COMPRESSOR="xz"
|
||||
BACKUP_FILE="${BACKUP_FILE}.xz"
|
||||
DEST_FILENAME="${DEST_FILENAME}.xz"
|
||||
fi
|
||||
if [ "${COMPRESSION}" = "zstd" ]; then
|
||||
COMPRESSOR="zstd"
|
||||
BACKUP_FILE="${BACKUP_FILE}.zst"
|
||||
DEST_FILENAME="${DEST_FILENAME}.zst"
|
||||
fi
|
||||
|
||||
|
||||
|
||||
echo "Dumping database into: ${BACKUP_FILE}"
|
||||
mariadb-dump \
|
||||
--add-drop-table \
|
||||
--add-drop-trigger \
|
||||
--add-locks \
|
||||
--disable-keys \
|
||||
--lock-all-tables \
|
||||
--quick \
|
||||
--triggers \
|
||||
--tz-utc -v \
|
||||
--host=${MARIADB_HOST} \
|
||||
--port=${MARIADB_PORT} \
|
||||
--user=${MARIADB_USER} \
|
||||
--password="${MARIADB_PASSWORD}" \
|
||||
--databases "${MARIADB_DATABASE}" | "${COMPRESSOR}" > "${BACKUP_FILE}" || dump_failed
|
||||
|
||||
|
||||
echo "Copying backup to remote"
|
||||
|
||||
rclone \
|
||||
-v --config "${RCLONE_CONFIG_FILE}" \
|
||||
mkdir "${RCLONE_REMOTE}:${RCLONE_PATH}" || mkdir_failed
|
||||
|
||||
rclone \
|
||||
-v --config "${RCLONE_CONFIG_FILE}" \
|
||||
copy "${BACKUP_FILE}" "${RCLONE_REMOTE}:${RCLONE_PATH}" || copy_failed
|
||||
|
||||
echo "success" > "${STATUS_FILE}"
|
||||
|
||||
echo "Backup completed"
|
||||
7
rootfs/app/entrypoint.sh
Executable file
7
rootfs/app/entrypoint.sh
Executable file
@@ -0,0 +1,7 @@
|
||||
#!/bin/sh
|
||||
|
||||
CRONTAB=${CRONTAB:-"0 12 * * *"}
|
||||
|
||||
echo "${CRONTAB} /app/backup.sh" > /etc/crontabs/root
|
||||
|
||||
crond -f
|
||||
13
rootfs/app/healthcheck.sh
Executable file
13
rootfs/app/healthcheck.sh
Executable file
@@ -0,0 +1,13 @@
|
||||
#!/bin/sh
|
||||
|
||||
STATUS_FILE=/last_backup_status.txt
|
||||
|
||||
if [ ! -f "${STATUS_FILE}" ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ "$(cat "${STATUS_FILE}")" != "success" ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
exit 0
|
||||
Reference in New Issue
Block a user