Simple, automated MySQL backups to Git, S3, or OneDrive
For complete version history and migration guides, see RELEASE_NOTES.md
# Download the script
curl -O https://raw.githubusercontent.com/VGXConsulting/BackupDB/main/BackupDB.sh
chmod +x BackupDB.sh
# Download sample configuration
curl -O https://raw.githubusercontent.com/VGXConsulting/BackupDB/main/BackupDB.sample.env
cp BackupDB.sample.env BackupDB.env
./BackupDB.sh --test # Validate configuration
./BackupDB.sh --debug # Run with detailed logging
./BackupDB.sh # Run backup
Edit BackupDB.env with your settings. The script automatically loads this file.
| Variable | Required | Description | Example |
|---|---|---|---|
VGX_DB_STORAGE_TYPE |
Yes | Where to store backups | "git", "s3", "onedrive" |
VGX_DB_HOSTS |
Yes | Database servers | "localhost" or "db1.com,db2.com" |
VGX_DB_USERS |
Yes | Database usernames | "backup_user" or "user1,user2" |
VGX_DB_PASSWORDS |
Yes | Database passwords | "password" or "pass1,pass2" |
| Variable | Description | Example |
|βββ-|ββββ-|βββ|
| VGX_DB_GIT_REPO | Git repository URL | "git@github.com:user/backups.git" |
| Variable | Description | Example |
|βββ-|ββββ-|βββ|
| AWS_ACCESS_KEY_ID | S3 access key | "AKIA..." |
| AWS_SECRET_ACCESS_KEY | S3 secret key | "secret..." |
| VGX_DB_S3_BUCKET | S3 bucket name | "my-backups" |
| VGX_DB_S3_ENDPOINT_URL | S3 endpoint (non-AWS only) | "https://s3.backblaze.com" |
| Variable | Description | Example |
|βββ-|ββββ-|βββ|
| ONEDRIVE_REMOTE | rclone remote name | "onedrive" |
| ONEDRIVE_PATH | OneDrive folder path | "/DatabaseBackups" |
| Variable | Default | Description |
|βββ-|βββ|ββββ-|
| VGX_DB_INCREMENTAL_BACKUPS | "true" | Skip unchanged databases |
| VGX_DB_DELETE_LOCAL_BACKUPS | "true" | Delete local files after upload |
| VGX_DB_GIT_RETENTION_DAYS | "-1" | Git backup retention (-1=keep all) |
| VGX_DB_MAX_PARALLEL_JOBS | CPU cores | Number of parallel DB backups |
# Download and install
curl -O https://raw.githubusercontent.com/VGXConsulting/BackupDB/main/BackupDB.sh
curl -O https://raw.githubusercontent.com/VGXConsulting/BackupDB/main/BackupDB.sample.env
# Install script
sudo cp BackupDB.sh /usr/local/bin/
sudo chmod +x /usr/local/bin/BackupDB.sh
# Setup config directory
sudo mkdir -p /etc/backupdb
cp BackupDB.sample.env /etc/backupdb/BackupDB.env
sudo chown root:root /etc/backupdb/BackupDB.env
sudo chmod 600 /etc/backupdb/BackupDB.env
# Edit configuration
sudo nano /etc/backupdb/BackupDB.env
# Add to cron (daily at 2 AM)
echo "0 2 * * * cd /etc/backupdb && /usr/local/bin/BackupDB.sh" | sudo crontab -
# Download config to home directory
curl -o $HOME/BackupDB.env https://raw.githubusercontent.com/VGXConsulting/BackupDB/main/BackupDB.sample.env
# Edit configuration
nano $HOME/BackupDB.env
# Add to cron
crontab -e
# Add this line:
0 2 * * * curl -s https://raw.githubusercontent.com/VGXConsulting/BackupDB/main/BackupDB.sh | /bin/bash
Backups are organized by date:
Storage Location/
βββ DatabaseBackups/
β βββ 2025-01-15/
β β βββ 20250115_database1.sql.gz
β β βββ 20250115_database2.sql.gz
β βββ 2025-01-16/
β βββ 20250116_database1.sql.gz
β βββ 20250116_database2.sql.gz
./BackupDB.sh --test
./BackupDB.sh --debug
Git Authentication Failed
git clone your-repo-urlS3 Upload Failed
Database Connection Failed
mysql -h host -u user -p