Sign inSign up

alian87/mysql-backup-rclone

By alian87

โ€ขUpdated 12 months ago

Automated MySQL backup to Google Drive using Rclone with Docker Swarm support

Image
Languages & frameworks
Developer tools
0

1.1K

alian87/mysql-backup-rclone repository overview

โ MySQL Backup with Rclone

Automated MySQL database backup to Google Drive using Rclone. Production-ready Docker container with secure credential handling, health checks, and Docker Swarm support.

โ ๐Ÿš€ Quick Start

โ 1. Configure Rclone
# Create rclone configuration volume
docker volume create rclone_config

# Configure rclone
docker run --rm -it --entrypoint bash -v rclone_config:/root/.config/rclone alian87/mysql-backup-rclone:latest

# Inside the container, run: rclone config
# โš ๏ธ For Google Drive authentication, you'll need rclone installed locally.
# The container will show a command like:
#   rclone authorize "drive" "eyJzY29wZSI6ImRyaXZlIn0"
# Copy the EXACT command from your terminal (each config has unique code!)
# Run the copied command on your LOCAL machine, then paste the token back.
# Install rclone locally: https://rclone.org/downloads/
โ 2. Run Backup Container
docker run -d \
  --name mysql-backup \
  -e MYSQL_HOST=mysql-server \
  -e MYSQL_USER=root \
  -e MYSQL_PASSWORD=your_password \
  -e MYSQL_DATABASES=db1,db2,db3 \
  -e RCLONE_REMOTE=gdrive:backups/mysql \
  -v rclone_config:/root/.config/rclone \
  alian87/mysql-backup-rclone:latest

โ โœจ Features

  • ๐Ÿ”’ Secure: Temporary credentials file prevents password exposure
  • ๐Ÿš€ Automated: Configurable cron scheduling
  • ๐Ÿ“Š Multi-database: Backup multiple databases in a single run
  • โ˜๏ธ Cloud Storage: Direct upload to Google Drive via Rclone
  • ๐Ÿงน Auto-cleanup: Configurable retention of local backups
  • ๐Ÿ“ Structured Logging: Multiple log levels with timestamps
  • ๐Ÿ”” Notifications: Webhook support for Slack/Discord/Teams
  • ๐Ÿฅ Health Checks: Built-in container health monitoring
  • ๐Ÿณ Docker Swarm Ready: Production deployment support

โ ๐Ÿ“‹ Environment Variables

VariableDescriptionDefaultRequired
MYSQL_HOSTMySQL server hostnamelocalhostYes
MYSQL_PORTMySQL server port3306No
MYSQL_USERMySQL usernamerootYes
MYSQL_PASSWORDMySQL password-Yes
MYSQL_DATABASESComma-separated database names-Yes
RCLONE_REMOTERclone remote pathgdrive:backupsYes
CRON_SCHEDULECron expression for scheduling0 3 * * *No
BACKUP_RETENTIONNumber of local backups to keep5No
TZTimezoneAmerica/Sao_PauloNo
LOG_LEVELLogging levelINFONo
WEBHOOK_URLWebhook URL for notifications-No

โ ๐Ÿณ Docker Compose

version: '3.8'

services:
  mysql-backup:
    image: alian87/mysql-backup-rclone:latest
    restart: unless-stopped
    environment:
      MYSQL_HOST: "mysql"
      MYSQL_PORT: 3306
      MYSQL_USER: "root"
      MYSQL_PASSWORD: "your_password"
      MYSQL_DATABASES: "db1,db2,db3"
      RCLONE_REMOTE: "gdrive:backups/mysql"
      CRON_SCHEDULE: "0 2 * * *"
      BACKUP_RETENTION: 7
      TZ: "America/Sao_Paulo"
    volumes:
      - rclone_config:/root/.config/rclone
      - backup_data:/backup
    healthcheck:
      test: ["CMD-SHELL", "test -f /var/log/cron.log && pgrep cron > /dev/null"]
      interval: 1m
      timeout: 10s
      retries: 3

volumes:
  rclone_config:
  backup_data:

โ ๐Ÿ”ง Usage Examples

โ Basic Backup
docker run -d \
  -e MYSQL_HOST=mysql-server \
  -e MYSQL_DATABASES=mydb \
  -e MYSQL_PASSWORD=password \
  -v rclone_config:/root/.config/rclone \
  alian87/mysql-backup-rclone:latest
โ With Notifications
docker run -d \
  -e MYSQL_HOST=mysql-server \
  -e MYSQL_DATABASES=mydb \
  -e WEBHOOK_URL=https://hooks.slack.com/services/YOUR/WEBHOOK/URL \
  -v rclone_config:/root/.config/rclone \
  alian87/mysql-backup-rclone:latest
โ Manual Backup
docker exec mysql-backup /scripts/backup.sh

โ ๐Ÿ“Š Cron Schedule Examples

# Daily at 2 AM
CRON_SCHEDULE="0 2 * * *"

# Every 6 hours
CRON_SCHEDULE="0 */6 * * *"

# Weekly on Sunday at 3 AM
CRON_SCHEDULE="0 3 * * 0"

# Monthly on the 1st at midnight
CRON_SCHEDULE="0 0 1 * *"

โ ๐Ÿฅ Health Check

The container includes built-in health checks:

# Check container health
docker ps

# View health check logs
docker inspect mysql-backup | jq '.[0].State.Health'

โ ๐Ÿ”’ Security Best Practices

  1. Use Docker Secrets for passwords in production
  2. Create dedicated backup user with minimal privileges
  3. Regularly rotate Google Drive API credentials
  4. Monitor backup logs for suspicious activity
-- Create dedicated backup user
CREATE USER 'backup_user'@'%' IDENTIFIED BY 'secure_password';
GRANT SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER ON *.* TO 'backup_user'@'%';
FLUSH PRIVILEGES;

โ ๐Ÿ“š Documentation

โ ๐Ÿ› Issues & Support

โ ๐Ÿ“„ License

MIT License - see LICENSEโ 

โ ๐Ÿท๏ธ Tags

  • latest - Latest stable version
  • 1.0.0 - Specific version
  • stable - Production-ready stable version

โญ If this project helps you, please give it a star on GitHubโ !

Tag summary

Content type

Image

Digest

sha256:2d6e906b9โ€ฆ

Size

86.5 MB

Last updated

12 months ago

docker pull alian87/mysql-backup-rclone