Build a docker image for backup Mysql database to AWS S3
December 16, 2022
•
(Updated on April 24, 2023)
DOCKERFROM mariadb:latestWORKDIR /appRUN apt-get update && apt-get install -y curl unzip python3 python3-venvRUN ln -s /usr/bin/python3 /usr/bin/pythonRUN curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip" && unzip awscli-bundle.zip && ./awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/awsCOPY backup_to_s3.sh ./backup_to_s3.shENTRYPOINT [ "./backup_to_s3.sh" ]
In this Dockerfile, we use mariadb:latest to call mysqldump . In addition, we also install aws-cli to be able to interact with AWS using the command line.
File backup_to_s3.sh
BASH#!/bin/bash# Dump and upload to S3FILE_NAME=backup-$(date "+%Y-%m-%d-%H%M%S").sqlmysqldump -h $DATABASE_HOST -P 3306 -u $DATABASE_USER --password=$DATABASE_PASSWORD $DATABASE_NAME > $FILE_NAMEaws s3 cp $FILE_NAME s3://$AWS_S3_BUCKET/$FILE_NAME
Don’t forget run chmod a+x backup_to_s3.sh
SHELLdocker build -t backup_mysql:latest .
I have posted this docker image to my Docker Hub account osbkca/backup_mysql
mysql-cronjob-backup.yaml
YAMLapiVersion: batch/v1kind: CronJobmetadata:labels:app: auto-backup-mysqlname: auto-backup-mysqlspec:jobTemplate:spec:template:spec:affinity: {}containers:- env:- name: DATABASE_HOSTvalue: <change_value>- name: DATABASE_USERvalue: <change_value>- name: DATABASE_PASSWORDvalue: <change_value>- name: DATABASE_NAMEvalue: <change_value>- name: AWS_S3_BUCKETvalue: <change_value>- name: AWS_ACCESS_KEY_IDvalue: <change_value>- name: AWS_SECRET_ACCESS_KEYvalue: <change_value>image: osbkca/backup_mysql:latestimagePullPolicy: Alwaysname: backup-containerschedule: 12 09 * * *successfulJobsHistoryLimit: 3suspend: false
To deploy:
BASHkubectl apply -f mysql-cronjob-backup.yaml
Enjoy it!
With
👍LIKE
❤️LOVE
👏CLAP
🎉PARTY
Updates delivered to your inbox!
A periodic update about my life, recent blog posts, how-tos, and discoveries.
As a thank you, I'll also send you a Free CSS tutorial!
No spam - unsubscribe at any time!
More articles
If you enjoyed this article, you'll find these insightful too!