How to Use Python to Create a WordPress Backup

Use Python to Backup WordPress files

  • upload the wpbackup file to the WordPress install that you want to backups
  • I recommend placing this just outside the website root or public directory
  • run the “python wpbackup” command.

How to run

$ python wpbackup

Assumptions

  • The WordPress Installation is in the public directory
  • wp-content is in the public directory
  • website root, Python 2.7 is installed

backups will be saved in ‘public/wp-content/py-backup’ we will attempt to create the dir if it does not exist,

you can change this by updating the backup_dir var, Sitename var should be updated to match your website.

full Python code: https://github.com/devuri/python-wpbackup


# Assumptions
#
# The WordPress Installation is in the public directory
# wp-content is in the public directory website root
# Python 2.7 is installed
#
# backups will be saved in 'public/wp-content/py-backup'
# we will attempt to create the dir if it does not exist
# you can change this by updating the backup_dir var
# sitename var should be updated to match your website
#
# how to run
# $ python wpbackup

import os
import subprocess
import uuid
from time import gmtime, strftime

# main class
class Backup(object):

    # setup
    sitename    = "urielwilson"
    wp_dir      = "public"
    backup_dir  = "public/wp-content/py-backup"
    bakuptime   = strftime("%Y-%m-%d", gmtime())
    backupfile  = sitename + "-backup-" + bakuptime

    # init
    def __init__(self):
        self.site   = self.sitename
        self.dir    = self.backup_dir
        self.wp     = self.wp_dir
        self.time   = self.bakuptime
        self.backup = self.backupfile

    def run(self):
        self.do_backup()

    # create dir
    def create_dir(self,dir):
        try:
            os.makedirs(dir)
        except OSError as err:
            if err.errno == errno.EEXIST:
                print("error creating directory")
            else:
                print("directory has been created")

    def do_backup(self):
        print("Zip file for public")
        # create backup dir if we dont have one
        if not os.path.exists(self.dir):
            self.create_dir(self.dir)

        print("Lets Zip the public ")
        #zip_backup = 'zip -r sitebackup public'
        zip_backup = "zip -r " + self.backup + " " + self.wp
        subprocess.call(zip_backup, shell=True)

        print("Okay Lets move the Zip backup to the wp-content dir")
        #move_backup = "mv sitebackup.zip public/wp-content/py-backup"
        move_backup = "mv " + self.backup + ".zip " + self.backup_dir
        subprocess.call(move_backup, shell=True)

        self.backup_completed()

    # complete success
    def backup_completed(self):
        print("The Backup has completed successfully")


# ok lets do the backup
def main():
    backup = Backup()
    backup.run()

if __name__ == '__main__':
    main()