Skip to content

Instantly share code, notes, and snippets.

@brianjking
Forked from jjeaton/site_sync.sh
Last active August 29, 2015 14:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save brianjking/5d5f7e796cc825060f3b to your computer and use it in GitHub Desktop.
Save brianjking/5d5f7e796cc825060f3b to your computer and use it in GitHub Desktop.
Bash script to push/pull a WordPress site's files and MySQL DB between production and a local environment
#!/bin/sh
# Just an abbreviation for creating filenames
SHORT_NAME=je
# hostname as configred in ~/.ssh/config
SERVER_NAME=je
# Database name in production
DB_NAME=XXXX
# Database user in production
DB_USER=XXXX
# No DB_PASS is used because the server had a ~/.my.cnf file configured with the
# DB credentials
# DB_PASS
# Date to append to filename
DATESTR=`date +%Y-%m-%d_%H%M`
# Production path prefix
PROD_PREFIX=/home
# Production DB export file path
PROD_DB_PATH=${PROD_PREFIX}/private/backups/${SHORT_NAME}_db-${DATESTR}.sql.bz2
# Production files tarball file path
PROD_FILES_PATH=${PROD_PREFIX}/private/backups/${SHORT_NAME}_files-${DATESTR}.tar.bz2
# Production web root
PROD_SITE_PATH=${PROD_PREFIX}/public
# Local Database name
DEV_DB_NAME=XXXX
# Local Database user
DEV_DB_USER=XXXX
# Local Database pass
DEV_DB_PASS=XXXX
# Local Database Filename fragment (not sure what I was doing here)
DEV_DB_FILE=DEV_${SHORT_NAME}
# Dev path prefix
DEV_PREFIX=/Users/josh/Sites/josheaton
# Dev DB export file path
DEV_DB_PATH=${DEV_PREFIX}/db/${DEV_DB_FILE}_db-${DATESTR}.sql.bz2
# Dev DB files tarball file path
DEV_FILES_PATH=${DEV_PREFIX}/files/${DEV_DB_FILE}_files-${DATESTR}.tar.bz2
if [ $# -lt 1 ]
then
echo "Usage : $0 [up/down]"
exit
fi
case "$1" in
up)
echo "Starting db-sync: DEV to PRD"
# Export DEV db
mysqldump -u ${DEV_DB_USER} -h localhost -p${DEV_DB_PASS} ${DEV_DB_NAME} | bzip2 -9 > $DEV_DB_PATH
echo "Exported DEV db"
# Sync DEV db to PRD backups folder
rsync -avz -e ssh $DEV_DB_PATH $SERVER_NAME:${PROD_PREFIX}/private/backups/
echo "Rsynced DEV db to PRD"
# Take a backup of PRD db on server
ssh $SERVER_NAME "mysqldump ${DB_NAME} | bzip2 -9 > ${PROD_DB_PATH}"
RUN_STATUS=$?
if [ $RUN_STATUS -ne 0 ]
then
echo "Error backing up PRD db."
exit $RUN_STATUS
else
echo "Backed up PRD db."
fi
# Load DEV db into PRD
ssh $SERVER_NAME "bunzip2 < ${PROD_PREFIX}/private/backups/$(basename ${DEV_DB_PATH}) | mysql ${DB_NAME}"
RUN_STATUS=$?
if [ $RUN_STATUS -ne 0 ]
then
echo "Error importing db into PRD."
exit $RUN_STATUS
else
echo "Imported database into PRD."
fi
# Sync uploads folder
echo -n "Sync uploads [y/n]? "
read CONFIRM
if [[ "$CONFIRM" == "y" ]]; then
rsync -avz ${DEV_PREFIX}/www/shared/uploads/* je:/home/public/content/uploads/
fi
;;
down)
echo "Starting db-sync: PRD to DEV"
# Backup site database
ssh $SERVER_NAME "mysqldump ${DB_NAME} | bzip2 -9 > ${PROD_DB_PATH}"
RUN_STATUS=$?
if [ $RUN_STATUS -ne 0 ]
then
echo "Error syncing database backup."
exit $RUN_STATUS
else
echo "Synced database backup."
fi
# rsync the db and files backups to the temp dir
rsync -avz -e ssh $SERVER_NAME:$PROD_DB_PATH ${DEV_PREFIX}/db/
RUN_STATUS=$?
if [ $RUN_STATUS -ne 0 ]
then
echo "Error syncing database backup."
exit $RUN_STATUS
else
echo "Synced database backup."
fi
# backup DEV db
mysqldump -u ${DEV_DB_USER} -h localhost -p${DEV_DB_PASS} ${DEV_DB_NAME} | bzip2 -9 > $DEV_DB_PATH
# Load up live db into DEV
bunzip2 < ${DEV_PREFIX}/db/$(basename ${PROD_DB_PATH}) | mysql -u ${DEV_DB_USER} -h localhost -p${DEV_DB_PASS} ${DEV_DB_NAME}
# Sync uploads folder
echo -n "Sync uploads [y/n]? "
read CONFIRM
if [[ "$CONFIRM" == "y" ]]; then
rsync -avz je:/home/public/content/uploads/* ${DEV_PREFIX}/www/shared/uploads/
fi
;;
*)
echo "Invalid parameter $1"
;;
esac
exit 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment