I've recently moved my web hosting to a different provider and found the migration surprisingly smooth.
That doesn't mean you can ignore basic data security practices, but it's nice to know things can go well.
The service and reliability of my previous hosting company has been slowly degrading over recent times, and in the past few months I've had a few too many server time-outs and unexplained failures, so it was time to bite the bullet and make a change.
There were a few specific things I knew I needed and wanted to do, so a period of investigation was warranted. The research shows a lot of unhappy customers of lots of different, which is a bit disappointing, but at least it's not just me.
I ended up selecting Panthur , a Melbourne based company that also has data centres in various capital cities. The choice was made easier by asking a few pre-sales technical questions and getting answers that weren't just correct, but were actually useful.
Because most of my site uses Joomla!, the migration process was fairly simple. I can use Akeeba backup  to clone my site from one host to another, so the main process goes:
- Set up hosting account with new provider
- Confirm 'staging' URL and database credentials for new host
- Create backup on old host
- FTP the backup file from old host to new host
- Run the Akeeba restoration script on the new host
- Be exceedingly pleased with one's self
And then you have to wait a few days for the DNS records to transfer.
And then, and only then, you can cancel your old service.
It wasn't quite that simple. The two hosting providers use quite different management interfaces, so I needed a few attempts at setting up databases correctly just because of unfamiliarity, not any actual problem. And then there're the parts of my site that aren't Joomla-driven, these needed to be separately FTP'd between the hosts and the configuration files manually adjusted.
I also now have a different set of capabilities supported, such as multiple databases, so it seemed appropriate to re-arrange some of the tables to separate the different services.
Overall it was a surprisingly smooth transition.
Caveats and potential problems
Although I had no real problems, there are some areas that are rich with potential unpleasantness.
Get a good backup first
Make sure you have a good backup or copy of your existing site before you do anything else.
A backup that you haven't confirmed as good (ie actually restored somewhere) might be tragically disappointing when it comes to restoration.
You might also have some other files and data on your old host that your backup doesn't include. Things like different web services, static files or even your traffic statistics-all of these might disappear as soon as you cancel your old service, so get what you want first.
It's probably also a good idea to take a database backup independently from your site backup, just in case the database management of your new host doesn't play well the restoration processes.
It doesn't work until you've tested it
Even if the copy/restore process appears to work fine, you still need to run some tests on the new site to make sure that things actually work.
Why might they not work? Well, different hosting providers may use slightly different versions of server software (eg PHP or database engine version) or have different extensions enabled.
Some web services are tied to specific domain names, which makes it tricky to test the new site before changing the DNS records (and waiting for the changes to propagate), but you can probably convince your local PC to think that the new IP address is live by manually editing your hosts file. This is not for the feint of heart, but really isn't that hard although the details depend on your operating system . Do remember to undo your changes afterwards.
Did I mention backups...
Am I paranoid? No, I'm just experienced.
 Panthur - the host I selected.
 www.akeebabackup.com - backup module for Joomla!
 Microsoft article describing how to edit the hosts file on Windows 7
 Ask Ubuntu article describing how to edit the hosts file on Ubuntu