Want to subscribe to topics you're interested in?
Become a Member

Wordpress auto-backup-google-drive

Discussion in 'Centmin Mod User Tutorials & Guides' started by ahmed, Jul 10, 2017.

  1. ahmed

    ahmed Member

    Feb 21, 2017
    Local Time:
    10:47 AM

    This script I adapted from
    Automatically Back up WordPress to Google Drive WP-CLI Bash Script •
    -thanks to Eva for the tips on implementing it into centmin
    -I have been using it for quiet time and it is fine, the only thing that it re-creates the same folder name every now and then(maybe it is related to clonning the vps?)
    ,anyway it is working perfect for the backups.
    Code (Text):
    #!/usr/bin/env bash
    #define local path for backups
    #define remote backup path
    #path to WordPress installations
    #date prefix
    DATEFORM=$(date +"%Y-%m-%d")
    #Days to retain
    #blue color text
    RCol='\e[0m'    # Text Reset
    # Regular           Bold                Underline           High Intensity      BoldHigh Intens     Background          High Intensity Backgrounds
    Bla='\e[0;30m';     BBla='\e[1;30m';    UBla='\e[4;30m';    IBla='\e[0;90m';    BIBla='\e[1;90m';   On_Bla='\e[40m';    On_IBla='\e[0;100m';
    Red='\e[0;31m';     BRed='\e[1;31m';    URed='\e[4;31m';    IRed='\e[0;91m';    BIRed='\e[1;91m';   On_Red='\e[41m';    On_IRed='\e[0;101m';
    Gre='\e[0;32m';     BGre='\e[1;32m';    UGre='\e[4;32m';    IGre='\e[0;92m';    BIGre='\e[1;92m';   On_Gre='\e[42m';    On_IGre='\e[0;102m';
    Yel='\e[0;33m';     BYel='\e[1;33m';    UYel='\e[4;33m';    IYel='\e[0;93m';    BIYel='\e[1;93m';   On_Yel='\e[43m';    On_IYel='\e[0;103m';
    Blu='\e[0;34m';     BBlu='\e[1;34m';    UBlu='\e[4;34m';    IBlu='\e[0;94m';    BIBlu='\e[1;94m';   On_Blu='\e[44m';    On_IBlu='\e[0;104m';
    Pur='\e[0;35m';     BPur='\e[1;35m';    UPur='\e[4;35m';    IPur='\e[0;95m';    BIPur='\e[1;95m';   On_Pur='\e[45m';    On_IPur='\e[0;105m';
    Cya='\e[0;36m';     BCya='\e[1;36m';    UCya='\e[4;36m';    ICya='\e[0;96m';    BICya='\e[1;96m';   On_Cya='\e[46m';    On_ICya='\e[0;106m';
    Whi='\e[0;37m';     BWhi='\e[1;37m';    UWhi='\e[4;37m';    IWhi='\e[0;97m';    BIWhi='\e[1;97m';   On_Whi='\e[47m';    On_IWhi='\e[0;107m';
    #calculate days as filename prefix
    DAYSKEPT=$(date +"%Y-%m-%d" -d "-$DAYSKEEP days")
    #create array of sites based on folder names
    #  commentd to debug SITELIST=$(ls $SITESTORE)
    SITELIST=($(ls -lh $SITESTORE | awk '{print $9}'))
    for s in ${SITELIST[0]}; do echo -n "backup $s: "; echo "/home/nginx/${s}/public";done
    #make sure the backup folder exists
    mkdir -p $BACKUPPATH
    #check remote backup folder exists on gdrive
      echo -e "${Blu} check remote backup folder exists on gdrive";
    BACKUPSID=$(gdrive list --no-header | grep $BACKUPPATHREM | grep dir | awk '{ print $1}')
       if [ -z "$BACKUPSID" ]; then
           gdrive mkdir $BACKUPPATHREM
           BACKUPSID=$(gdrive list --no-header | grep $BACKUPPATHREM | grep dir | awk '{ print $1}')
    #start the loop
    for s in ${SITELIST[@]}; do
       #delete old backup, get folder id and delete if exist
       echo -e "${Red} deleting old backup";
       OLDBACKUP=$(gdrive list --no-header | grep $DAYSKEPT-$s | grep dir | awk '{ print $1}')
       if [ ! -z "$OLDBACKUP" ]; then
           gdrive delete $OLDBACKUP
       # create the local backup sub folder if it doesn't exist
           echo -e "${gre} craeting local backup folder";
       if [ ! -e $BACKUPPATH/$s ]; then
           mkdir $BACKUPPATH/$s
       #entire the WordPress folder
               echo -e "${yel} getting the full wordpress path";
       cd $SITESTORE/$s/public
       #back up the WordPress folder
                   echo -e "${gre}backup wordpress folder";
       tar -czf $BACKUPPATH/$s/$DATEFORM-$s.tar.gz .
       #back up the WordPress database, compress and clean up
               echo -e "${yel} starting the wp-cli sql export";
      #/usr/bin/wp db export $BACKUPPATH/$s/$DATEFORM-$s.sql --allow-root
       cd $SITESTORE/$s/public
      sudo /usr/bin/wp db --path=$SITESTORE/$s/public export $BACKUPPATH/$s/$DATEFORM-$s.sql --allow-root --skip-themes --skip-plugins
       cat $BACKUPPATH/$s/$DATEFORM-$s.sql | gzip > $BACKUPPATH/$s/$DATEFORM-$s.sql.gz
       rm $BACKUPPATH/$s/$DATEFORM-$s.sql
       #get current folder ID
       echo -e "${red} get google drive folder list";
       SITEFOLDERID=$(gdrive list --no-header | grep $s | grep dir | awk '{ print $1}')
         sleep 10
       #create folder if doesn't exist
        echo -e "${gre} create google drive folder if not present";
       if [ -z "$SITEFOLDERID" ]; then
           gdrive mkdir --parent $BACKUPSID $s
           SITEFOLDERID=$(gdrive list --no-header | grep $s | grep dir | awk '{ print $1}')
       sleep 10
       #upload WordPress tar
       echo -e "${red} upload to google drive wordpress folder";
       gdrive upload --parent $SITEFOLDERID --delete $BACKUPPATH/$s/$DATEFORM-$s.tar.gz
       sleep 10
       #upload wordpress database
           echo -e "${gre} upload to google drive wordpress DB";
       gdrive upload --parent $SITEFOLDERID --delete $BACKUPPATH/$s/$DATEFORM-$s.sql.gz
    #Fix permissions
    #sudo chown -R www-data:www-data $SITESTORE
    #sudo find $SITESTORE -type f -exec chmod 644 {} +
    #sudo find $SITESTORE -type d -exec chmod 755 {} +
    • Informative Informative x 1
  2. eva2000

    eva2000 Administrator Staff Member

    May 24, 2014
    Brisbane, Australia
    Local Time:
    6:47 PM
    Nginx 1.13.x
    MariaDB 5.5
    Nice thanks for sharing, you might want to sign up for a github.com account and put the script into a gist.github.com file so you can link to it instead :)