70 lines
1.8 KiB
Bash
70 lines
1.8 KiB
Bash
#!/bin/bash
|
|
|
|
prepare() {
|
|
echo "Preparing to restore ..."
|
|
|
|
export THISDIR=`dirname "$(readlink -f "$0")"`
|
|
export DOCKER_COMPOSE_DIR=$THISDIR
|
|
export DATA_DIR=$DOCKER_COMPOSE_DIR/data
|
|
|
|
source "$THISDIR/common.sh"
|
|
}
|
|
|
|
restore() {
|
|
if [ -d "${DATA_DIR}" ]; then
|
|
echo "Restore data directory found"
|
|
|
|
echo "Removing existing data ..."
|
|
docker-compose --project-directory "${DOCKER_COMPOSE_DIR}" down --volumes
|
|
|
|
echo "Performing a restore ..."
|
|
else
|
|
echo "Restore data directory not found; doing nothing ..."
|
|
fi
|
|
}
|
|
|
|
restore_database() {
|
|
CONTAINER_ID=$1
|
|
SQL_SCHEMA_FILENAME=$2
|
|
SQL_DATA_FILENAME=$3
|
|
DB_NAME=$4
|
|
DB_USERNAME=$5
|
|
DISPLAY_NAME=$6
|
|
|
|
if [ -f "${DATA_DIR}/$SQL_SCHEMA_FILENAME" ]; then
|
|
echo "Restoring the $DISPLAY_NAME database ..."
|
|
|
|
echo "SET session_replication_role = 'replica';" | cat - "${DATA_DIR}/$SQL_DATA_FILENAME" > /tmp/db-data.sql
|
|
|
|
echo "Uploading $DISPLAY_NAME database schema to Docker container ..."
|
|
docker cp "${DATA_DIR}/$SQL_SCHEMA_FILENAME" $CONTAINER_ID:/tmp
|
|
|
|
echo "Uploading $DISPLAY_NAME database data to Docker container ..."
|
|
docker cp /tmp/db-data.sql $CONTAINER_ID:/tmp
|
|
rm /tmp/db-data.sql
|
|
|
|
echo "Restoring $DISPLAY_NAME database schema ..."
|
|
docker container exec $CONTAINER_ID psql -U $DB_USERNAME -f /tmp/$SQL_SCHEMA_FILENAME $DB_NAME
|
|
|
|
echo "Restoring $DISPLAY_NAME database data ..."
|
|
docker container exec $CONTAINER_ID psql -U $DB_USERNAME -f /tmp/db-data.sql $DB_NAME
|
|
fi
|
|
}
|
|
|
|
restore_binaryData() {
|
|
CONTAINER_ID=$1
|
|
DATA_DIRECTORY=$2
|
|
CONTAINER_PATH=$3
|
|
DISPLAY_NAME=$4
|
|
|
|
if [ -d "${DATA_DIR}/$DATA_DIRECTORY" ]; then
|
|
echo "Restoring the $DISPLAY_NAME binary data ..."
|
|
|
|
echo "Copying $DISPLAY_NAME binary data ..."
|
|
sudo docker cp "${DATA_DIR}/$DATA_DIRECTORY" "$CONTAINER_ID:$CONTAINER_PATH"
|
|
fi
|
|
}
|
|
|
|
prepare
|
|
restore
|