WordPress FAQ: How do I Move my blog to a new host?

This article will take approx 2 minutes to read.

What is the process for moving my WordPress blog to another host?

As the technology manager at b5media, my team is often asked to migrate a blog to our cluster. Usually, when that happens, I ask a bunch of relevant questions:

  1. Is the blog a WordPress blog? If not, what platform is it?
  2. Are we going to continue to use the same domain or do we want to use a new or existing one?
  3. Are we merging this blog with an existing blog?
  4. Is it important to preserve permalinks?
  5. If this is a WordPress blog, what version of WordPress is being used?
  6. How many authors?

Lots of relevant information is needed to migrate a blog. This question is about moving a WordPress blog so we’ll assume that it’s not a Movable Type, Typepad, Blogger or Expression engine blog. Or any other platform for that matter. WordPress.com counts as a “WordPress” blog though. ;-)

Solution 1: Quick Move

The easiest way to move from one blog to another, particularly if you’re moving the blog to a new domain and both already resolve (talk to your registrar or host to get help with DNS resolution) then you can move your categories, posts and comments using WordPress’ export functionality. This is native in WP 2.1, however, you can achieve nearly the same thing with my WordPress-to-WordPress importer. Having the WXR file, as it is called, in hand you can import into WordPress 2.1 at the new location.

The sacrifice you give up in preservation of options. You’ll have to go in and set your permalink structure, your blog name, description, number of posts to display and any other options. You will have to upload and activate plugins, etc. This is a content migration solution only.

Incidentally, this is the only way to move off of WordPress.com and the only way to merge a blog into another one – say if you were retiring it.

Solution 2: Full Move

If the quick way doesn’t provide satisfactory results, you can do the full way. I always recommend doing whatever you can by SSH, but some hosts won’t allow for that and some folks are simply scared stupid of command line. Is text really that scary? :)

1. First of all, back up your database. You can do this via phpMyAdmin. I would not recommend the formerly-bundled wp-db-backup plugin for a number of reasons that ultimately end in the reason why it is no longer a bundled plugin. If you’re using SSH, you’ll want to use the

1
mysqldump

command:

1
mysqldump -uUSER -p DBNAME > dump.sql

2. Now, grab your files. Most people choose FTP for this, but again, if you can use SSH to create an archive file of your data, do it for reliability reasons. Make sure you grab your .htaccess and database dump as well.

1
tar cvf archive.tar path/to/blog/dir path/to/dump.sql

The compress it:

1
gzip archive.tar

This will create a file called

1
archive.tar.gz

that you can grab via SFTP or FTP and transfer to your new server.

3. On the new server, you have to restore everything back in to place. First, make sure you have a database setup for your blog on your new server. If you just used FTP to grab all your stuff, ignore the next bit. If you tarred your archive and database dump, I’d recommend untarring in a temporary location.

1
tar zxvf archive.tar.gz

Now, whether you used FTP or SSH, you can move your data files into the proper location and run a:

1
mysql -uUSER -p NEWDBNAME < dump.sql

With any luck, once your DNS is pointed at the new server and begins to resolve, your blog will be perfectly moved.

Comments

  1. Michael says

    I have a big database (11M), I can’t import it via phpmyadmin since the max size allowed is 8M. I’d like to know in this case, is there a database size limit when importing the database with command line?

  2. says

    There is no limit from the command line and, in fact, for people like yourselves that have large databases this is the way I recommend going. In fact, at this size, I’d try to make sure you do everything from the command line.

  3. says

    Michael and Aaron, if your host allows you to access your server, you can simply copy your /var/lib/mysql/ subdirectories local and then copy them to the new host. It eliminates the need to export, import, etc.

  4. says

    Really? I’ve done it a bunch of times and haven’t had a problem. MySQL simply saves the data in optimized data files. Why does this risk corruption? As for savings, you save the import and export effort.

    To me it appears the same as taking a MSSQL server, detaching it, and moving it. No?

  5. Ben Klang says

    Simply taking a copy of the MySQL data files is inherently dangerous *if the database is running.* The reason for this is that database files are not static things; any time the database changes in any way, many places inside the data files are changed (indices, content, auto increment fields, etc). It is similar to pulling the power from your computer rather than shutting it down.

    All that being said, if you can actually shut down MySQL it is then safe to take a copy of the database files. This is sometimes called a cold backup.

    For more information on safe ways to back up your database, see the relevant documentation. MySQL’s can be found here:
    (Three different versions of MySQL)
    http://dev.mysql.com/doc/refman/4.1/en/disaster-prevention.html
    http://dev.mysql.com/doc/refman/5.0/en/disaster-prevention.html
    http://dev.mysql.com/doc/refman/5.1/en/disaster-prevention.html