49 lines
2.1 KiB
Bash
49 lines
2.1 KiB
Bash
#!/bin/bash
|
|
|
|
#COMMON VARIABLES
|
|
DB_NAME="diunabi-morska"
|
|
BACKUP_FILE="${DB_NAME}-dev.bak"
|
|
#LOCAL VARIABLES
|
|
LOCAL_BACKUP_DIR="/Users/mz/Projects/Diuna/DiunaBI/Temp"
|
|
LOCAL_BACKUP_PATH=${LOCAL_BACKUP_DIR}/${BACKUP_FILE}
|
|
#DOCKER VARIABLES
|
|
DOCKER_BACKUP_DIR="/var/opt/mssql/backup"
|
|
DOCKER_CONTAINER_NAME="diuna-mssql-2022"
|
|
DOCKER_SA_PASSWORD="$&#ojoOOKEJ223"
|
|
DOCKER_SQLCMD="/opt/mssql-tools18/bin/sqlcmd"
|
|
DOCKER_BACKUP_PATH=${DOCKER_BACKUP_DIR}/${BACKUP_FILE}
|
|
#SERVER VARIABLES
|
|
REMOTE_HOST="crm.bim-it.pl"
|
|
REMOTE_USER="mz"
|
|
REMOTE_SA_PASSWORD="v](8Lc|RfG"
|
|
REMOTE_BACKUP_DIR="/tmp"
|
|
|
|
ssh ${REMOTE_USER}@${REMOTE_HOST} "sudo rm ${REMOTE_BACKUP_DIR}/${BACKUP_FILE}"
|
|
ssh ${REMOTE_USER}@${REMOTE_HOST} "/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P '${REMOTE_SA_PASSWORD}' -Q \"BACKUP DATABASE [${DB_NAME}] TO DISK = '${REMOTE_BACKUP_DIR}/${BACKUP_FILE}'\""
|
|
scp ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_BACKUP_DIR}/${BACKUP_FILE} ${LOCAL_BACKUP_DIR}/
|
|
|
|
docker exec -i ${DOCKER_CONTAINER_NAME} mkdir -p ${DOCKER_BACKUP_DIR}
|
|
docker cp "${LOCAL_BACKUP_PATH}" "${DOCKER_CONTAINER_NAME}:${DOCKER_BACKUP_PATH}"
|
|
docker exec --user=root -i ${DOCKER_CONTAINER_NAME} chown mssql:mssql "$DOCKER_BACKUP_PATH"
|
|
|
|
LOGICAL_FILE_INFO=$(docker exec -i ${DOCKER_CONTAINER_NAME} ${DOCKER_SQLCMD} -C -S localhost -U SA -P "${DOCKER_SA_PASSWORD}" -Q "RESTORE FILELISTONLY FROM DISK = '${DOCKER_BACKUP_PATH}'" 2>&1)
|
|
DATA_FILE=$(echo "$LOGICAL_FILE_INFO" | awk 'NR==3 {print $1}' | tr -d '[:space:]')
|
|
LOG_FILE=$(echo "$LOGICAL_FILE_INFO" | awk 'NR==4 {print $1}' | tr -d '[:space:]')
|
|
|
|
RESTORE_OUTPUT=$(
|
|
docker exec -i ${DOCKER_CONTAINER_NAME} ${DOCKER_SQLCMD} -C -S localhost -U SA -P "${DOCKER_SA_PASSWORD}" -Q "
|
|
IF EXISTS (SELECT name FROM sys.databases WHERE name = '${DB_NAME}')
|
|
BEGIN
|
|
PRINT 'Database ${DB_NAME} exists. Dropping the database.';
|
|
ALTER DATABASE [${DB_NAME}] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
|
|
DROP DATABASE [${DB_NAME}];
|
|
END;
|
|
|
|
RESTORE DATABASE [${DB_NAME}]
|
|
FROM DISK = '${DOCKER_BACKUP_PATH}'
|
|
WITH MOVE '${DATA_FILE}' TO '/var/opt/mssql/data/${DB_NAME}.mdf',
|
|
MOVE '${LOG_FILE}' TO '/var/opt/mssql/data/${DB_NAME}_log.ldf';
|
|
" 2>&1
|
|
)
|
|
|
|
echo $RESTORE_OUTPUT |