Recently I had to “migrate” my wordpress web page and after believing in the magic of plugins which do everything automagically, I have been confronted with the truth: It is all a big, ugly lie. It either does not work, or there is a bug, or you have to make a backup of your web page in a strange format, download it and upload it, or you have to pay in the critical moment for a special “feature”, after one or two hours of fight.
This is the price to pay for not doing the things in The Only Way: The command line.
In the old server
Dump your database
$ mysqldump -u root -p wordpress --add-drop-table > backup.sql
-p means you will prompted for the password
-u root because, for some reason,
mysqldump did not accept the database buser I had defined in
“wordpress” was the name of the database
You will find the information about the name of the database, the database user, password and hostname in the first lines of
This is, by far, the best way to dump your database. Forget about
phpmyadmin and such things.
After that, simply make a tar.gz of all your wp site.
$ tar cvfz web.tar.gz web/
This two files (backup.sql and web.tar.gz) are a full backup of your web site.
In the new server
I am paying for a webhosting thing which installs a wp template. Allow the thing to do its thing. Require
ssh access. This is key.
Log in on to your new virtual machine with ssh, and first create a database. Probably the web hosting will have created automatically a database. To find out the name of the database, either check that
phpmyadmin or simply check the file
wp-config.php. It is a good idea to make a copy of it, because it contains information that we will need later about the database name etc,
$ cp wp-config.php wp-config.php.old
Overwrite the database with the old one, but use the new information about database name, database user and hostname:
$ mysql -h "fg345745435.hosting-data.ie" -u dbusername8762345 dbt43567653 -p < backup.sql
where, of course, the hostname after
-h is made up, as well as the username, the value after
-u and, for some reason, I had to add the name of the database (dbt43567653) before the
-p flag for the password.
After this is done, simple rewrite ALL of the wp template with the old contents.
$ mv web/* mynewsite/
The last step is to fix the data in
You will have to add the right information in the fields
/** MySQL database username */
etc. As you can guess,
wordpress is, in our case, dbt43567653, and
wordpressuser dbusername8762345. This information was included in the file
wp-config.php before we overwrote it. That's why we kept
Fix the DNS
Again, in the file
wp-config.php you will have to tell wordpress what URL in the DNS are pointing to your new webpage.
The webpage created by your hosting system will have a random name, such as 2345686573453.online-pages.ie or such. You want 2345686573453.online-pages.ie to point to the domain you bought which, in my case, as you can guess, is astro-gr.org. So change
After that, you will have to tell your DNS provider, where you bought the domain, that the new URL to which your domain must point to is 5686573453.online-pages.ie.
The changes will show up first in the US, then slowly progress towards Europe etc. It can take some minutes, up to one hour or so.