Introduction

I recently have to perform a migration from iPage to Bluehost. The reason: loading my pages on iPage seems to be slow, and I have experienced several downtime from iPage which motivated me to move. After some research, I choose Bluehost, which seems to have a reputation of being fast and reliable. The price is reasonable: 4 dollars per month for 3 years = 144 US dollars. However, after I have done the migration, I did a few speed performance tests between iPage and Bluehost, but the results are not so straight forward. Depending on whether or not it is the first test of repeated test, the loading speed differs significantly from 1.x seconds to more than 20 seconds from different testing sites.

imageimageimage

First test on iPage server using https://browsermob.com/free-website-performance-test/ (15.88 seconds). Second test on iPage (2.41 seconds)

Average tests on iPage server using http://site-perf.com (13.2 seconds)

image_thumb1

image_thumb31

Bluehost server (2.13 and 12.3 seconds). Bluehost seems to be slightly faster. However, the most important thing is that I have done this and learned all the tricks to migrate site from one server to the other. Below are the exact steps.

Step 1: Backup all your databases

For this step, http://www.jealousbrother.com/blog/transfer-wordpress-blog-serverhost/ explains it very well. I won’t repeat it here. The important thing is to backup all your databases. In my case, I have two wordpress sites (www.shengdongzhao.com, www.shengdongzhao.com/courses), one WikkaWiki site (www.shengdongzhao.com/WikkaWiki), and one Moodles site (www.shengdongzhao.com/HCI_courses). Therefore, I performed four exports.

image

Step 2: Import all SQL files to Bluehost’s database

The import is mostly straight-forward, but with one minor issue to solve. Bluehost has a special heading for the database names, and so does iPage. The naming convention between the two sites is not compatible.  So you need to modify the naming so that Bluehost can accept the import, see pic below. The comments are the original exported text from iPage. They need to be changed to fit Bluehost’s naming convention.  You can find out the naming convention by click on the “MySQL Databases” icon from the cPanel (see pic below).

imageimage

You can also follow step#5 from http://www.jealousbrother.com/blog/transfer-wordpress-blog-serverhost/ to do this.

Step 3: Create database users and passwords on Bluehost and assign them to each database

This step is again straight forward. It is done under the “MySQL Databases” icon from the cPanel (see pic above).

Step 4: Transfer files from iPage to Bluehost using FTP

This step is straight forward, but tricky. One way is to download all files from iPage to your local machine using FTP and then upload all of them to Bluehost. This can be done by following Step#2 from http://www.jealousbrother.com/blog/transfer-wordpress-blog-serverhost/. However, this can be very slow if you don’t have a super fast network connection.

Here is some data. To download 3631 files of 867M takes roughly 8 hours with a download speed of 30 KB/s. This is only for download, uploading can be more painful and slower, so the total time for both downloading and uploading will take more than 20 hours. If some network problems happen during this time, you may have to do it repeatedly, which can be a huge pain.

Luckily, there is a way to run it much faster.

You can apply for SSH access on Bluehost. Once you have SSH access on Bluehost, you will be able to perform ftp directly on Bluehost’s server, which is running much faster than your local machine and also has a much better network connection. You also only need to do it once, not need to upload the files again. Here is how much time it takes me to download the same amount of files directly using Bluehost’s server: Downloaded: 3631 files, 867M in 1h 5m 44s (225 KB/s).

Here is the instruction of how to use SSH on bluehost: https://my.bluehost.com/cgi/help/301. Before you can use it, you need to enable it first. Here is the instruction: https://my.bluehost.com/cgi/help/180#enable. I emailed them my credit card’s photos, and it is enabled within couple of hours.

To copy all the files recursively from one server to the other, you use the following command:

wget -r ftp://username:password@1.2.3.4/dir/*

If you have special characters in your password,  you need to place "\" in front of each special character.

Step 5: Modify wp-config.php for each of your wordpress sites

This step is the same as step#4 from http://www.jealousbrother.com/blog/transfer-wordpress-blog-serverhost/. Just follow the instruction there and you will be fine.

Step 5.1 Modification for moodles

