diff --git a/CHANGELOG.md b/CHANGELOG.md index 47a960e..5ce5f9f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## 3.0.3 2022-03-21 + + ### Changed + - Add documentation for Manual mode + - Revert Compression variables + + ## 3.0.2 2022-03-18 ### Changed diff --git a/README.md b/README.md index a93b9fb..72db13a 100644 --- a/README.md +++ b/README.md @@ -47,10 +47,15 @@ Currently backs up CouchDB, InfluxDB, MySQL, MongoDB, Postgres, Redis servers. - [Persistent Storage](#persistent-storage-1) - [Environment Variables](#environment-variables) - [Base Images used](#base-images-used) + - [Container Options](#container-options) + - [Database Specific Options](#database-specific-options) + - [Scheduling Options](#scheduling-options) + - [Backup Options](#backup-options) - [Backing Up to S3 Compatible Services](#backing-up-to-s3-compatible-services) - [Maintenance](#maintenance) - [Shell Access](#shell-access) - [Manual Backups](#manual-backups) + - [Restoring Databases](#restoring-databases) - [Custom Scripts](#custom-scripts) - [Support](#support) - [Usage](#usage) @@ -120,6 +125,7 @@ Be sure to view the following repositories to understand all the customizable op | ----------------- | -------------------------------------------------------------------------------------------------------------------------------- | --------------- | | `BACKUP_LOCATION` | Backup to `FILESYSTEM` or `S3` compatible services like S3, Minio, Wasabi | `FILESYSTEM` | | `MODE` | `AUTO` mode to use internal scheduling routines or `MANUAL` to simply use this as manual backups only executed by your own means | `AUTO` | +| `MANUAL_RUN_FOREVER` | `TRUE` or `FALSE` if you wish to try to make the container exit after the backup | `TRUE` | | `TEMP_LOCATION` | Perform Backups and Compression in this temporary directory | `/tmp/backups/` | | `DB_AUTH` | (Mongo Only - Optional) Authentication Database | | | `DEBUG_MODE` | If set to `true`, print copious shell script messages to the container log. Otherwise only basic messages are printed. | `FALSE` | @@ -148,15 +154,16 @@ Be sure to view the following repositories to understand all the customizable op ### Backup Options | Parameter | Description | Default | | ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ------- | -| `ENABLE_COMPRESSION` | Use either Gzip `GZ`, Bzip2 `BZ`, XZip `XZ`, ZSTD `ZSTD` or none `NONE` | `GZ` | -| `ENABLE_PARALLEL_COMPRESSION` | Use multiple cores when compressing backups `TRUE` or `FALSE` | `TRUE` | +| `COMPRESSION` | Use either Gzip `GZ`, Bzip2 `BZ`, XZip `XZ`, ZSTD `ZSTD` or none `NONE` | `GZ` | | `COMPRESSION_LEVEL` | Numberical value of what level of compression to use, most allow `1` to `9` except for `ZSTD` which allows for `1` to `19` - | `3` | +| `ENABLE_PARALLEL_COMPRESSION` | Use multiple cores when compressing backups `TRUE` or `FALSE` | `TRUE` | | `ENABLE_CHECKSUM` | Generate either a MD5 or SHA1 in Directory, `TRUE` or `FALSE` | `TRUE` | | `CHECKSUM` | Either `MD5` or `SHA1` | `MD5` | | `EXTRA_OPTS` | If you need to pass extra arguments to the backup command, add them here e.g. `--extra-command` | | | `MYSQL_MAX_ALLOWED_PACKET` | Max allowed packet if backing up MySQL / MariaDB | `512M` | | `MYSQL_SINGLE_TRANSACTION` | Backup in a single transaction with MySQL / MariaDB | `TRUE` | | `MYSQL_STORED_PROCEDURES` | Backup stored procedures with MySQL / MariaDB | `TRUE` | + - When using compression with MongoDB, only `GZ` compression is possible. #### Backing Up to S3 Compatible Services @@ -190,6 +197,8 @@ docker exec -it (whatever your container name is) bash ### Manual Backups Manual Backups can be performed by entering the container and typing `backup-now` +- Recently there was a request to have the container work with Kukbernetes cron scheduling. This can theoretically be accomplished by setting the container `MODE=MANUAL` and then setting `MANUAL_RUN_FOREVER=FALSE` - You would also want to disable a few features from the upstream base images specifically `CONTAINER_ENABLE_SCHEDULING` and `CONTAINER_ENABLE_MONITORING`. This should allow the container to start, execute a backup and then exit cleanly. + ### Restoring Databases Entering in the container and executing `restore` will execute a menu based script to restore your backups. diff --git a/install/assets/defaults/10-db-backup b/install/assets/defaults/10-db-backup index e7fc7c3..28bcb36 100755 --- a/install/assets/defaults/10-db-backup +++ b/install/assets/defaults/10-db-backup @@ -2,12 +2,12 @@ BACKUP_LOCATION=${BACKUP_LOCATION:-"FILESYSTEM"} CHECKSUM=${CHECKSUM:-"MD5"} +COMPRESSION=${COMPRESSION:-"GZ"} COMPRESSION_LEVEL=${COMPRESSION_LEVEL:-"3"} DB_DUMP_BEGIN=${DB_DUMP_BEGIN:-+0} DB_DUMP_FREQ=${DB_DUMP_FREQ:-1440} DB_DUMP_TARGET=${DB_DUMP_TARGET:-"/backup"} ENABLE_CHECKSUM=${ENABLE_CHECKSUM:-"TRUE"} -ENABLE_COMPRESSION=${ENABLE_COMPRESSION:-"GZ"} ENABLE_PARALLEL_COMPRESSION={ENABLE_PARALLEL_COMPRESSION:-"TRUE"} LOG_PATH=${LOG_PATH:-"/logs/"} LOG_TYPE=${LOG_TYPE:-"BOTH"} diff --git a/install/assets/functions/10-db-backup b/install/assets/functions/10-db-backup index 1e024db..a8f6b24 100755 --- a/install/assets/functions/10-db-backup +++ b/install/assets/functions/10-db-backup @@ -338,7 +338,7 @@ check_exit_code() { } compression() { - case "${ENABLE_COMPRESSION,,}" in + case "${COMPRESSION,,}" in gz* ) print_notice "Compressing backup with gzip" target=${target}.gz diff --git a/install/etc/services.available/10-db-backup/run b/install/etc/services.available/10-db-backup/run index 48eeec9..c73939e 100755 --- a/install/etc/services.available/10-db-backup/run +++ b/install/etc/services.available/10-db-backup/run @@ -8,6 +8,11 @@ PROCESS_NAME="db-backup" bootstrap_compression bootstrap_variables +if [ "${MODE,,}" = "manual" ] ; then + DB_DUMP_BEGIN=+0 + manual=TRUE +fi + case "${1,,}" in "now" | "manual" ) DB_DUMP_BEGIN=+0 @@ -27,22 +32,24 @@ case "${1,,}" in : ;; * ) - current_time=$(date +"%s") - today=$(date +"%Y%m%d") + if [ "${manual,,}" = "true" ]; + current_time=$(date +"%s") + today=$(date +"%Y%m%d") - if [[ $DB_DUMP_BEGIN =~ ^\+(.*)$ ]]; then - waittime=$(( ${BASH_REMATCH[1]} * 60 )) - target_time=$(($current_time + $waittime)) - else - target_time=$(date --date="${today}${DB_DUMP_BEGIN}" +"%s") - if [[ "$target_time" < "$current_time" ]]; then - target_time=$(($target_time + 24*60*60)) + if [[ $DB_DUMP_BEGIN =~ ^\+(.*)$ ]]; then + waittime=$(( ${BASH_REMATCH[1]} * 60 )) + target_time=$(($current_time + $waittime)) + else + target_time=$(date --date="${today}${DB_DUMP_BEGIN}" +"%s") + if [[ "$target_time" < "$current_time" ]]; then + target_time=$(($target_time + 24*60*60)) + fi + waittime=$(($target_time - $current_time)) fi - waittime=$(($target_time - $current_time)) + print_debug "Wait Time: ${waittime} Target time: ${target_time} Current Time: ${current_time}" + print_info "Next Backup at $(date -d @${target_time} +"%Y-%m-%d %T %Z")" + sleep $waittime fi - print_debug "Wait Time: ${waittime} Target time: ${target_time} Current Time: ${current_time}" - print_info "Next Backup at $(date -d @${target_time} +"%Y-%m-%d %T %Z")" - sleep $waittime ;; esac @@ -94,7 +101,7 @@ while true; do backup_finish_time=$(date +"%s") backup_total_time=$(echo $((backup_finish_time-backup_start_time))) - print_info "Backup finish time: $(date -d @${backup_finish_time} +"%Y-%m-%d %T %Z")" + print_info "Backup finish time: $(date -d @${backup_finish_time} +"%Y-%m-%d %T %Z") with exit code ${exit_code}" print_notice "Backup time elapsed: $(echo ${backup_total_time} | awk '{printf "Hours: %d Minutes: %02d Seconds: %02d", $1/3600, ($1/60)%60, $1%60}')" ### Zabbix / Monitoring stats