-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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