You need to modify the following options in config.php as follows. The red arrows in the picture indicates the lines you need to modify in order to make moodles work properly.

image

Step 5.2 Modification for WikkaWiki

In addition to modify the wikka.config.php file with the database information, you also need to make sure it has the proper .htaccess file in the folder with the following content.

### STOP REFERRER SPAM
SetEnvIfNoCase Referer ".*(adultsite|picturesplace|learnthebiz|pi-o|erotica|ghettoinc|port5|bulk-email|camgirls|paris-hilton|modelos|kredit|handyflirt24|versicherung|wwww|erotower|krank|x-1000|flirtnet|blowjob|agedwife|in-the-vip|boysfirsttime|milf|captain-stabbin|tranny|Kontakt|erotik|fetish|frauen|hardcore|fick|krankenversicherung|jinnan-cross|8thstreet|xxx|XXX|ficken|fuck).*" BadReferrer

order deny,allow
deny from env=BadReferrer

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*/[^\./]*[^/])$ $1/
RewriteRule ^(.*)$ wikka.php?wakka=$1 [QSA,L]
</IfModule>

 

Finally, check your results by switching back and forth between two servers using one domain name

To check your results, you need to switch between the two servers. If you only have one domain name, which is my case, it can be a big headache if you don’t know how to do it properly.

Below is the proper and fast way to do it. First, make sure both servers are alive, and you get the ip address assigned to your website from both servers.

In my case, iPage assign me the ip address: 66.96.147.109. Bluehost assign me the ip address: 66.147.242.180. This information can be found in the emails you get from Bluehost when you sign up, and from the control panel webpage you login in iPage.com.

To check the website from a particular server, you first need to point its name server to that host (either to iPage or Bluehost).  For example, in the picture below, I pointed the name servers to bluehost.

image

Then, you need to change the DNS mapping on your computer. Although the ip address for your domain name has been changed outside, your computer may not know it, and it takes a while for the change to take effect around the world. To enforce your computer to now the change immediately, you need to perform the following two tasks.

  1. Change the etc/host file to map the domain name to the ip address of your choice. For example, for the ipage server, I use "66.96.147.109 www.shengdongzhao.com". This page has detailed instruction on how to change it on both Mac and Windows: http://kb.mediatemple.net/questions/61/How+can+I+test%7B47%7Dpreview+my+website+before+switching+DNS%3F#gs/windows. To change it on windows, you need administrative rights. See http://support.microsoft.com/kb/923947 on how to do it.
  2. Once that’s done, start a console in your computer by "start->run->cmd", and type "ipconfig /flushdns’ to flush the DNS cache on your computer. Now, you are done. You can simply type your domain name into your favorite browser and see the correct website show up.

 

Additional Tips

This may look simple, but there are a lot of places that can go wrong. Below are some of the mistakes I made. Hopefully this can be helpful for you.

    1. There are a lot of alternative ways to move your sites. Some of them sound promising, such as the plugins like WordPress move, WordPress import, etc. However, they are useless and a big waste of time. All of them are not complete solutions. They only migrate the posts and pages from the database, but they don’t handle attachments and plugins well. You have to spend a lot of additional time to tweak you site, so don’t use them.
    2. WordPress has a debugging mode, which can be turned on by setting the debug to be true in the wp-config.php file. When things go wrong, it’s useful. After I finished ftp files from one server to the other for two of my wordpress sites, one of them works fine, but the other one is not working at all. I get the error message: [an error occurred while processing this directive], which does not give me any information on what went wrong. After you turn on the debugging mode, it will show additional information on where it went wrong. I found that some files are missing, so I performed another ftp get to retrieve these files to fix this problem.
    3. Finally, a few useful commands on UNIX:
      1. mv –i  dir/* newdir (move content from one directory to another)
      2. under the ftp protocol, one can perform recursive get by using the following set of commands.
      3. cd /dir

             prompt

             interactive mode off

             mget *

Written by Shengdong Zhao

Shen is an Associate Professor in the Computer Science Department, National University of Singapore (NUS). He is the founding director of the NUS-HCI Lab, specializing in research and innovation in the area of human computer interaction.