From 1302281333472e54e04af5be6ffc495bd0e044d0 Mon Sep 17 00:00:00 2001 From: Stelage Date: Tue, 4 May 2021 22:59:10 +0200 Subject: [PATCH] Allow restoring without specifying DATABASE_NAME --- README.md | 15 +++++++++++++-- restore.sh | 16 +++++++++++++--- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index cdecc77..5cc37ca 100644 --- a/README.md +++ b/README.md @@ -74,13 +74,17 @@ volumes: ## Restore from a backup +### List all available backups : + See the list of backups in your running docker container, just write in your favorite terminal: ```bash -docker container exec ls /backup +docker container exec ls /backup ``` -To restore a database from a certain backup you have to specify the database name in the variable MYSQL_DATABASE: +### Restore using a compose file + +To restore a database from a certain backup you may have to specify the database name in the variable MYSQL_DATABASE: ```YAML mysql-cron-backup: @@ -96,3 +100,10 @@ mysql-cron-backup: - MYSQL_PASS=${MARIADB_ROOT_PASSWORD} - MYSQL_DATABASE=${DATABASE_NAME} ``` +### Restore using a docker command + +```bash +docker container exec /restore.sh backup/ +``` + +if no database name is specified, `restore.sh` will try to find the database name from the backup file. \ No newline at end of file diff --git a/restore.sh b/restore.sh index e2d8796..1cd478c 100755 --- a/restore.sh +++ b/restore.sh @@ -7,10 +7,20 @@ then echo "You must pass the path of the backup file to restore" fi -echo "=> Restore database from $1" -set -o pipefail +SQL=$(gunzip -c "$1") DB_NAME=${MYSQL_DATABASE:-${MYSQL_DB}} -if gunzip --stdout "$1" | mysql -h "$MYSQL_HOST" -P "$MYSQL_PORT" -u "$MYSQL_USER" -p"$MYSQL_PASS" "$DB_NAME" +if [ -z "${DB_NAME}"] +then + DB_NAME=$(echo $SQL | grep -oE '(Database: (\w*))' | cut -d ' ' -f 2) +fi +[ -z "${DB_NAME}" ] && { echo "=> database name cannot be found" && exit 1; } + + +echo "=> Restore database $DB_NAME from $1" +set -o pipefail + + +if echo $SQL | mysql -h "$MYSQL_HOST" -P "$MYSQL_PORT" -u "$MYSQL_USER" -p"$MYSQL_PASS" "$DB_NAME" then echo "=> Restore succeeded" else