Files
BorgBackupWrapper/Readme.md
2025-12-02 10:01:37 +09:00

309 lines
8.1 KiB
Markdown

# Borg Backup Wrapper Scripts
These scripts are wrappers around the main borg backup scripts.
Modules for plain file backup, mysql and postgresql backup exists.
## IMPORTANT NOTICE FOR UPGRADE TO VERSION 4.0 OR HIGHER
*VERSION 4.0* CHANGE
Version 4.0 introduces default borg repository name with `-file` for the `file` module. The repository has to be renamed manual before the next backup or the backup will fail.
*Example:*
Old backup name
```sh
BACKUP_FILE="some-backup-data.borg"
```
Then the file need to be renamed the following way:
`mv some-backup-data.borg some-backup-data-file.borg`
Below changes have to be done after the `file` module backup has been renamed.
With Version 4.0 all backup sets are prefixed with the module name and a comma. For exmaple the files backup will have backup set "file,YYYY-MM-DD" as base name.
To make sure prune of archives will work the `_borg_backup_set_prefix_cleanup.sh` script has to be run once. It has the same config (-c), debug (-d) and dry run (-n) options like the main scripts. It is recommended to run with the dry-run script first and see that the list of chagnes matches the expectation.
The zabbix module has the prefix changed from `zabbix-settings-` to `zabbix,settings-` to match the new archive set rules
## Recommended setup
git clone this repostory into the target folder:
`git clone <repo> borg`
And in there create the needed settings files.
Now the core scripts can be updated with a simple
`git pull`
No settings files will be overwritten
## Possible command line options
### `-c <config folder>`
if this is not given, /usr/local/scripts/borg/ is used
### `-L <log folder>`
override config set and default log folder
### `-T <tag>`
create one time stand alone backup prefixed with tag name
### `-D <tag backup set>`
remove a tagged backup set, full name must be given
### `-b <borg executable>`
override the default borg executable found in path
### `-P`
print list of archives created
### `-V`
verify if repository exists, if not abort
### `-e`
exit after running verify `-V`
### `-I`
init repository (must be run first)
### `-Z`
run `borg compact` over given repository
### `-C`
run `borg check` over given repository
#### `-y`
Add `--verify-data` to `borg check`. Only works with `-C`
#### `-p <prefix|glob>`
Only `borg check` data that has given prefix or glob (with *). Only works with `-C`
### `-i`
print out only info
### `-l`
list files during backup
### `-v`
be verbose
### `-d`
debug output all commands
### `-n`
only do dry run
### `-h`
this help page
## Basic Settings
`borg.backup.settings`
This file must be configured, without it the backup will not work
The following must be set or checked:
LOG_FOLDER: default `/var/log/borg.backup/`
TARGET_FOLDER: must be set to a path where the backups can be written
BACKUP_FILE: the folder inside the TARGET_FOLDER that is the target for borg. Must end with `.borg`
Note: BACKUP_FILE is the base name. For all except file (current) a module suffix will be added:
eg:
`foo.name.borg` wil be `foor.name-mysql.borg` for mysql backups.
If `FILE_REPOSITORY_COMPATIBLE` is set to `false` in the borg.backup.file.settings then the file borg name will have `-file` added too. Currently this is not added to stay compatible with older scripts
All below have default values if not set in the main settings file
* COMPRESSION: zstd
* COMPRESSION_LEVEL: 3
* ENCRYPTION: keyfile (with no password)
* FORCE_VERIFY: false
* COMPACT_INTERVAL: 1
* CHECK_INTERVAL: none
* KEEP_LAST: 0
* KEEP_HOURS: 0
* KEEP_DAYS: 7
* KEEP_WEEKS: 4
* KEEP_MONTHS: 6
* KEEP_YEARS: 1
All module settings files can have the following prefixed with `SUB_` to override master settings:
* SUB_BACKUP_FILE
* SUB_COMPRESSION
* SUB_COMPRESSION_LEVEL
* SUB_COMPACT_INTERVAL
* SUB_CHECK_INTERVAL
* SUB_BACKUP_SET
* SUB_KEEP_LAST
* SUB_KEEP_HOURS
* SUB_KEEP_DAYS
* SUB_KEEP_WEEKS
* SUB_KEEP_MONTHS
* SUB_KEEP_YEARS
* SUB_KEEP_WITHIN
## Setup backup via SSH to remote host on `borg.backup.settings`
For this the following settings are from interest
```sh
TARGET_USER="";
TARGET_HOST="";
TARGET_PORT="";
```
Note that if `.ssh/config` is used only `TARGET_HOST` needs to be set. Recommened for handling proxy jumps and key files.
and `TARGET_BORG_PATH="";` if the target borg is in a non default path
## Override borg executable in `borg.backup.settings`
`BORG_EXECUTABLE="<full path to borg>"`
## Note on CHECK_INTERVAL and SUB_CHECK_INTERVAL
If set to empty or 0 it will not run an automatic check. If set to 1 it will run a check after each backup. Any other value means days differente to the last check.
Running check manually (`-C`) will not reset the last check timestamp.
Automatic checks always add `--verify-data`, with manual `-C` the option `-y` has to be set.
## File backup settings
On new setups it is recommended to use the `borg.backup.file.setings` and set
`FILE_REPOSITORY_COMPATIBLE`
to `true`
### Config variables
### Control files
```sh
backup.borg.file.include
backup.borg.file.exclude
```
`backup.borg.file.include` must be set
### File content rules
## PostgreSQL backup settings
This script must be run as the postgres user, normaly `postgres`.
The postgres user must be added to the backup group for this, so that the basic init file can be created in the borg base folder.
### PostgreSQL Config variables
| Variable | Default | Description |
| - | - | - |
| DATABASE_FULL_DUMP | | if empty, dump per databse, if set dump all in one file, if set to schema dump only schema |
| DATABASE_USER | | overide username to connect to database |
### PostgreSQL Control files
```sh
backup.borg.pgsql.include
backup.borg.pgsql.exclude
backup.borg.pgsql.schema-only
```
## MySQL backup settings
If non root ident authentication run is used, be sure that the `mysql` user is in the backup group.
### MySQL Config variables
| Variable | Default | Description |
| - | - | - |
| DATABASE_FULL_DUMP | | if empty, dump per databse, if set dump all in one file, if set to schema dump only schema |
| MYSQL_DB_CONFIG | | override file for connection. In modern mariaDB installations it is rcommended to run the script as root or mysql user and use the ident authentication instead. |
### MySQLControl files
```sh
backup.borg.mysql.include
backup.borg.mysql.exclude
backup.borg.mysql.schema-only
```
## gitea backup settings
Note that the backup needs the GIT_USER set that runs gitea.
This user is neede to create the temporary dump folder and access for the git files and database.
### gitea Config Variables
| Variable | Default | Description |
| - | - | - |
| GIT_USER | git | The user that runs gitea |
| GITEA_WORKING_DIR | /var/tmp/gitea/ | Where the temporary dump files from the backup are stored, as user git |
| GITEA_TEMP_DIR | /var/tmp/ | General temporary folder |
| GITEA_BIN | /usr/local/bin/gitea | Where the gitea binary is located |
| GITEA_CONFIG | /etc/gitea/app.ini | The configuration file for gitea |
### gitea Control files
There are no control files for gitea backup
## zabbix config backup settings
The `zabbix-dump` dump script must be installed from: <https://github.com/gullevek/zabbix-backup>
### zabbix Config Variables
| Variable | Default | Description |
| - | - | - |
| ZABBIX_DUMP | /usr/local/bin/zabbix-dump | |
| ZABBIX_DATABASE | '' | Must be set as either psql or mysql |
| ZABBIX_CONFIG | '' | if not set uses default location |
| ZABBIX_UNKNOWN_TABLES | '' | if set, changed to -f (force) |
| ZABBIX_DB_PORT | '' | if set, sets -P parameter on zabbix backup script to override auto get from zabbix server config |
### zabbix Control files
There are no control files for zabbix settings backup
## File connection
Running any of the commands below
* borg.backup.file.sh
* borg.backup.gitea.sh
* borg.backup.mysql.sh
* borg.backup.pgsql.sh
* borg.backup.zabbix.sh
1) Run `borg.backup.functions.init.sh` (always)
2) Run `borg.backup.functions.verify.sh` (always)
3) (other code in "file" module)
4) Run `borg.backup.functions.info.sh` (always)
5) Run `borg.backup.functions.compact.sh` (not if one time tag)
6) Run `borg.backup.functions.check.sh` (not if one time tag)
7) Run `borg.backup.functions.close.sh` (always, can be called on error too)