Skip to content

Instantly share code, notes, and snippets.

@joeyyax
Last active December 25, 2015 17:39
Show Gist options
  • Save joeyyax/7014558 to your computer and use it in GitHub Desktop.
Save joeyyax/7014558 to your computer and use it in GitHub Desktop.
Sync Production assets and db to local MAMP environment. Other site files are to be held in GIT repo and pull in separately.
#! /bin/sh/
# Setup for MAMP
echo
if [ -d /Applications/MAMP/Library/bin/ ]; then
echo "You're using MAMP. Cool. Gonna run some tests... ";
# Check if mysqldump is in /usr/local/bin/. If not, link 'em.
if [ ! -f /usr/local/bin/mysqldump ]; then
echo "mysqldump link doesn't exist. Creating link to MAMP.";
sudo ln -s /Applications/MAMP/Library/bin/mysql /usr/local/bin/mysql;
fi
# Check if mysql is in /usr/local/bin/. If not, link 'em.
if [ ! -f /usr/local/bin/mysql ]; then
echo "mysql link doesn't exist. Creating link to MAMP.";
sudo ln -s /Applications/MAMP/Library/bin/mysql /usr/local/bin/mysql;
fi
fi
echo "-> All good! Moving on...";
echo
# Temporary directories (no trailing slashes)
LOCAL_TEMP_DIR=
REMOTE_TEMP_DIR=/var/www/...
DATE=$(date +"%F.%T");
# Files Directories (no trailing slashes)
LOCAL_DIR=~/Sites/...
REMOTE_DIR=/var/www/...
# Database Info
LOCAL_DB_NAME='';
LOCAL_DB_USER='root';
LOCAL_DB_PASS='root';
REMOTE_SSH_ADDR='';
REMOTE_SSH_USER='';
REMOTE_SSH_PASS=''; #leave blank if you're using ssh key to sign into server
REMOTE_DB_NAME='';
REMOTE_DB_USER='';
REMOTE_DB_PASS='';
# make temporary directory
echo "Preparing backup and sync...";
mkdir $LOCAL_TEMP_DIR;
cd $LOCAL_TEMP_DIR;
# sync files to staging/backup server
echo "Syncing assets from production server";
rsync -avzhr -e ssh $REMOTE_SSH_USER@$REMOTE_SSH_ADDR:$REMOTE_DIR/ $LOCAL_DIR/;
echo "-> Got 'em!";
echo
# Connect to remote server, drop tables in db, import latest db
echo "Exporting production database...";
ssh $REMOTE_SSH_USER@$REMOTE_SSH_ADDR "mkdir -p $REMOTE_TEMP_DIR/; cd $REMOTE_TEMP_DIR; mysqldump --quick -u $REMOTE_DB_USER -p$REMOTE_DB_PASS --add-drop-table --no-data $REMOTE_DB_NAME > $REMOTE_TEMP_DIR/db.$DATE.sql; exit;"
echo "Downloading production database...";
scp $REMOTE_SSH_USER@$REMOTE_SSH_ADDR:$REMOTE_TEMP_DIR/db.$DATE.sql $LOCAL_TEMP_DIR/db.$DATE.sql;
echo "Cleaning up production temp directory...";
ssh $REMOTE_SSH_USER@$REMOTE_SSH_ADDR "rm -rf $REMOTE_TEMP_DIR/; exit;";
echo "Importing production database into dev environment...";
mysql -u $LOCAL_DB_USER -p$LOCAL_DB_PASS $LOCAL_DB_NAME < $LOCAL_TEMP_DIR/db.$DATE.sql;
echo "-> Imported!"
echo
# log sync
echo "Sync from production completed: $(date +"%F %T");" >> $LOCAL_TEMP_DIR/../sync.log;
echo
# delete temp directory
echo "Cleaning up...";
cd $LOCAL_TEMP_DIR;
rm -rf $LOCAL_TEMP_DIR;
echo "-> Done!";
echo
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment