Skip to content

Instantly share code, notes, and snippets.

@sahidursuman
Forked from joeyyax/sync-production-to-local.sh
Last active August 29, 2015 14:07
Show Gist options
  • Save sahidursuman/667c0f703b52e244eff6 to your computer and use it in GitHub Desktop.
Save sahidursuman/667c0f703b52e244eff6 to your computer and use it in GitHub Desktop.
#! /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