July 30, 2020

Migrate wordpress command line

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 wp-config.php.
“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

wp-config.php

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/

Fix wp-config.php

The last step is to fix the data in wp-config.php

You will have to add the right information in the fields

define('DB_NAME', 'wordpress');

/** MySQL database username */
define('DB_USER', 'wordpressuser');

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 wp-config.php.old

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 wp-config.php accordingly:

define('WP_SITEURL', 'http://astro-gr.org');
define('WP_HOME', 'http://astro-gr.org');

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.