Guides / MySQLMinIO

Back up MySQL to MinIO.

MinIO is self-hosted, S3-compatible storage you fully control. Here are two ways to get your MySQL data there — the manual command line, and a hands-off, encrypted, verified setup with xbackupman.

The manual way

Dump MySQL to stdout, gzip it, and stream it straight to MinIO (no temp file):

mysqldump -h HOST -u USER --single-transaction mydb | gzip | aws s3 cp - s3://BUCKET/mysql/backup-$(date +%F).sql.gz --endpoint-url https://minio.your-host.com

This works, but it's the easy 20%. You still own the hard 80%: encryption, scheduling, retention, failure alerts, and proving the backup actually restores. Restore is the reverse: gunzip | mysql into an empty database.

The automated way

With xbackupman you connect your MySQL database and your MinIO bucket once, pick a schedule, and it handles the rest — AES-256-GCM encryption before upload, SHA-256 verification, retention (including GFS), anomaly detection, and one-click restore. Your backups live in your own MinIO; we just orchestrate.

  1. 1. Add your MySQL connection (host, port 3306, credentials — encrypted at rest).
  2. 2. Add your MinIO bucket as a storage target.
  3. 3. Set a schedule and retention. Done — backups run and verify themselves.

FAQ

Is a plain MySQL dump piped to MinIO encrypted?

No. A raw MySQL dump uploaded to MinIO is stored as-is — anyone with bucket access can read it. xbackupman encrypts every backup with AES-256-GCM inside the worker before upload, so only ciphertext ever reaches MinIO.

How do I know the backup will actually restore?

The manual command gives you no guarantee. xbackupman records a SHA-256 checksum and can re-download, decrypt and decompress the backup to prove it's restorable before you ever need it.

Can I schedule this and prune old copies automatically?

The command above is one-shot. xbackupman runs it on any cron schedule (down to minutes), applies simple or grandfather-father-son retention, and alerts you if a backup fails or looks anomalous.