Moving WordPress sites between host providers is a fairly straightforward process. You generate a backup, import the backup, and reconfigure DNS to the new provider. With that said, doing it manually can take up a lot of time as there are lots of small steps in-between. The following is a collection of my own processes for moving a WordPress site from WP Engine to Kinsta. With these steps I can do a complete migration in about 10 minutes. That includes some particular large sites, as the file transfers happen directly between servers.
Go to https://my.kinsta.com/sites and select add site.
Next upload an SSH key to enable a password-free SSH for the new Kinsta account.
cat ~/.ssh/id_rsa.pub | ssh user@XXX.XXX.XXX.XXX -p XXXXX 'cat >> .ssh/authorized_keys'
Next, SSH login into kinsta ssh user@XXX.XXX.XXX.XXX -p XXXXX
and paste the following block of script into the command line. The script will ask for three things: Kinsta database name, Kinsta database password, and WP Engine backup snapshot. On the WP Engine panel make a snapshot and download. Copy the Amazon S3 snapshot link from email and paste when prompted.
function anchor_prep { mkdir ~/scripts read -p $'\e[31mDatabase name\e[0m: ' dbname read -p $'\e[31mDatabase password\e[0m: ' dbpw echo -e "dbpw=$dbpw\ndbuser=$dbname\ndbname=$dbname\nmysqldump --user=\$dbuser --password=\$dbpw --no-create-db --databases \$dbname > ~/public/wp-content/mysql.sql" > ~/scripts/db_backup.sh chmod +x ~/scripts/db_backup.sh mkdir ~/downloads cd ~/downloads read -p $'\e[31mWP Engine download link\e[0m: ' downloadlink wget $downloadlink filename=`ls site-*` unzip $filename rm -f $filename rm -rf ~/public/wp-content/ # Removes current wp-content mv ~/downloads/wp-content/ ~/public/wp-content/ # Restore wp-content from snapshot rm -rf ~/public/wp-content/mu-plugins rm -f ~/public/wp-content/advanced-cache.php rm -f ~/public/wp-content/object-cache.php cd ~/public/ find . -type d -exec chmod 755 {} \; find . -type f -exec chmod 644 {} \; ~/scripts/db_backup.sh chmod 600 ~/public/wp-content/mysql.sql } anchor_prep
This will prep the Kinsta site by creating a new script for running database backups, downloading the WP Engine snapshot, removing a few WP Engine specific things and resetting permissions. There are a few other things to take care of before going live.
- Add domain mappings in Kinsta.
- Install and activate a coming soon plugin on WP Engine.
- Flush WP Engine cache. This will prevent any changes while switching over.
- On WP Engine, open PHPMyAdmin and export all tables with the drop tables option checked.
- Upload your database backup to download folder and run the following:
mysql --user=$dbname --password=$dbpw $dbname < ~/downloads/wp_databasename.sql
cd ~/public/
wp search-replace https://anchor.host https://anchor.host --all-tables ## Turns off SSL
rm -rf ~/downloads
mkdir ~/downloads
- Switch DNS to new Kinsta IP
- Resync uploads directories incrementally using via Transmit
- Apply new Let’s Encrypt SSLs within Kinsta and reapply https urls by running
wp search-replace https://anchor.host https://anchor.host --all-tables ## Turns on SSL