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..3ca9e92 100755 --- a/restore.sh +++ b/restore.sh @@ -7,10 +7,19 @@ 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" + +if echo "$SQL" | mysql -h "$MYSQL_HOST" -P "$MYSQL_PORT" -u "$MYSQL_USER" -p"$MYSQL_PASS" "$DB_NAME" then echo "=> Restore succeeded" else