Perishable Press Server Migration
As you may have read, we recently transferred our online empire to a new server. Although the overall process went smoothly enough, several learning opportunities unfolded during the migration of our humble Perishable Press website…
The setup
First, the setup. Perishable Press is a WordPress-powered website. On our previous server, we were running a Fantastico-installed WordPress version 2.0.2, upgraded from version 2.0. Permalinks were enabled and everything was running smoothly. Our database was only 13MB in size and around 12MB of that was disposable statistics information from WP-ShortStat and Bad Behavior. The crucial part of our database was a friendly 1MB in size.
More importantly, we were switching servers only — not domain names. Apparently, switching domain names for a WordPress install requires combing the database for all instances of the original domain name and replacing each with the new information. Fortunately, we were only switching servers. This enabled some pre-planning that truly simplified the process.
Pre-planning
First, we prepared backup copies of everything and then worked from copies of the copies. We downloaded everything — every file, database, setting, and configuration — we even exported individually copies of each and every table in the database, and then exported them again in gzipped format. Then, when we setup the domain space on the new server, we used the exact same username and password effective via the previous server. This enabled us to replicate the exact database names as well.
Next steps
After domain name propagation, we uploaded a complete copy of our original Fantastico-prepared WordPress-powered Perishable Press website to the new server. Then, after restoring the databases, we checked the site and… nothing — the Dreaded White Screen of Death. Something was very wrong.
After a few hours of tweaking, it became apparent that the problem was with Fantastico. Even worse (or better, in hindsight), Fantastico on the new server was sporting WordPress 1.5.1! So that was out.
After a cup of tea, we decided to start fresh. After deleting all files and database remnants from the new server, we uploaded a fresh manual-install version of WordPress 2.0.2 and double-checked the upload (see Update for more infos). We then created the databases and manually installed the fresh copy of WordPress.
As expected, this provided us with a nice, clean WordPress install that queried a database architecture that was an exact replicate of the original. Primed and ready, we dropped the default wp-posts
table and imported our own. Success. After exporting a quick backup of the new “empty” database, we dropped it entirely and imported our original, “fully pimped” database. Checking the site revealed relative success. Everything that could work did work. It quickly became obvious that there were several plugin issues that needed our attention.
Troubleshooting
After deleting all uploaded plugins, we began uploading them, one at a time, activating them, and checking the site after each one. This was tedious, and several plugin backup copies were somehow corrupted (see Update for more infos), requiring us to upload fresh copies. On several occasions, in fact, plugin errors were due to corrupt or truncated backup copies of the plugins themselves.
After all plugins were successfully activated and operating smoothly, we finished the migration by uploading all of the non-WordPress files, such as images, themes, JavaScript, and everything else. Eventually, however, we found success — Perishable Press had been relocated to a new server. Very educational indeed.
Update
After successfully migrating to the new server, we spent some time cleaning up and organizing leftover files, backup copies, and the like. While consolidating backup copies of WordPress, it became apparent that the original downloaded copy of Perishable Press was incomplete. In fact around twenty PHP files had been truncated and were incomplete. This may very well have been why the first attempt at site transfer was unsuccessful.