Sign inSign up

kamorion/mysql-s3

By kamorion

•Updated 7 months ago

MySQL/MariaDB dump & import with S3 sync - multi-arch (amd64/arm64)

Image
0

2.9K

kamorion/mysql-s3 repository overview

⁠mysql-s3

Lightweight Docker images for MySQL/MariaDB dump and import with S3 sync support. Designed for Kubernetes jobs in database refresh pipelines.

⁠Images

TagBaseMySQL ClientSize
latest, mariadbAlpine 3.23MariaDB (compatible MySQL 5.7/8.0)~50MB
mysql8Oracle Linux 9 slimMySQL 8.4 LTS (official)~200MB

Both variants include: mysql, mysqldump, aws CLI, bash.

Multi-arch: linux/amd64, linux/arm64

⁠When to use which variant?

  • mariadb (default): Best for imports (mysql command). Lightweight, fast to pull. MariaDB client is wire-compatible with MySQL 8.0 for all import operations.
  • mysql8: Required for dumps using MySQL-specific options like --set-gtid-purged=OFF (Aurora MySQL). Also needed if you rely on MySQL 8.x-specific client features.

⁠Quick Start

⁠Import SQL files from S3
docker run --rm \
  -e MYSQL_HOST=my-db.cluster-xxx.rds.amazonaws.com \
  -e MYSQL_USER=admin \
  -e MYSQL_PASSWORD='my-pa$$word' \
  -e MYSQL_DATABASE=mydb \
  -e S3_SYNC=true \
  -e S3_BUCKET=my-bucket \
  -e S3_PREFIX=sql-scripts/mydb \
  kamorion/mysql-s3:latest
⁠Dump a database to S3
docker run --rm \
  --entrypoint /dump.sh \
  -e MYSQL_HOST=my-db.cluster-xxx.rds.amazonaws.com \
  -e MYSQL_USER=admin \
  -e MYSQL_PASSWORD='my-pa$$word' \
  -e MYSQL_DATABASE=mydb \
  -e S3_SYNC=true \
  -e S3_BUCKET=my-bucket \
  -e S3_BUCKET_PREFIX=dumps/mydb \
  kamorion/mysql-s3:latest

⁠Environment Variables

⁠import.sh (default entrypoint)
VariableRequiredDefaultDescription
MYSQL_HOSTYes-MySQL server hostname
MYSQL_USERYes-MySQL username
MYSQL_PASSWORDYes-MySQL password (special chars safe)
MYSQL_DATABASENo-Target database (if unset, SQL files must contain USE statements)
MYSQL_PORTNo3306MySQL port
S3_SYNCNo-Set to any value to sync from S3 before import
S3_BUCKETIf S3_SYNC-S3 bucket name
S3_PREFIXNo-S3 key prefix
LOCAL_DIRNo/tmp/s3_localLocal directory for SQL files
CONTINUE_ON_ERRORNo-Set to any value to continue on SQL errors
⁠dump.sh
VariableRequiredDefaultDescription
MYSQL_HOSTYes-MySQL server hostname
MYSQL_USERYes-MySQL username
MYSQL_PASSWORDYes-MySQL password (special chars safe)
MYSQL_DATABASECond.-Database to dump (required unless ALL_DATABASES)
MYSQL_TABLENo-Single table to dump
MYSQL_PORTNo3306MySQL port
ALL_DATABASESNo-Set to dump all user databases
IGNORE_DATABASENo-Database to skip (with ALL_DATABASES)
MYSQLDUMP_OPTSNo--set-gtid-purged=OFFExtra mysqldump options
S3_SYNCNo-Set to sync dump files to S3
S3_BUCKETIf S3_SYNC-S3 bucket name
S3_BUCKET_PREFIXNo-S3 key prefix for upload
LOCAL_DIRNo/tmp/s3_localLocal directory for dump files

⁠Password Handling

Passwords with special characters ($, #, *, !, etc.) are handled safely using MySQL's --defaults-extra-file mechanism. The password is written to a temporary config file (chmod 600) and cleaned up on exit. No shell quoting issues.

⁠Kubernetes Job Example

apiVersion: batch/v1
kind: Job
metadata:
  name: db-import
spec:
  template:
    spec:
      serviceAccountName: refresh
      containers:
        - name: import
          image: kamorion/mysql-s3:latest
          env:
            - name: MYSQL_HOST
              value: "my-db.cluster-xxx.rds.amazonaws.com"
            - name: MYSQL_USER
              value: "admin"
            - name: MYSQL_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: db-credentials
                  key: password
            - name: MYSQL_DATABASE
              value: "mydb"
            - name: S3_SYNC
              value: "true"
            - name: S3_BUCKET
              value: "my-bucket"
            - name: S3_PREFIX
              value: "sql-scripts/mydb"
      restartPolicy: Never
  backoffLimit: 1

⁠Building Locally

# MariaDB variant
docker build -t mysql-s3:mariadb docker/mysql-s3/

# MySQL 8 variant
docker build -t mysql-s3:mysql8 -f docker/mysql-s3/Dockerfile.mysql8 docker/mysql-s3/

⁠License

Apache 2.0 - KamorionLabs⁠

Tag summary

Content type

Image

Digest

sha256:de1375a6a…

Size

51.8 MB

Last updated

7 months ago

docker pull kamorion/mysql-s3