Skip to content

Instantly share code, notes, and snippets.

@tacone
Last active October 5, 2023 06:08
Show Gist options
  • Save tacone/2c5fe9e5ad54a95b83ad to your computer and use it in GitHub Desktop.
Save tacone/2c5fe9e5ad54a95b83ad to your computer and use it in GitHub Desktop.
Quick script to sync your dev box to a production Wordpress
#!/bin/bash
# Syncronize a local Wordpress installation with a remote one.
#
#
# Requires wp-cli.phar installed somewhere.
WP_CLI=/usr/local/bin/wp
# Remote settings
SSH_USER=root
SSH_PORT=22
SSH_HOST=example.com
DOMAIN=$SSH_HOST
DB_NAME=test
DB_USER=$SSH_USER;
DB_PASS=secret
DB_HOST=localhost
REMOTE_PATH=/var/www/example.com/public
# Local settings
LOCAL_DOMAIN=example.dev
LOCAL_DB_NAME=$DB_NAME
LOCAL_DB_USER=root
LOCAL_DB_PASS=
LOCAL_PATH=/var/www/example.dev
mysql-import () {
IMPORT_FILE=$1
DATABASE=$2
DATE=`date +%Y-%m-%d-%H-%M-%S`
BACKUP_FILE="/tmp/$DATABASE-$DATE.sql"
OPTS=${@:3}
USAGE="Usage: mysql-import [FILE] [DATABASE] [other mysql options...]"
if [[ $1 = '--help' || -z "$DATABASE" || -z "$IMPORT_FILE" ]]
then
echo $USAGE
return 1
fi
if [ ! -f "$IMPORT_FILE" ]
then
echo "File $IMPORT_FILE has not been found. Please review the usage:"
echo
echo $USAGE
return 1
fi
echo "Before being replaced current database will be backupped to:"
echo $BACKUP_FILE
echo
if [ $? -gt 0 ]
then
echo
echo "Import aborted."
return 1
fi
echo
echo "Backing up database..."
mysqldump $DATABASE ${OPTS} > $BACKUP_FILE
if [ $? -gt 0 ]
then
echo
echo "Backup failed."
return 1
fi
echo "done"
echo "dropping existing database..."
mysql ${OPTS} -e"DROP DATABASE IF EXISTS $DATABASE; CREATE DATABASE $DATABASE"
if [ $? -gt 0 ]
then
echo
echo "Error! Your database may now be in an inconsistent state."
echo "Please try again or manually import the backup file at: $BACKUP_FILE"
return 1
fi
echo "done"
echo
echo "importing the new database"
mysql ${OPTS} $DATABASE < $IMPORT_FILE
if [ $? -gt 0 ]
then
echo
echo "Error! Your database may now be in an inconsistent state."
echo "Please try again or manually import the backup file at: $BACKUP_FILE"
return 1
fi
echo "done"
}
echo
echo "---> Downloading Database dump from production, it will take a while..."
echo
ssh -p $SSH_PORT $SSH_USER@$SSH_HOST "mysqldump $DB_NAME -u$DB_USER -p$DB_PASS -h $DB_HOST | gzip -c" > /tmp/$DB_NAME.sql.gz
echo
echo "---> Unzipping"
echo
gzip -d -f /tmp/$DB_NAME.sql.gz
echo
echo "---> Importing the data into the database"
echo
mysql-import /tmp/$DB_NAME.sql $LOCAL_DB_NAME -u$LOCAL_DB_USER -p$LOCAL_DB_PASS
echo
echo "---> Configuring Wordpress for the current environment"
echo
cd $LOCAL_PATH
$WP_CLI search-replace $REMOTE_PATH $LOCAL_PATH
$WP_CLI search-replace www.$DOMAIN $LOCAL_DOMAIN
$WP_CLI search-replace $DOMAIN $LOCAL_DOMAIN
echo
echo "---> Syncing uploads"
echo
rsync -e "ssh -p$SSH_PORT" -avz $SSH_USER@$SSH_HOST:$REMOTE_PATH/wp-content/uploads/ wp-content/uploads
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment