The blog you are currently on used to be hosted on some Virtual Private Server. My hosting provider decided to quit the business and I had to leave. He kindly suggested that I look at AWS Lightsail as a migration option. I did, and this is where this blog is now hosted.
This blog is not new. It already had content. It also has customisations like plugins and themes. This post will focus on how to export your content and customisations from a former blog and import them on Lightsail. Its accuracy may vary depending on the level of customisation your blog has. Command line (CLI) experience is required.
If you have not already, you can follow the official Quick start guide: WordPress on Amazon Lightsail to get the basic setup in place. Make sure to pick a Database Management System (DBMS) that matches the one you will be exporting from. Once you have confirmed that (1) the DNS setup is right by reaching the page with a browser and (2) you can log into the machine with SSH, you are good to proceed.
Matching WordPress Versions
Ideally, your existing blog and Lightsail WordPress versions should match. The most straight forward path it to log into both of them and run the updates to be on the latest.
Exporting From Former Blog
From your existing blog, you will need to export 2 things: the database (DB), and the wp-content
directory.
For the database, you can export it with a single command. If you are using mysql, the command will be something like
mysqldump -u DB_USER -p DB_NAME > blog.sql
If your database provider is mariadb
or postgres
, there are similar commands to do that.
To create an archive of the wp-content
directory, go to the root of your former WordPress directory and run
tar -zcvf wp-content.tar.gz wp-content
Then you can use scp
to copy both blog.sql
and wp-content.tar.gz
locally.
scp user@host:path-to-wp-content.tar.gz .
scp user@host:path-to-blog.sql .
Importing To Lightsail
WARNING: Be careful. Do at your own risk. Errors can break the Lightsail deployment.
Importing into Lightsail is not as direct as it could be because some permissions are lacking. We will work around them.
The DB
For the database, due to permissions, we cannot simply create a new one. So, we will need to operate with the one we have.
Finding the DB Credentials
To find the DB credentials, log with SSH into the Lightsail instance. Then run
vim stack/wordpress/wp-config.php
Search for DB_NAME
, DB_USER
and DB_PASSWORD
to get the associated values.
Renaming the Lightsail WordPress Tables
If you know your former WordPress DB tables used a non default prefix, you can skip this step.
Otherwise, this step is important to avoid collisions with the tables you are going to import. Renaming the existing tables also means you can restore them if things go wrong.
On the Lightsail instance, you can copy paste the following into a script named rename_wp_tables.sql
.
ALTER TABLE wp_commentmeta RENAME back_wp_commentmeta;
ALTER TABLE wp_comments RENAME back_wp_comments;
ALTER TABLE wp_links RENAME back_wp_links;
ALTER TABLE wp_options RENAME back_wp_options;
ALTER TABLE wp_postmeta RENAME back_wp_postmeta;
ALTER TABLE wp_posts RENAME back_wp_posts;
ALTER TABLE wp_term_relationships RENAME back_wp_term_relationships;
ALTER TABLE wp_term_taxonomy RENAME back_wp_term_taxonomy;
ALTER TABLE wp_termmeta RENAME back_wp_termmeta;
ALTER TABLE wp_terms RENAME back_wp_terms;
ALTER TABLE wp_usermeta RENAME back_wp_usermeta;
ALTER TABLE wp_users RENAME back_wp_users;
Then run it.
mariadb -u DB_USER -p DB_NAME < rename_wp_tables.sql
Importing the DB
From your local environment, upload your blog.sql
file to the Lightsail instance.
scp blog.sql user@host:.
Then, from the Lightsail instance, import it.
mariadb -u DB_USER -p DB_NAME < blog.sql
Maybe: Update wp-config.php
If your imported table names have the wp_
prefix, you can skip this step. Otherwise, run
vim stack/wordpress/wp-config.php
Search for table_prefix
and set it to your prefix value.
Note that to use the tables that were renamed earlier, you can set that value to back_wp_
.
The Customisations
From your local environment, copy your wp-content.tar.gz
archive over the the Lightsail.
scp wp-content.tar.gz user@host:.
Log into the Lightsail instance and extract it here. (Due to the permissions, we cannot simply extract it in the right location.)
tar -xvf wp-content.tar.gz
Backup the content of the Lightsail wp-content
directory. If things go wrong you can restore them.
cd stack/wordpress/wp-content
mv languages{,BACK}
mv plugins{,BACK}
mv themes{,BACK}
Then move these 4 directories from your archive to the current location. (Note that uploads
does not need to be backed up as it starts as an empty directory.)
mv ~/wp-content/languages .
mv ~/wp-content/plugins .
mv ~/wp-content/themes .
mv ~/wp-content/uploads .
Now, the blog will work, but updates won’t. That is because the files owner do not match the one used to run the blog and it will not be able to overwrite them. If you are still using the bitnami
default user, that can be fixed by running
sudo chown -R bitnami:daemon languages
sudo chown -R bitnami:daemon plugins
sudo chown -R bitnami:daemon themes
sudo chown -R bitnami:daemon uploads
Wrap Up
It should work now. Head to the Lightsail WordPress /wp-admin
page and log in with your former credentials, not the Lightsail ones. The Lightsail credentials were valid for the version of the blog that is in the backup tables / the ones with a different prefix. At this point it’s up to you to keep or delete these tables as well as the backup files in wp-content
.
Should you be curious, I’m using the basic Lightsail configuration currently at 3.50 USD per month.
- 512 MB RAM
- 2 vCPUs
- 20 GB SSD
- 1TB Transfer
Given I’ve got at most 100 views per day, this is more than enough.