Hola,
Creo que una de las mejores formas de hacer la migración es esta:
1. Bajar el TTL de los registros DNS de cada dominio, podría ser por ejemplo 300 segundos. Esto deberías hacerlo por lo menos una semana antes.
2. Creas la cuenta de hosting en el nuevo servidor y mueves los archivos del sitio web, creas las cuentas de correo, mueves las bases de datos, etc. Obviamente si se cuenta con un panel de control igual en ambos servidores, el proceso seguramente será mucho más fácil. En mi caso, he tenido que realizar cientos de migraciones manuales, de un panel a otro.
3. Vas al anterior servidor y pones en los registros DNS respectivos (correo, web, etc) la IP de la cuenta en el nuevo servidor. De esta manera, después de 300 segundos, el sitio comenzará a apuntar al nuevo servidor.
4. Como el sitio ya estará apuntando al nuevo servidor de todas formas, en cualquier momento podrás cambiar los DNS y así prácticamente no notarán nada los usuarios.
Para sitios dinámicos el asunto es un poco más complejo, sobre todo si la base de datos se está actualizando muy seguido, es decir, si el sitio tiene mucho tráfico. En esos casos se puede hacer una de dos:
a) Se suspende el sitio por unos minutos, para mover la base de datos. Luego de haberla movido, se puede ir al archivo "index" y crear un redireccionamiento (JavaScript, PHP, ASP, etc) con IP o con URL temporal hacia el nuevo servidor. De esta forma, cuando entre un usuario en realidad estará siendo redirigido al nuevo servidor.
b) La otra forma es un poco más compleja, pues implica encontrar los
string de conexión a la base de datos, y reemplazar el usual "localhost" por la IP de la cuenta de hosting en el nuevo servidor. Y obviamente en el nuevo servidor se deberá habilitar al usuario de base de datos para aceptar conexiones remotas.
Como dije, creo que es una de las mejores formas, aunque siempre existe más de una forma de matar una pulga.
Saludos,