Allow restoring without specifying DATABASE_NAME

This commit is contained in:
Stelage 2021-05-04 22:59:10 +02:00
parent ad684b3008
commit 1302281333
2 changed files with 26 additions and 5 deletions

View file

@ -74,13 +74,17 @@ volumes:
## Restore from a backup ## Restore from a backup
### List all available backups :
See the list of backups in your running docker container, just write in your favorite terminal: See the list of backups in your running docker container, just write in your favorite terminal:
```bash ```bash
docker container exec <your_mysql_backuo_container_name> ls /backup docker container exec <your_mysql_backup_container_name> 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 ```YAML
mysql-cron-backup: mysql-cron-backup:
@ -96,3 +100,10 @@ mysql-cron-backup:
- MYSQL_PASS=${MARIADB_ROOT_PASSWORD} - MYSQL_PASS=${MARIADB_ROOT_PASSWORD}
- MYSQL_DATABASE=${DATABASE_NAME} - MYSQL_DATABASE=${DATABASE_NAME}
``` ```
### Restore using a docker command
```bash
docker container exec <your_mysql_backup_container_name> /restore.sh backup/<your_sql_backup_gz_file>
```
if no database name is specified, `restore.sh` will try to find the database name from the backup file.

View file

@ -7,10 +7,20 @@ then
echo "You must pass the path of the backup file to restore" echo "You must pass the path of the backup file to restore"
fi fi
echo "=> Restore database from $1" SQL=$(gunzip -c "$1")
set -o pipefail
DB_NAME=${MYSQL_DATABASE:-${MYSQL_DB}} 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 then
echo "=> Restore succeeded" echo "=> Restore succeeded"
else else