Migrate from multisite to standalone WordPress

If you find this free website useful – why don’t you support this with a donation? It is easy…. read more ….

These are my notes relating to migrating a multisite site to a stand alone WordPress install.

I tried various options in the past, including manual file extract and database manipulation, through to using Duplicator Pro, none were easy or totally successful and often I’d resort to completely rebuilding the site and exporting / importing the data.

However I think I now have a good solution using WP CLI and https://github.com/10up/MU-Migration

I would recommend migrating first to a localhost instance, primarily so you can check, but also if you are using domain mapping on multisite you will want minimal downtime, and if your accounts are on the same host’s shared IP you wont be able to create an account with the same domain in parallel anyway.

I’ll assume
1. your multi site host has WP CLI installed
2. you have SSH access
3. you have a local dev environment, for this I’ll assume Docker instance with WP CLI installed

Extract the site

Install 10-up/MU-Migration on you multisite host

php -d memory_limit=512M "$(which wp)" package install 10up/mu-migration

I found the memory limit increase was needed

Then find your blog id

wp site list

Then simply run this command to create a zip file ( assume blog_id = 123 – change it as required )

wp  mu-migration export  all ../mysite.zip --themes --plugins --uploads --blog_id=123

Create a localhost environment

Build an empty WordPress site, in Docker is may look a bit like the following

docker exec --user root -i mysite123_php_1 php -d memory_limit=512M "$(which wp)" --allow-root package install 10up/mu-migration
docker exec --user 1000:33 -i mysite123_php_1 wp core download
docker exec --user 1000:33 -i mysite123_php_1 wp core config  --dbhost=db --dbname=wp --dbuser=wordpress --dbpass=wordpress
docker exec --user 1000:33 -i mysite123_php_1 wp db reset --yes  
docker exec --user 1000:33 -i mysite123_php_1 wp core install  --url="http://localhost:8123" --title="mysite" --admin_user="myuser" --admin_password="mypass" --admin_email="myemail@mysite.com"

Then grab the zip file from the multi-site host into a temp directory ( e.g. zip ) inside you docker files system e.g.

scp  mymultisie@mymultisite.com:~/mysite.zip zip/mysite.zip

Extract the site into Localhost

Then simply run the extract

docker exec --user 1000:33 -i mysite123_php_1 wp mu-migration import all zip/mysite.zip --new_url='http://localhost:8123'

Now check you localhost:8123 it may look good, but if images are missing it is likely you are on an older multisite and the paths to images didn’t get converted. Have a look in ‘media’ at the urls and work out what is wrong You can use wp search replace e.g.

docker exec --user 1000:33 -i mysite123_php_1 wp search-replace blogs.dir/123/files uploads

Deploy to live

Once you are happy, you can deploy to live.

Turn off the domain mapping on multisite and remove the domain / domain alias from the host.

Create a new hosting account for the single site

Migrate your localhost to live using your preferred method. Of course I use WP CLI and rsync, but that is up to you.






Leave a Reply

Your email address will not be published. Required fields are marked *