Backup MySQL Databases to Amazon S3 (Shell Script)

Backup MySQL Databases to Amazon S3 (Shell Script)

Backup MySQL databases to amazon AWS s3 using shell script; Through this tutorial, we will learn how to take backup MySQL databases to amazon AWS s3 using shell script.

Backup MySQL Databases to Amazon S3 (Shell Script)

Follow the following steps to take backup MySQL database to amazon aws s3 using shell script:

  • Step 1 – Install AWS CLI
  • Step 2 – Create S3 Bucket
  • Step 3 – Shell Script to Backup MySQL database to S3
  • Step 4 – Execute Backup Script
  • Step 5 – Schedule Backup Script

Step 1 – Install AWS CLI

Just use the following tutorial to learn how to install aws cli on unix/linux system:

How to Install AWS CLI on Linux

Step 2 – Create S3 Bucket

Then log in to your AWS account using CLI and execute the following command to create an s3 bucket:

aws s3api create-bucket --bucket s3-bucket-name --region us-east-1 

Step 3 – Shell Script to Backup MySQL database to S3

Then use the following shell script to a file like db-backup.sh. This script uses mysqldump command to create databases backups. And use gzip command to archive backup files and finally use aws command to upload backup files to Amazon S3 bucket.

Create a file like /backup/scripts/s3-backup-mysql.sh in edit your favorite text editor. Then add the below content:

#!/usr/bin/env bash
 
#########################################################################
#########################################################################
###
####       Author: tutsmake
#####      Website: https://tutsmake.net
####
#########################################################################
#########################################################################
 
# Set the folder name formate with date (2022-05-28)
DATE_FORMAT=$(date +"%Y-%m-%d")
 
# MySQL server credentials
MYSQL_HOST="localhost"
MYSQL_PORT="3306"
MYSQL_USER="user"
MYSQL_PASSWORD="password"
 
# Path to local backup directory
LOCAL_BACKUP_DIR="/backup/dbbackup"
 
# Set s3 bucket name and directory path
S3_BUCKET_NAME="s3-bucket-name"
S3_BUCKET_PATH="backups/db-backup"
 
# Number of days to store local backup files
BACKUP_RETAIN_DAYS=30 
 
# Use a single database or space separated database's names
DATABASES="DB1 DB2 DB3"
 
##### Do not change below this line
 
mkdir -p ${LOCAL_BACKUP_DIR}/${DATE_FORMAT}
 
LOCAL_DIR=${LOCAL_BACKUP_DIR}/${DATE_FORMAT}
REMOTE_DIR=s3://${S3_BUCKET_NAME}/${S3_BUCKET_PATH}
 
for db in $DATABASES; do
   mysqldump \
        -h ${MYSQL_HOST} \
        -P ${MYSQL_PORT} \
        -u ${MYSQL_USER} \
        -p${MYSQL_PASSWORD} \
        --single-transaction ${db} | gzip -9 > ${LOCAL_DIR}/${db}-${DATE_FORMAT}.sql.gz
 
        aws s3 cp ${LOCAL_DIR}/${db}-${DATE_FORMAT}.sql.gz ${REMOTE_DIR}/${DATE_FORMAT}/
done
 
DBDELDATE=`date +"${DATE_FORMAT}" --date="${BACKUP_RETAIN_DAYS} days ago"`
 
if [ ! -z ${LOCAL_BACKUP_DIR} ]; then
 cd ${LOCAL_BACKUP_DIR}
 if [ ! -z ${DBDELDATE} ] && [ -d ${DBDELDATE} ]; then
 rm -rf ${DBDELDATE}
 
 fi
fi
 
## Script ends here

Step 4 – Execute Backup Script

And execute the following command on command line to backup script:

chmod +x s3-backup-mysql.sh 

Then run the backup script.

./s3-backup-mysql.sh 

Step 5 – Schedule Backup Script

Then use the following command to schedule the shell script using crontab to run on a daily basis.

crontab -e 

Add the below settings to end of the file:

# Run daily @ 2am
0 2 * * * /backup/scripts/s3-backup-mysql.sh > /dev/null 2>&1

Save the file and close it.

Conclusion

Through this tutorial, we have learned how to take backup MySQL databases to amazon AWS s3 using shell script.

Recommended Linux Tutorials

AuthorAdmin

Greetings, I'm Devendra Dode, a full-stack developer, entrepreneur, and the proud owner of Tutsmake.com. My passion lies in crafting informative tutorials and offering valuable tips to assist fellow developers on their coding journey. Within my content, I cover a spectrum of technologies, including PHP, Python, JavaScript, jQuery, Laravel, Livewire, CodeIgniter, Node.js, Express.js, Vue.js, Angular.js, React.js, MySQL, MongoDB, REST APIs, Windows, XAMPP, Linux, Ubuntu, Amazon AWS, Composer, SEO, WordPress, SSL, and Bootstrap. Whether you're starting out or looking for advanced examples, I provide step-by-step guides and practical demonstrations to make your learning experience seamless. Let's explore the diverse realms of coding together.

Leave a Reply

Your email address will not be published. Required fields are marked *