Easy Steps To Backup WordPress
While owning a wordpress site and having active content it’s mandetory to backup your site time to time to avoid any undesirable situation like hacking and malware issues where you need to restore your site back to normal. So if you have regular backups then even incase your database goes corrupt you can go back to the normal working state if you have the backups.
There are many plugins available to backup database or the files in wordpress but they also have there own over head on performance and security when you are on a shared hosting service with limited hardware resources.
Usually almost all backup plugin’s use wp-cron.php file to schedule the backups but when you care about your security and have enabled many security features on your site its observed that almost all backup plugin’s failed to do the job correctly on time and in a scheduled way.
For example BackupWordpress plugin throws below error and fails to backup
BackUpWordPress has detected a problem.wp-cron.php
is returning a403 Forbidden
response which could mean cron jobs aren't getting fired properly. BackUpWordPress relies on wp-cron to run scheduled backups. See the FAQ for more details.
So we came up with below easy simple script to backup wordpress which backups up both databases and the files in a easy way. Please follow below steps to setup and configure automatic wordpress backup for both database and files.
1. login to your hosting providers Cpanel or similar software.
2. Go to file system browser and create a folder sitebackups parallel to public_html folder to store all the backups.
3. Go inside the sitebakups folder and create 2 folders dbbackups and filesbackup for storing DB backups and files backup respectively like below:
4. For database backup create a shell script file named db.sh with below content inside the sitebackups folder.
5. Open the db.sh file in code editor and put below simple script for taking DB backups.
#!/bin/sh PATH=/usr/sbin:/sbin:/bin:/usr/bin user="db_username" pass="db_password" host="localhost" sub="$(date +"%Y-%m-%d")" dest="/home/techpaste/sitebackups/dbbackups" #mdb="$dest/db/$sub" mdb="$dest" if [ ! -d $mdb ] then mkdir -p $mdb >/dev/null 2>&1 && echo "Directory $mdb created." || echo "Error: Failed to create $mdb directory." else echo "$mdb directory already exists!" fi now="$(date +"%Y-%m-%d_%H-%M-%S")" file="" #dbs="$(mysql -u $user -h $host -p$pass -Bse 'show databases')" dbs="db_name" for db in $dbs do file="$mdb/$db.$now.sql.gz" mysqldump -u $user -h $host -p$pass --complete-insert $db | gzip -9 > $file echo "Backup $file.....DONE" done find $dest/ -maxdepth 1 -type f -mtime +7 -exec rm -f "{}" \;
Update below entries according to your websites DB name, password and hostname.
user="db_username" pass="db_password" host="localhost" dbs="db_name"
6. For websites files backup create a shell script file named files.sh with below content inside the sitebackups folder.
7. Open the files.sh file in code editor and put below simple script for taking files backups.
#!/bin/sh backup_files="/home/techpaste/public_html" dest="/home/techpaste/sitebackups/filesbackup" if [ ! -d $dest ] then mkdir -p $dest >/dev/null 2>&1 && echo "Directory $dest created." || echo "Error: Failed to create $dest directory." else echo "$dest directory already exists!" fi day="$(date +"%Y-%m-%d_%H-%M-%S")" host=$(hostname -s) archive_file="$host-$day.tgz" rm -f $dest/$archive_file tar -czf $dest/$archive_file $backup_files find $dest/ -maxdepth 1 -type f -mtime +7 -exec rm -f "{}" \;
Update below entries according to your sites requirement
backup_files=”/home/techpaste/public_html”
This is the path from which all the files will be backed up and compressed.
dest=”/home/techpaste/sitebackups/filesbackup”
This is the path where all the files backups will get stored.
8. Once above two script to backup wordpress are setup, provide execute privileges to owner to let it run in scheduled time and date.
9. Once all above steps are completed we can setup the script to backup wordpress as a scheduled job to automate the DB and files backup on scheduled time. To do this we can use the crontab or else if your hosting provider provided Cpanel then you can follow below steps to setup cron jobs for automatic backups.
9.a. Login to Cpanel with your hosting userid and password and go to Cron jobs in Advanced section.
9.b. Here you can use the common settings option to setup your cron jobs. I have requirement to backup the files once in a week so I have used below settings for the script to backup wordpress. Make sure your command and path to file is correct else cronjob will fail.
Example:
/bin/sh /home/techpaste/sitebackups/files.sh >/dev/null 2>&1
9.c. Similarly for database backups I have requirement of daily backups so I have used below cron settings, you can adjust it according to your settings for the script to backup wordpress. Make sure your command and path to file is correct else cronjob will fail.
Example:
/bin/sh /home/techpaste/sitebackups/db.sh >/dev/null 2>&1
10. Once all above settings are correctly set, you will be able to see the db and files backups in both dbbackups and filesbackup folders respectively after the scheduled cronjob run like below.
DB backups:
Files backup:
11. This completes backing up wordpress DB and Files automatically.
Notes:
1. In each script I have used the below command to remove any files older then 7 days. So if you want to keep it for longer then modify the mtime accordingly. Here +7 means any files older than 7 days.
find $dest/ -maxdepth 1 -type f -mtime +7 -exec rm -f "{}" \;
2. Both scripts works very fine and tested in our hosting account with Cpanel. Do test it out properly in your test environments before using this, we will be not held responsible for any kind of data losses or incidents reported due to this.
In case of any ©Copyright or missing credits issue please check CopyRights page for faster resolutions.
HI,
Thank you for posting the above information. It has been very useful, & adds another tool in the backup toolbox.
Be well,
Phil
Glad it helped!
I get the errors below when running the cron job. Any thoughts on how to fix the errors?
/home/XXXXXX/sitebackups/db.sh: line 21: syntax error near unexpected token `do
‘
/home/XXXXXX/sitebackups/db.sh: line 21: `do
‘
It seems the copy of code is not exact… can you recopy and put it in notepad or something to remove all formatting and try to run again and see…