Skip to content

OTOBO Backup & Restore – Database, Docker Volumes & Automation

Backup Cover

In this guide: Protect your OTOBO data with proven backup and restore strategies.

Related: Staging system · Hosting · Performance · Get support

In this guide, we take a deep dive into backup strategies for OTOBO and examine:

  1. Database dump via mysqldump
  2. Backing up and restoring Docker volumes
  3. OTOBO-native scripts backup.pl and restore.pl
  4. Automation with cronjobs and error handling
  5. Long-term archiving (e.g., AWS S3)

Advantage: Fast, platform-independent, contains almost all tickets, users, and settings.

Terminal window
mysqldump \
--host=${DB_HOST} \
--user=${DB_USER} \
--password=${DB_PASS} \
--column-statistics=0 \
--single-transaction \
--databases otobo \
> /backup/otobo_db_$(date +'%Y%m%d_%H%M').sql
  • --single-transaction: Minimizes table locks, OTOBO remains available.
  • Retention: e.g., hourly, last 72 dumps (3 days) via cron.
0 * * * * /usr/local/bin/otobo_db_backup.sh

otobo_db_backup.sh creates a dump and deletes files older than 3 days.

#!/bin/bash
BACKUP_DIR="/backup/db"
mkdir -p "$BACKUP_DIR"
DATE=$(date +'%Y%m%d_%H%M')
FILE="$BACKUP_DIR/otobo_db_${DATE}.sql.gz"
echo "Creating DB dump to $FILE"
mysqldump --host=localhost --user=otobo \
--password=SecretPass --column-statistics=0 \
--single-transaction otobo | gzip > "$FILE"
find "$BACKUP_DIR" -type f -name '*.sql.gz' -mtime +3 -delete

All persistently stored files (attachments, configuration, logs) are located in Docker volumes.

#!/bin/bash
date=
DATE=$(date +'%d%m%Y_%H%M%S')
# Shut down container for a consistent file system
docker compose -f /opt/otobo-docker/compose.yml down
tar -czf "/tmp/docker_volumes_$DATE.tar.gz" /var/lib/docker/volumes
docker compose -f /opt/otobo-docker/compose.yml up -d --build
  • Down/Up: Guarantees a clean copy.
  • Archive: GZ-compressed TAR in the host temp directory.
#!/bin/bash
# Usage: restore_volumes.sh backup_file.tar.gz
tar -xzf "$1" -C /
# Remove old volumes
docker compose -f /opt/otobo-docker/compose.yml down
rm -rf /var/lib/docker/volumes
# Restore and restart
tar -xzf "$1" -C /
docker compose -f /opt/otobo-docker/compose.yml up -d

OTOBO provides its own CLI scripts in the container:

Terminal window
# Show help
/opt/otobo/scripts/backup.pl -h
OptionDefaultDescription
-d, --backup-dirrequiredTarget directory for backups
-c, --compressgzipCompression method (gzip | bzip2)
-r, --remove-old-backups DAYSnoneDeletes older backups (in days)
-t, --backup-typefullbackupfullbackup (everything) | nofullbackup | dbonly

fullbackup: Database + home directory (without cache).
dbonly: Database only.

Example: Full backup in the Docker container

Section titled “Example: Full backup in the Docker container”
Terminal window
docker run --rm \
--volume otobo_opt_otobo:/opt/otobo \
--volume otobo_backup:/otobo_backup \
rotheross/otobo:latest-10_0 scripts/backup.pl \
--backup-dir /otobo_backup --compress gzip --remove-old-backups 7
Terminal window
docker run --rm \
--volume otobo_opt_otobo:/opt/otobo \
--volume otobo_backup:/otobo_backup \
rotheross/otobo:latest-10_0 scripts/restore.pl \
--backup-dir /otobo_backup/20231015_123045 --backup-dir /opt/otobo
#!/bin/bash
COMPOSE_FILE="/opt/otobo-docker/compose.yml"
# Start backup
docker compose -f "$COMPOSE_FILE" run --rm backup
if [ $? -ne 0 ]; then
echo "Backup failed" >&2
exit 1
fi
echo "Backup completed successfully"
0 */6 * * * /usr/local/bin/volume_backup.sh
#!/bin/bash
BACKUP_DIR="/path/to/backups"
echo "Removing backups older than 30 days in $BACKUP_DIR"
find "$BACKUP_DIR" -mindepth 1 -mtime +30 -exec rm -rf {} \\
\;
echo "Done."
  • AWS S3: Upload of .tar.gz and .sql.gz via aws cli or Python script.
  • rclone: Support for various targets (S3, Azure Blob, FTP).
  • Advantage: Offsite storage, unlimited scaling.

Differences from other systems (backup context)

Section titled “Differences from other systems (backup context)”

In the area of backup & restore, OTOBO and Znuny differ in the following aspects:

  • Container backups

    • OTOBO: Official Docker image provides a pre-installed backup service with CLI hooks (docker compose run backup), including prepared volume mounts and environment variables.
    • Znuny: Community Docker setups require manual addition of a backup container or customization of your own scripts.
  • OTOBO CLI scripts

    • OTOBO: backup.pl and restore.pl in the image support automatic cleanup options (--remove-old-backups), compression selection, and a single-transaction flag.
    • Znuny: Similar scripts exist, often without --remove-old-backups or advanced DB dump options; retrofitting via customization is necessary.
  • DB dump optimizations

    • OTOBO: Standard flag --single-transaction recommended and documented to avoid locks; CLI ensures consistent usage.
    • Znuny: Community documentation usually refers to a simple dump without transaction protection, risk of locks under high load.
  • Volume snapshot strategy

    • OTOBO: Example scripts (e.g., full backup & restore) are the official reference and tested in multi-container environments.
    • Znuny: Snapshot scripts vary greatly, official best practices are missing; users often have to define their own down/up sequences.
  • Automation & cloud plugins

    • OTOBO: Integrated S3 uploader examples (Python script) and configuration modules for Azure, Google Cloud Storage.
    • Znuny: No core plugins for cloud storage; solutions are usually external via rclone or separate upload scripts.

With this focus on backup-specific differences, you can make an informed decision on whether to use the pre-built OTOBO mechanisms or extend Znuny setups individually.

With these detailed scripts and strategies, your OTOBO data is securely backed up, ready for automation, and quickly restorable. Whether it’s a DB dump, Docker volumes, or standard OTOBO tools – you have all options under control.

Operate OTOBO reliably

Get help with updates, staging, maintenance, backup strategy, and secure documented operations.

Frequently asked questions

What should an OTOBO backup include?

At minimum the database and application file data (articles/attachments and config). Docker setups also need volume backups.

Which tools are commonly used for OTOBO backups?

mysqldump for the database, backup.pl/restore.pl for application data, plus volume archives for Docker deployments.

Should backups be automated?

Yes. Schedule regular backups with cron (or your orchestrator) and verify restores periodically. All persistently stored files (attachments, configuration, logs) are located in Docker volumes.

What should I know about Example command?

`--single-transaction`: Minimizes table locks, OTOBO remains available. Retention: e.g., hourly, last 72 dumps (3 days) via cron. #### Cron job (hourly, 3-day retention) `otobo_db_backup.sh` creates a dump and deletes files older than 3 days.

What should I know about Options?

`fullbackup`: Database + home directory (without cache). `dbonly`: Database only. #### Example: Full backup in the Docker container