Automate WordPress backup with Python / Fabric
Python’s Fabric module makes automation easy. This post shows how to use a Fabric script to backup a WordPress installation, but could be used for most LAMP backup situations!
Goals of this Post:
- backup SQL to /tmp
- backup WEB ROOT to /tmp
- tar SQL + site & zip
- download
- delete /tmp
The Fabric script is written for to be executed as a ‘sudo’ user. If you want to perform the actions in the script as root or another user, replace ‘sudo()’ with ‘run()’.
For help installing Fabric look at my previous post: https://www.savelono.com/linux/how-to-install-python-3-and-pip-3-for-centos-6.html
For more information on Fabric: http://www.fabfile.org/
Example:
[savelono.com] Executing task ‘backup_all’
[savelono.com] sudo: mysqldump -u savelonoadmin -p45482lonoF#m! –database savelono > savelono-$(date +%m-%d-%Y).sql
[savelono.com] out: sudo password:
[savelono.com] out:
[savelono.com] sudo: cp -rfp /var/www/html savelono-site-$(date +%m-%d-%Y)
[savelono.com] out: sudo password:
[savelono.com] out:
[savelono.com] sudo: tar -czvf savelono-site-$(date +%m-%d-%Y).tar.gz savelono-*
[savelono.com] out: sudo password:
[savelono.com] out: savelono-09-11-2017.sql
[savelono.com] out: savelono-site-09-11-2017/
[savelono.com] out: savelono-site-09-11-2017/readme.9d9380967341b4551da5eb9ee499
…
…
…
[savelono.com] out: savelono-site-09-11-2017/json2.js
[savelono.com] out: savelono-site-09-11-2017/wp-login.php
[savelono.com] out: savelono-site-09-11-2017/images
[savelono.com] out:
[savelono.com] download: /home/matt/backup/savelono-site-backups/savelono.com/savelono-site-09-11-2017.tar.gz <- /tmp/savelono-site-09-11-2017.tar.gz
[savelono.com] sudo: rm -rf /tmp/savelono*
[savelono.com] out: sudo password:
[savelono.com] out:
Done.
Disconnecting from savelono.com:7022… done.
And that’s it! Easy Python syntax for issuing remote and local shell commands through SSH. Thank you for reading! I hope you find this useful.
fabfile.py:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
#!/bin/python3 from fabric.api import * from fabric.contrib import files # WordPress Python backup tool # copyright matt birkland, Savelono.com 2017 # License: GPLv2 # # # Set the username env.user = "admin" # Set the password [NOT RECOMMENDED] env.password = "" # set host env.hosts = "myblog.com" #set port env.port = "22" #Wordpress project name wp_name = "myblog" # MySQL user mysql_user = "admin" mysql_pass = "T78fvbGTfhj!!56546" # MySQL db mysql_db = "myblog_db" webroot = "/var/www/html" # folder for backups backup_folder = "/home/john/site-backups" # wpbackup pseudo code # --------------------------- # # - configure for site # - configure for port # - configure MySQL user/pass variable # - configure web root # - configure local download directory # # ---------------- # - backup SQL to /tmp # - backup WEB ROOT to /tmp # - tar SQL + site & zip # - download # - delete /tmp #---------------------------- # backup sql def backup_mysql(): with cd("/tmp/"): sudo("mysqldump -u {} -p{} --database {} > {}-$(date +%m-%d-%Y).sql".format(mysql_user,mysql_pass,mysql_db,wp_name)) # backup WEB ROOT def backup_html(): with cd("/tmp/"): sudo("cp -rfp /var/www/html {}-site-$(date +%m-%d-%Y)".format(wp_name)) # tar & gz def backup_tar(): with cd("/tmp/"): sudo("tar -czvf {}-site-$(date +%m-%d-%Y).tar.gz {}-*".format(wp_name,wp_name)) # retrieve def backup_get(): with lcd(backup_folder): get("/tmp/{}-site*.tar.gz".format(wp_name)) def backup_del(): with cd("/tmp/"): sudo("rm -rf /tmp/{}*".format(wp_name)) def backup_all(): backup_mysql() backup_html() backup_tar() backup_get() backup_del() |
No Comments »
RSS feed for comments on this post. TrackBack URL