Back up MySQL to Filebase
Mirror the Postgres recipe using mysqldump.
One-off backup
mysqldump --single-transaction --quick --routines --triggers \
-u backup_user -p mydb \
| gzip -9 \
| aws --endpoint https://s3.filebase.io s3 cp - \
s3://my-db-backups/mysql/mydb-$(date +%Y%m%d-%H%M%S).sql.gz
--single-transaction keeps the dump consistent without long table locks (InnoDB tables only).
Restore
aws --endpoint https://s3.filebase.io s3 cp \
s3://my-db-backups/mysql/mydb-20260501-120000.sql.gz - \
| gunzip \
| mysql -u admin -p mydb
Daily cron job
/usr/local/bin/mysql-backup.sh
#!/bin/bash
set -euo pipefail
BUCKET="my-db-backups"
DB="mydb"
DATE=$(date +%Y%m%d-%H%M%S)
export AWS_ACCESS_KEY_ID="$FILEBASE_KEY"
export AWS_SECRET_ACCESS_KEY="$FILEBASE_SECRET"
mysqldump --single-transaction --quick --routines --triggers \
--defaults-file=/etc/mysql/backup.cnf "$DB" \
| gzip -9 \
| aws --endpoint https://s3.filebase.io s3 cp - \
"s3://${BUCKET}/mysql/${DB}-${DATE}.sql.gz"
Use --defaults-file=/etc/mysql/backup.cnf (chmod 600) so the password isn't on the command line.
Per-database backups
For multi-tenant systems where you want per-database files:
for db in $(mysql -u backup -e "SHOW DATABASES;" -s --skip-column-names | grep -v -E "^(mysql|information_schema|performance_schema|sys)$"); do
mysqldump --single-transaction "$db" \
| gzip -9 \
| aws --endpoint https://s3.filebase.io s3 cp - \
"s3://my-db-backups/mysql/${db}-$(date +%Y%m%d).sql.gz"
done
Physical / hot backups
For TB-scale MySQL, use xtrabackup or MySQL Enterprise Backup. Both can stream archives directly into S3-compatible storage.