Migrating a WordPress site can be something of a scary challenge, but
we do it a lot, and we’ve become used to it. There are many good
reasons to move a site – for example, you might set one up in a
subfolder, and decide to move WP to the root. Or perhaps you’ve built a
site on localhost and now need to put it on a live server.
If you do it incorrectly, you stand to lose all your widget settings,
some file links and so on. This wasn’t a problem with ‘classic WP’
years ago, but these days there are many many paths stored away in the
database, in various forms, and catching them all can be somewhat
tricky.
Here I show you the steps we take moving a localhost site to a live
domain. We’re using WPMU which is running the BuddyPress plugin suite.
The Local Install
Here’s our site on our localhost. As you can see, it’s pretty basic,
but everything’s there that needs to be there – we know all elements of
the install works, and now we want to pop it onto a live server. In
this lesson, we’re going to use FileZilla and ftp the files across from
our local install.
Copying the Files
On the left you can see we’ve navigated to our local filesystem for
this install. On the right, we’re connected to the server. There are
already files there, because we have an old install running. You should
delete all the files and replace them with the new ones in this case,
but if you are replacing a site do make sure you have a copy of
everything. Merging sites is much harder than migrating – and way
beyond the scope of this tutorial.
So – select and drag all the files from one side, to the other.
Moving the Database
Our preferred tool for administering databases is mySQL
Administrator. A free tool that really simplifies a lot of DB Admin
tasks. Use this to take a backup of your database. You’ll need to
create a new backup project.
Click Backup
Create New Project
Select the Schema you’ve been using
Click
to move it across, selecting ALL tables (unless you have multiple
installs in one database, in which case, just the tables for the install
you’re interested in)
Give it a name
Save Project
Execute the Backup
Backup Done
You should now have a backup.
Because the server we’re using doesn’t allow connections on Port
3306, we’re going to use phpMyAdmin there. This is no problem at all,
but if you were using mySQL administrator you could use the restore
tools there. If you’re doing this kind of project you should really
know how to use these tools anyway – I’m only explaining these steps for
completeness sake and showing you a migration I’m doing myself that’s
likely to be typical.
Editing the SQL
A database backup is done simply as a big set of SQL statements that
you can run. If you’re migrating to a different database you’ll need to
edit the CREATE and USE statement to tell it which database to use.
Be very careful with this database dump by the way – database dumps
are a very easy way for hackers to get into your system and find out
lots of information you’d rather not give away.
Importing The Database
Now you need to Import the Database. We’re using phpMyAdmin for
this. If you have any tables there already, it’s probably best to drop
them. All of them. Like I say, if you’re merging you’re going to need
more help than this guide can provide.
Click on the Import tab
Select
your file (if it’s bigger than your sever’s upload limit then you’ll
have to speak to your admin guys about how to do this.
Press the Go button!
Once the import has run successfully you should see a message saying
something like "Import has been successfully finished, 95 queries
executed." – and it can be an awful lot more than 95 queries! It can
also take quite some time. If you need to handle large datasets it’s
far easier to use the mySQL Administrator tools – phpMyAdmin can get
clunky.
Visit the Site
If you try to visit the new uploaded site at the moment you’ll get a Fatal Error because all sorts of things are confused.
You need to change the wp-config.php file.
Changing wp-config.php DB Settings
Change 1, 2, and 3 to match your server’s database settings.
Change 4 to the appropriate path. Most installs are in the root directory, so that would mean $base = ‘/’;
Change 5 to the domain name in use.
Change 6 from ‘/buddypress.11/’ (or whatever your local path is) to
the new path, like in 4, so in most cases that will be ‘/’ also.
Search & Replace on the Database
You now need to run a search and replace on the database – including
all incidences of code within serialised PHP strings. There is an
excellent and free utility written by Interconnect IT, called the Safe Search and Replace Tool.
I can’t emphasise enough that it’s important to handle serialised PHP
correctly. If you don’t, then settings will go missing, fields will
get corrupted, and your site runs a severe chance of not working on the
new location. It’s a pain, but it’s important.
So, download the program, place it in your blog’s root folder and then run it by visiting the appropriate URL.
If you’re getting confused at this point, perhaps you shouldn’t run
the program. Just saying, because it can cause plenty of damage!
Running the Script
Simply visit http://www.example.com/searchreplacedb.php in your
browser to fire off the script. This will run. If you experience a
time-out, or too much output, you may need to go into the script and
remove any echos that are slowing it down. I’ll probably comment this
out in due course anyway, but for diagnostics purposes I’ve left it.
Once run, you should see something like the above at the bottom. Even a
very large search and replace should only take a few seconds.
Some Tweaks
Check that you can navigate your site in its new location.
You may have to modify .htaccess to fix paths, and you may need to
check your uploads folder for media. But that’s it. All should be
good.
Extra Steps for WordPress MU
If you’re using WordPress Single User, then that’s it. You’re all done!
But in this example, we’re running BuddyPress on WordPress MU, and
that means one extra step. In phpMyAdmin you need to open up (1)
wp_blogs, (2) click the browse tab, and (3) click the edit tab for each
row. If you have a lot, you may wish to run another searchreplacedb.php
against the database, looking for localhost.localdomain and
buddypress.11 and swapping them appropriately.