There will a multiple cases when you will be asked to Automate the backup of mysl dump and store somewhere. there will be a multiple way of doing this but in this article we will see how we can take the msql dump of a database and push it to the AWS S3 bucket.
Just to make Sure that the backup is successful we will be using the slack for receiving the notification regarding the backup completion. We will be using the shell Script to Automate this process.
Prerequisite,
- Need an AWS Account.
- Server With attached Role or AWS Cli Configured.
- Slack Account with incoming webook for channel.
- Existing database, who’s backup need to be taken.
Create a bucket in aws s3 which you will be using to store the mysql db Dump. Below Shell Script Will perform below things,
- Take the Backup of mysql dump on the Server with proper timestamp
- Push the mysql to S3 on defined bucket name
- delete the dump file from the server
- Push Notification to Slack saying backup is done.
- generate proper log to troubleshoot in case of failure.
Note: Script will automatically create the required directories if not present at the path.
Make Sure you have configured the CLI or Attached role to the Server with required permission and also created the required bucket.
Copy the below Script and paste in a file called say, db-dump.sh
# !/bin/bash
This script will take the backup of a mysql database and store dumps to the
/tmp/lab_dumps directory and push to devopsagebucket s3 bucket.
Database connection details
db_host="localhost" ## Replace the Database endpoint here
db_user="wp-user" ## replace with your database user
db_pass="secure-password" ## Replace with your daabase password
db_name="wordpress" ## Replace with your database name
Dump location on server and other variables
server_dump_location="/tmp/mysql-dump/"
log_path="/tmp/script_log/"
log_location="/tmp/script_log/db_dump.log"
s3_bucket="s3://devopsagebucket"
time_stamp="$(date +"%d-%b-%Y-%H_%M_%S")"
Check If diretory is present or not, If not then create it.
echo "##################################################################" >> $log_location
if [ -d $server_dump_location ]; then
echo "Directory Alredy Exists" >> $log_location
elif [ -d $log_path ]; then
echo "Log Directory Alredy Exists" >> $log_location
else
mkdir $server_dump_location $log_path
echo "Directory Was not there, hence created $server_dump_location and $log_path" >> $log_location
fi
Slack Incoming Web hook for db_dump channel
slack_url=https://hooks.slack.com/services/TKKRQR12B/XXXXXXXXXXXXXXXXXXXXXXXXXXXXX ## Replace you Slack Incoming hook here.
Server backup initialization
echo "Taking the backup of sample wordpress database, Started at: $time_stamp" >> $log_location
mysqldump -h $db_host -u $db_user -p$db_pass $db_name > $server_dump_location/$db_name-$time_stamp.sql
if [ $? -eq 0 ]; then
echo "Backup Successfully Done" >> $log_location
else
echo "Backup Failed, Please check" >> $log_location
exit 1
fi
echo "Backup Completed at: $time_stamp" >> $log_location
Push Dump to S3 bucket.
echo "Pushing test wordpress db dump to S3 at $time_stamp" >> $log_location
aws s3 cp $server_dump_location $s3_bucket --recursive
echo "Moved mysql dump to S3 at $time_stamp" >> $log_location
echo "#################################################################" >> $log_location
Delete the Mysql Dump from the Server
sudo rm -rf $server_dump_location/$db_name-*
Or, # Clear Dumps from the Server Older than 1 Weeks.
find $server_dump_location/* -mtime +7 -exec rm {} \;
Notification to Slack
curl -X POST -H 'Content-type: application/json' --data '{"text":"'"Backup of Sample WordPress database has completed at $time_stamp"'"}' $slack_url
complete command
curl -X POST -H 'Content-type: application/json' --data '{"text":"'"Message $time_stamp"'"}' https://hooks.slack.com/services/xxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Note: Don’t Forget to change your database details at the top of script before executing it. Please find the same script in devopsage official git repository.
Once You run this script, the backup will be taken and pushed to the S3.
Also, you will get a Notification on Slack Channel as shown in the Screenshot below.
Verify the S3 Bucket and also check logs on the Server.
Disclaimer: This Script does not comes with any guaranty, please go through it carefully before executing it. DevOpsAGE Will not be responsible for any loss of data or any Issues happened
Thats It for this Post!!
If you Like Our Content here at Devopsage, then please support us by sharing this post.
Please Like and follow us at, LinkedIn, Facebook, Twitter, and GitHub
Also, Please comment on the post with your views and let us know if any changes need to be done.
Thanks!
