From 0a867f971964bd5b0bfd8fe9380d51c1cffdbd79 Mon Sep 17 00:00:00 2001 From: Dave Conroy Date: Fri, 3 Nov 2023 15:48:39 -0700 Subject: [PATCH] feat - Add Support for MSSQL Transaction logs - Closes #200 --- README.md | 2 ++ install/assets/defaults/10-db-backup | 1 + install/assets/functions/10-db-backup | 46 +++++++++++++++++++-------- 3 files changed, 36 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 526cace..6f175e0 100644 --- a/README.md +++ b/README.md @@ -263,6 +263,7 @@ If these are set and no other defaults or variables are set explicitly, they wil | Variable | Description | Default | `_FILE` | | -------------- | ------------------ | ------- | ------- | | `DEFAULT_PORT` | Microsoft SQL Port | `1433` | x | +| `DEFAULT_MSSQL_MODE` | Backup `DATABASE` or `TRANSACTION` logs | `DATABASE` | ###### MongoDB @@ -513,6 +514,7 @@ Otherwise, override them per backup job. Additional backup jobs can be scheduled | Variable | Description | Default | `_FILE` | | ----------- | ------------------ | ------- | ------- | | `DB01_PORT` | Microsoft SQL Port | `1433` | x | +| `DB01_MSSQL_MODE` | Backup `DATABASE` or `TRANSACTION` logs | `DATABASE` | ###### MongoDB diff --git a/install/assets/defaults/10-db-backup b/install/assets/defaults/10-db-backup index c7bf54c..c62ac30 100644 --- a/install/assets/defaults/10-db-backup +++ b/install/assets/defaults/10-db-backup @@ -22,6 +22,7 @@ DEFAULT_MYSQL_STORED_PROCEDURES=${DEFAULT_MYSQL_STORED_PROCEDURES:-"TRUE"} DEFAULT_MYSQL_TLS_CA_FILE=${DEFAULT_MYSQL_TLS_CA_FILE:-"/etc/ssl/cert.pem"} DEFAULT_MYSQL_TLS_VERIFY=${DEFAULT_MYSQL_TLS_VERIFY:-"FALSE"} DEFAULT_MYSQL_TLS_VERSION=${DEFAULT_MYSQL_TLS_VERSION:-"TLSv1.1,TLSv1.2,TLSv1.3"} +DEFAULT_MSSQL_MODE=${DEFAULT_MSSQL_MODE:-"database"} DEFAULT_PARALLEL_COMPRESSION_THREADS=${DEFAULT_PARALLEL_COMPRESSION_THREADS:-"$(nproc)"} DEFAULT_S3_CERT_SKIP_VERIFY=${DEFAULT_S3_CERT_SKIP_VERIFY:-"TRUE"} DEFAULT_S3_PROTOCOL=${DEFAULT_S3_PROTOCOL:-"https"} diff --git a/install/assets/functions/10-db-backup b/install/assets/functions/10-db-backup index ba0f723..7a28a63 100644 --- a/install/assets/functions/10-db-backup +++ b/install/assets/functions/10-db-backup @@ -183,6 +183,7 @@ bootstrap_variables() { transform_backup_instance_variable "${backup_instance_number}" MYSQL_TLS_KEY_FILE backup_job_mysql_tls_key_file transform_backup_instance_variable "${backup_instance_number}" MYSQL_TLS_VERIFY backup_job_mysql_tls_verify transform_backup_instance_variable "${backup_instance_number}" MYSQL_TLS_VERSION backup_job_mysql_tls_version + transform_backup_instance_variable "${backup_instance_number}" MSSQL_MODE backup_job_mssql_mode transform_backup_instance_variable "${backup_instance_number}" NAME backup_job_db_name transform_backup_instance_variable "${backup_instance_number}" NAME_EXCLUDE backup_job_db_name_exclude transform_backup_instance_variable "${backup_instance_number}" PARALLEL_COMPRESSION_THREADS backup_job_parallel_compression_threads @@ -445,19 +446,38 @@ backup_mongo() { } backup_mssql() { - prepare_dbbackup - target=mssql_${backup_job_db_name,,}_${backup_job_db_host,,}_${now}.bak - ltarget=mssql_${backup_job_db_name,,}_${backup_job_db_host,,} - compression - pre_dbbackup "${backup_job_db_name}" - write_log notice "Dumping MSSQL database: '${DB_NAME}'" - silent run_as_user /opt/mssql-tools18/bin/sqlcmd -C -S ${backup_job_db_host}\,${backup_job_db_port} -U ${backup_job_db_user} -P ${backup_job_db_pass} -Q "BACKUP DATABASE [${backup_job_db_name}] TO DISK = N'${TEMP_PATH}/${target}' WITH NOFORMAT, NOINIT, NAME = '${backup_job_db_name}-full', SKIP, NOREWIND, NOUNLOAD, STATS = 10" - exit_code=$? - check_exit_code backup $target - generate_checksum - move_dbbackup - check_exit_code move $target - ppost_dbbackup "${backup_job_db_name}" + case "${backup_job_mssql_mode,,}" in + db|database ) + prepare_dbbackup + target=mssql_${backup_job_db_name,,}_${backup_job_db_host,,}_${now}.bak + ltarget=mssql_${backup_job_db_name,,}_${backup_job_db_host,,} + compression + pre_dbbackup "${backup_job_db_name}" + write_log notice "Dumping MSSQL database: '${DB_NAME}'" + silent run_as_user /opt/mssql-tools18/bin/sqlcmd -C -S ${backup_job_db_host}\,${backup_job_db_port} -U ${backup_job_db_user} -P ${backup_job_db_pass} -Q "BACKUP DATABASE [${backup_job_db_name}] TO DISK = N'${TEMP_PATH}/${target}' WITH NOFORMAT, NOINIT, NAME = '${backup_job_db_name}-full', SKIP, NOREWIND, NOUNLOAD, STATS = 10" + exit_code=$? + check_exit_code backup $target + generate_checksum + move_dbbackup + check_exit_code move $target + post_dbbackup "${backup_job_db_name}" + ;; + trn|transaction ) + prepare_dbbackup + target=mssql_${backup_job_db_name,,}_${backup_job_db_host,,}_${now}.trn + ltarget=mssql_${backup_job_db_name,,}_trn_${backup_job_db_host,,} + compression + pre_dbbackup "${backup_job_db_name}" + write_log notice "Dumping MSSQL database: '${DB_NAME}'" + silent run_as_user /opt/mssql-tools18/bin/sqlcmd -C -S ${backup_job_db_host}\,${backup_job_db_port} -U ${backup_job_db_user} -P ${backup_job_db_pass} -Q "BACKUP LOG [${backup_job_db_name}] TO DISK = N'${TEMP_PATH}/${target}' WITH NOFORMAT, NOINIT, NAME = '${backup_job_db_name}-log', SKIP, NOREWIND, NOUNLOAD, STATS = 10" + exit_code=$? + check_exit_code backup $target + generate_checksum + move_dbbackup + check_exit_code move $target + post_dbbackup "${backup_job_db_name}" + ;; + }; } backup_mysql() {