March 17, 2021 / Nirav Shah
In this blog, we are going to explain how to take a backup of WordPress site code and data onto an S3 bucket.
Step 1: Create an S3 bucket with a name: -backup.
Step 2: Create an IAM user with a name: wordpress-s3-backup-user and attach the following policy to this user.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:ListBucketMultipartUploads",
"s3:AbortMultipartUpload",
"s3:ListMultipartUploadParts"
],
"Resource": [
"arn:aws:s3:::-backup",
"arn:aws:s3:::-backup/*"
],
"Condition": {
"IpAddress": {
"aws:SourceIp": ""
}
}
}
]
}
Step 3: Create a Read-only MySQL DB user with SELECT permission on all WordPress DB tables.
To do so, connect to MySQL DB and execute the following commands:
CREATE USER ‘wordpress_backupuser’@’localhost’ IDENTIFIED BY ”;
GRANT SELECT ON * . * TO ‘wordpress_backupuser’@’localhost’;
Step 4: SSH to the WordPress server and install AWS CLI. And also configure the CLI with credentials created in Step 2.
pip3 install aws cli –upgrade –user
touch test-aws-access.txt
aws s3 cp test-aws-access.txt s3://-backup
Step 5: Create the following S3 backup script with a name: wordpress-s3-backup.sh
# MySQL Dump mysqldump --single-transaction -u wordpress_backupuser -p -h localhost > /tmp/wordpress-dump.sql # Zip wordpress code rm -rf /tmp/wordpress-code.zip zip -r /tmp/wordpress-code.zip /path/to/your/wordpress-root-dir dy=`date --date="-1 day" '+%Y'` dm=`date --date="-1 day" '+%m'` dd=`date --date="-1 day" '+%d'` # Copy to S3 /path/to/aws s3 cp /tmp/wordpress-dump.sql s3://-backup/$dy/$dm/$dd/db/ /path/to/aws s3 cp /tmp/wordpress-code.zip s3://-backup/$dy/$dm/$dd/code/
Step 6: Setup Cron Jobs to take backup periodically with the following Cron expression:
#crontab -e
# Executes backup script midnight of every day. 0 0 * * * /path/to/wordpress-s3-backup.sh
Step 7: And Set Up an S3 bucket lifecycle rule to delete older backup data. This will help you with S3 storage cost.
Also Read – Step by Step Guide to Install WordPress on AWS for free

Nirav Shah is the Director of Eternal Web Pvt Ltd, an AWS Advanced Consulting Partner and certified Odoo Partner based in the UK. With over a decade of experience in cloud computing, digital transformation, and ERP implementation, Nirav helps enterprises adopt the right technology to solve complex business challenges. He specialises in AWS infrastructure, Odoo ERP, and web development solutions for businesses across the UK and beyond.
Have queries about your project idea or concept? Please drop in your project details to discuss with our AWS Global Cloud Infrastructure service specialists and consultants.