diff --git a/Dockerfile b/Dockerfile index 87a94ad..0a34ea9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -35,7 +35,7 @@ ENV PGDUMP_EXTRA_OPTS '' ENV MARIADB_DUMP_EXTRA_OPTS '' ENV MARIADB_EXTRA_OPTS '' ENV MSSQL_EXTRA_OPTS '' -ENV MSSQL_BACKUP_DIR '/var/opt/mssql/data' +ENV MSSQL_DATA_DIR '/var/opt/mssql/data' ENV S3_ACCESS_KEY_ID '' ENV S3_SECRET_ACCESS_KEY '' ENV S3_BUCKET '' diff --git a/README.md b/README.md index 74cfa88..0dc7013 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ services: DATABASE_USER: sa DATABASE_PASSWORD: YourStrong@Passw0rd DATABASE_SERVER: mssql - MSSQL_BACKUP_DIR: /var/opt/mssql/data # Path where backups are stored + MSSQL_DATA_DIR: /var/opt/mssql/data # MSSQL data directory (where backups are temporarily stored) volumes: mssql-data: # Shared volume for MSSQL data and backups @@ -185,7 +185,7 @@ spec: secretKeyRef: name: db-credentials key: password - - name: MSSQL_BACKUP_DIR + - name: MSSQL_DATA_DIR value: "/var/opt/mssql/data" - name: S3_REGION value: "us-east-1" @@ -264,7 +264,7 @@ spec: value: "localhost" # Same pod - name: DATABASE_PORT value: "1433" - - name: MSSQL_BACKUP_DIR + - name: MSSQL_DATA_DIR value: "/var/opt/mssql/data" # ... (S3 and DB credentials from secrets) volumeMounts: @@ -274,7 +274,7 @@ spec: **Key Configuration:** - `DATABASE_HOST: "localhost"` - Both containers are in the same pod -- `MSSQL_BACKUP_DIR: "/var/opt/mssql/data"` - Must match MSSQL's data directory +- `MSSQL_DATA_DIR: "/var/opt/mssql/data"` - MSSQL's data directory (where backup files are temporarily stored) - Both containers mount the same volume at `/var/opt/mssql/data` - Set `SCHEDULE` env var for automated backups (cron format) diff --git a/docker-compose.yaml b/docker-compose.yaml index 47782ca..b533a8a 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -108,7 +108,7 @@ services: DATABASE_PORT: 1433 DATABASE_SERVER: mssql DATABASE_PASSWORD: YourStrong@Passw0rd - MSSQL_BACKUP_DIR: /var/opt/mssql/data # Path where MSSQL backups are stored (must match volume mount) + MSSQL_DATA_DIR: /var/opt/mssql/data # Path where MSSQL backups are stored (must match volume mount) volumes: mssql-data: # MSSQL database storage minio-data: # MinIO object storage diff --git a/k8s-mssql-configmap-example.yaml b/k8s-mssql-configmap-example.yaml index ae78293..e9ff7e4 100644 --- a/k8s-mssql-configmap-example.yaml +++ b/k8s-mssql-configmap-example.yaml @@ -24,7 +24,7 @@ data: # ============================================ # MSSQL Specific Configuration # ============================================ - MSSQL_BACKUP_DIR: "/var/opt/mssql/data" + MSSQL_DATA_DIR: "/var/opt/mssql/data" # MSSQL_EXTRA_OPTS: "" # Additional sqlcmd options if needed # ============================================ @@ -87,7 +87,7 @@ data: # --from-literal=DATABASE_HOST='mssql-service' \ # --from-literal=DATABASE_NAME='MyDatabase' \ # --from-literal=DATABASE_PORT='1433' \ -# --from-literal=MSSQL_BACKUP_DIR='/var/opt/mssql/data' \ +# --from-literal=MSSQL_DATA_DIR='/var/opt/mssql/data' \ # --from-literal=SCHEDULE='0 2 * * *' \ # --from-literal=BACKUP_KEEP_DAYS='7' \ # --from-literal=S3_BUCKET='my-backups' \ diff --git a/k8s-statefulset-with-sidecar.yaml b/k8s-statefulset-with-sidecar.yaml index 1a08493..a95dd6c 100644 --- a/k8s-statefulset-with-sidecar.yaml +++ b/k8s-statefulset-with-sidecar.yaml @@ -118,7 +118,7 @@ spec: # # ConfigMap (mssql-config) - See k8s-mssql-configmap-example.yaml # - DATABASE_SERVER, DATABASE_HOST, DATABASE_NAME, DATABASE_PORT -# - MSSQL_BACKUP_DIR, MSSQL_EXTRA_OPTS +# - MSSQL_DATA_DIR, MSSQL_EXTRA_OPTS # - SCHEDULE, BACKUP_KEEP_DAYS # - S3_BUCKET, S3_PREFIX, S3_REGION, S3_ENDPOINT, S3_S3V4 # Note: DATABASE_HOST is overridden to "localhost" in the StatefulSet for sidecar pattern diff --git a/src/backup.sh b/src/backup.sh index 2981206..f3c8d2d 100644 --- a/src/backup.sh +++ b/src/backup.sh @@ -13,7 +13,7 @@ timestamp=$(date +"%Y-%m-%dT%H:%M:%S") # MSSQL uses .bak extension, other databases use .dump if [ "$DATABASE_SERVER" = "mssql" ]; then - local_file="${MSSQL_BACKUP_DIR}/db.bak" + local_file="${MSSQL_DATA_DIR}/db.bak" s3_uri_base="s3://${S3_BUCKET}/${S3_PREFIX}/${DATABASE_NAME}_${timestamp}.bak" else local_file="db.dump" diff --git a/src/helpers.sh b/src/helpers.sh index fb4a3bd..844c10b 100644 --- a/src/helpers.sh +++ b/src/helpers.sh @@ -62,12 +62,12 @@ restore_mariadb() { backup_mssql() { # Use native BACKUP DATABASE command - # Note: Requires shared volume mounted at MSSQL_BACKUP_DIR + # Note: Requires shared volume mounted at MSSQL_DATA_DIR sqlcmd -S ${DATABASE_HOST},${DATABASE_PORT} \ -U ${DATABASE_USER} \ -P "${DATABASE_PASSWORD}" \ -C \ - -Q "BACKUP DATABASE [${DATABASE_NAME}] TO DISK = N'${MSSQL_BACKUP_DIR}/db.bak' WITH INIT;" \ + -Q "BACKUP DATABASE [${DATABASE_NAME}] TO DISK = N'${MSSQL_DATA_DIR}/db.bak' WITH INIT;" \ $MSSQL_EXTRA_OPTS } @@ -78,7 +78,7 @@ restore_mssql() { -U ${DATABASE_USER} \ -P "${DATABASE_PASSWORD}" \ -C -W \ - -Q "SET NOCOUNT ON; RESTORE FILELISTONLY FROM DISK = N'${MSSQL_BACKUP_DIR}/db.bak';" \ + -Q "SET NOCOUNT ON; RESTORE FILELISTONLY FROM DISK = N'${MSSQL_DATA_DIR}/db.bak';" \ | grep -v '^$' | awk '{print $1}' | tail -n +3) # Parse logical names (first two lines after headers) @@ -90,9 +90,9 @@ restore_mssql() { -U ${DATABASE_USER} \ -P "${DATABASE_PASSWORD}" \ -C \ - -Q "RESTORE DATABASE [${DATABASE_NAME}] FROM DISK = N'${MSSQL_BACKUP_DIR}/db.bak' WITH REPLACE, MOVE N'${data_file}' TO N'${MSSQL_BACKUP_DIR}/${DATABASE_NAME}.mdf', MOVE N'${log_file}' TO N'${MSSQL_BACKUP_DIR}/${DATABASE_NAME}_log.ldf';" \ + -Q "RESTORE DATABASE [${DATABASE_NAME}] FROM DISK = N'${MSSQL_DATA_DIR}/db.bak' WITH REPLACE, MOVE N'${data_file}' TO N'${MSSQL_DATA_DIR}/${DATABASE_NAME}.mdf', MOVE N'${log_file}' TO N'${MSSQL_DATA_DIR}/${DATABASE_NAME}_log.ldf';" \ $MSSQL_EXTRA_OPTS # Clean up backup file - rm "${MSSQL_BACKUP_DIR}/db.bak" + rm "${MSSQL_DATA_DIR}/db.bak" } diff --git a/src/restore.sh b/src/restore.sh index b3b8cc0..4747013 100644 --- a/src/restore.sh +++ b/src/restore.sh @@ -10,7 +10,7 @@ s3_uri_base="s3://${S3_BUCKET}/${S3_PREFIX}" # MSSQL uses .bak extension, other databases use .dump if [ "$DATABASE_SERVER" = "mssql" ]; then - backup_file="${MSSQL_BACKUP_DIR}/db.bak" + backup_file="${MSSQL_DATA_DIR}/db.bak" if [ -z "$PASSPHRASE" ]; then file_type=".bak" else @@ -52,7 +52,7 @@ echo "Restoring from backup..." restore # Clean up backup file -# Note: For MSSQL, the file is in MSSQL_BACKUP_DIR and cleanup happens in restore_mssql() +# Note: For MSSQL, the file is in MSSQL_DATA_DIR and cleanup happens in restore_mssql() if [ "$DATABASE_SERVER" != "mssql" ]; then rm "${backup_file}" fi diff --git a/tests/k8s-statefulset-test.yaml b/tests/k8s-statefulset-test.yaml index 8ba351c..806bff1 100644 --- a/tests/k8s-statefulset-test.yaml +++ b/tests/k8s-statefulset-test.yaml @@ -119,7 +119,7 @@ spec: # # ConfigMap (mssql-config) - See k8s-mssql-configmap-example.yaml # - DATABASE_SERVER, DATABASE_HOST, DATABASE_NAME, DATABASE_PORT -# - MSSQL_BACKUP_DIR, MSSQL_EXTRA_OPTS +# - MSSQL_DATA_DIR, MSSQL_EXTRA_OPTS # - SCHEDULE, BACKUP_KEEP_DAYS # - S3_BUCKET, S3_PREFIX, S3_REGION, S3_ENDPOINT, S3_S3V4 # Note: DATABASE_HOST is overridden to "localhost" in the StatefulSet for sidecar pattern diff --git a/tests/test-mssql-k8s.sh b/tests/test-mssql-k8s.sh index 263ab39..cca1678 100755 --- a/tests/test-mssql-k8s.sh +++ b/tests/test-mssql-k8s.sh @@ -16,7 +16,7 @@ STATEFULSET_NAME="mssql" POD_NAME="mssql-0" MSSQL_PASSWORD="YourStrong@Passw0rd" DATABASE_NAME="TestDB" -MSSQL_BACKUP_DIR="${MSSQL_BACKUP_DIR:-/var/opt/mssql/data}" +MSSQL_DATA_DIR="${MSSQL_DATA_DIR:-/var/opt/mssql/data}" S3_BUCKET="${S3_BUCKET:-test-backups}" S3_ENDPOINT="${S3_ENDPOINT:-}" # Set this if using MinIO or other S3-compatible storage STATEFULSET_FILE="${STATEFULSET_FILE:-$(dirname "$0")/../k8s-statefulset-with-sidecar.yaml}" @@ -66,7 +66,7 @@ kubectl create configmap mssql-config -n $NAMESPACE \ --from-literal=DATABASE_HOST='mssql-service' \ --from-literal=DATABASE_NAME="$DATABASE_NAME" \ --from-literal=DATABASE_PORT='1433' \ - --from-literal=MSSQL_BACKUP_DIR='/var/opt/mssql/data' \ + --from-literal=MSSQL_DATA_DIR='/var/opt/mssql/data' \ --from-literal=SCHEDULE='*/5 * * * *' \ --from-literal=BACKUP_KEEP_DAYS='7' \ --from-literal=S3_BUCKET="$S3_BUCKET" \