jdMorgan - 4:21 pm on Apr 17, 2010 (gmt 0)
Sign up for a new host that can provide you with a unique IP address (at least temporarily). Alternately, register a new domain -- or use one of your already registered unused domain names. Either will work, and the point is to be able to access the new host's server without using your existing domain name.*
Upload a copy to the new server, and test it until your sick of testing using the unique IP address or the new domain name. Once satisfied that the new host is 100% compatible with your site, switch the DNS to point to the new server's IP address using the original domain name. Do not cancel the old hosting for st least four days, and you should see no problems at all. You can also downgrade to a non-unique IP address as soon as your are *really* sure the site works properly on the new host.
The hardest part here is choosing a new host that has the same (or equivalent) scripting and database support as the old. The reset is easy, as long as you do the steps in the correct order.
I'm also assuming that you have complete control of your domain's DNS, independent of your hosting. If not, then that would be the first step -- You'' need to renew your domain name independent of any hosting company by dealing with a registrar for your TLD directly. Then use the registrar's DNS servers -- and not those of any hosting company, to resolve your site's IP address.
One more DNS note here, in the days before you plan to make the switch, go in and set the Time-To-Live (TTL) of your DNS down to a few hours. It may currently be set to days or weeks. This setting indicates to other DNS servers how long they should keep this DNS record before checking with the authoritative DNS server to see if it's been updated. This can affect how long it takes to 'switch your DNS' over, and so should be set to a short time before the transition, and then set back to a few hours or a day after the transition.
If your site has dynamic user-generated content, then just prior to switching the DNS to go in and disable user posts, and add a message that the site is undergoing maintenance and that posting is disabled-- nothing too complicated. This avoids the problem of having user posts get 'lost' during the transition. After disabling posting, you will need to re-copy the current database from the old to the new server, so that it will be up-to-date when the new server comes on-line.
ISPs with current DNS server software will update to point to your new server within four hours. ISPs with old and ancient DNS servers may take up to four days.