Cómo mover la carpeta wp-content existente de Wordpress junto con la base de datos a un nuevo servidor y dominio
Ejecutando WP 3.5.1 en un stack LEMP (en Linode)...
Tengo una carpeta wp-content para un sitio WP junto con una copia de seguridad completa de la base de datos. La URL del sitio era algo como:
test.example.com
Quiero que el sitio funcione en mi propio servidor en:
test.mydomain.com
Y una vez que el sitio esté terminado y los cambios de DNS surtan efecto, quiero que la URL del sitio sea:
myclientsdomain.com
¿Cuál es la forma preferida (y ojalá más sencilla) de manejar traslados de servidor y cambios de dominio como este? Busco una respuesta paso a paso, que considere todas las situaciones descritas anteriormente tanto para los archivos como para la base de datos.

Hay una muy buena guía paso a paso sobre cómo mover WordPress en el Codex. Es lo que sigo cuando cambio de dominio.
Mover los archivos es bastante sencillo. Lo complicado son las referencias codificadas en la base de datos. Sin embargo, la búsqueda y reemplazo serializado se encargará de todos los cambios en la base de datos. He usado el plugin Velvet Blues en el pasado, pero el script Search and Replace es bastante bueno.

Utilizo el increíble plugin Duplicator para completar este procedimiento exacto de forma regular.
http://wordpress.org/extend/plugins/duplicator/
El plugin tiene soporte completo y hay excelentes Preguntas Frecuentes disponibles aquí:
http://lifeinthegrid.com/labs/duplicator/
El plugin creará una copia de seguridad .zip de tu base de datos y archivos, junto con un instalador .php que colocarás en tu nuevo directorio raíz. Simplemente ingresas la información de tu nueva base de datos y él hace el resto.
Es probablemente mi plugin favorito de WordPress hasta la fecha.
Si necesitas ayuda en el camino, solo házmelo saber.

Utilizo este plugin TODO el tiempo para los sitios de clientes. Puedo hacer una copia exacta de su WordPress e instalarla en mi servidor de desarrollo, hacer mis cambios y luego copiarla exactamente de vuelta a su servidor si es necesario

Tendrás algunas cosas que considerar (más adelante la respuesta), sugiero los siguientes pasos:
Haz una copia de seguridad de tus archivos y base de datos
Esto es bastante obvio. Vas a hacer mucha manipulación de datos, así que asegúrate de que tu original esté seguro.
Transfiere tus archivos
La forma más rápida es tener un proveedor de hosting donde puedas importar directorios desde otro servidor. Esto se puede hacer proporcionando los detalles FTP, así como definiendo el directorio de destino.
Como los servidores tienen una conexión a internet que suele ser mucho más rápida que la de los usuarios, esta es la forma preferible de transferir los datos. También puedes usar tu línea de comandos para ejecutar esos comandos manualmente.
La opción más lenta es generar un archivo ZIP, descargarlo, subirlo a tu nuevo servidor y descomprimirlo. Si no tienes la posibilidad de hacerlo, toma el camino lento: descargar todo y subir todo. Y ve por un café mientras se transfieren los archivos :)
Transfiere tu base de datos
Nuevamente, muchos proveedores de hosting tienen la opción de importar una base de datos existente a una nueva, incluso desde otro servidor (por supuesto, tu antiguo servidor tiene que aceptar conexiones de datos externas).
Si puedes hacer esto, genial, pero también puedes exportar/importar tu base de datos.
Configura el nuevo (sub)dominio en tu nuevo directorio
En tu nuevo servidor, asegúrate de que tus archivos estén configurados de la misma manera que en el antiguo, y apunta tu subdominio al mismo directorio que lo hacía en el servidor antiguo (generalmente la raíz de WordPress)
Edita el wp-config.php
Guarda el nuevo wp-config.php
. Solo tienes que editar los detalles de conexión a la base de datos.
Carga la nueva URL
WordPress debería estar configurado ahora, pero todavía usa el antiguo SiteURL y AdminURL, por lo que no podrás iniciar sesión. Cambia esos valores en la tabla options
de tu nueva base de datos. Los dos valores que buscas son siteurl
y home
. Coloca tu nuevo dominio allí.
Verifica tu inicio de sesión y tu sitio
Ahora todo debería funcionar hasta ahora, puedes iniciar sesión, editar y escribir, así como usar el sitio. El único problema puede ser que tus publicaciones todavía tengan la antigua URL para las imágenes y archivos adjuntos.
Si tus publicaciones contienen la antigua URL, o si no estás seguro, revisa tu base de datos en la tabla posts
.
Puedes hacer esto buscando directamente en tu base de datos, o usando un script como Serial Search and Replace. Si encuentras tu antigua URL, tendrás que reemplazarla manual o automáticamente. Prefiero hacerlo automáticamente y verificar si hay errores después.
Verifica las otras tablas
También verifica si tus otras tablas contienen la antigua URL. Esto puede ser un poco complicado de reemplazar, pero también debe hacerse para mover tu sitio por completo.
Regenera tus enlaces permanentes
Solo para asegurarte, guarda nuevamente la configuración de enlaces permanentes para recrearlos.
Verifica tu sitio
Por favor, no olvides VERDADERAMENTE verificar tu sitio después de transferirlo. Revisa todas las funciones, especialmente cosas AJAX, formularios de contacto, mapas, etc., ya que es más probable que fallen que PHP/HTML simple.
¡Hora de una cerveza! :)
¡Cosas a las que prestar atención!
Como siempre, nada que se cree manualmente, se transfiera manualmente y se edite automáticamente está libre de fallos. Aquí hay algunas trampas comunes en las que es fácil caer, pero que también se pueden evitar fácilmente.
- Plugins mal codificados (Guardar la URL de tu sitio web en lugar de la ruta relativa y usar las funciones de WordPress para recuperar la URL completa. También puede haber muchos problemas con tu AjaxURL).
- Problemas de codificación (¡Asegúrate absolutamente de usar la misma codificación en ambos servidores y bases de datos! Generalmente, si optas por UTF-8 recomendado, esto debería estar bien).
- Datos serializados (Este es el mayor problema que puedes encontrar. Si usas un plugin como Tablepress, donde una tabla completa se almacena en un array serializado, se romperá tan pronto como reemplaces algo automáticamente. Si tienes datos así, busca una función de exportación/importación en ese plugin específico y úsala como un paso extra. Si no tienen esta función, tendrás que hacerlo manualmente).
- Configuración del servidor (Puede suceder fácilmente que tu sitio no funcione en tu nuevo servidor debido a configuraciones estándar. ¡Asegúrate de tener suficientes recursos disponibles!).
- URLs codificadas en tu tema (aunque esto no debería suceder, sucede con demasiada frecuencia y rompe tus imágenes y enlaces tan pronto como el antiguo sitio ya no esté disponible).
- Problemas de caché (No uses los mismos archivos de caché que usaste en tu antiguo servidor. La mejor forma sería desactivar el caché antes de exportar el sitio, así como vaciar todos los cachés).
- Asumir que todo funciona cuando cambias la configuración por segunda vez en tu servidor (siempre verifica todo nuevamente).
- Opciones en tus plugins y tema (Antiguas direcciones de correo electrónico, etc.).
Eso debería ser todo. Parece mucho por hacer, pero en realidad la mayor parte se ejecuta automáticamente. Solo tienes que pensar en todo lo que PUEDE salir mal, y verificar si lo hizo :)
¡Que te diviertas!

No es necesario usar ningún plugin, scripts o incluso conocimiento de SQL. Un simple bloc de notas es suficiente para la migración. Debes subir todos tus archivos de WordPress a tu nuevo servidor y simplemente cambiar en tu archivo wp-config.php (en tu carpeta principal de WordPress) estos 3 valores:
define('DB_NAME', 'tu_nuevo_nombre_de_bd');
define('DB_USER', 'tu_usuario_de_bd');
define('DB_PASSWORD', 'tu_contraseña_de_bd');
Luego, si estás usando algún cliente de MySQL como phpMyAdmin en tu servidor actual, debes exportar tu base de datos a un archivo, luego abrir tu_db_dump.sql en el bloc de notas, buscar y reemplazar todas las ocurrencias de test.example.com con test.midominio.com. Después de eso, debes importar ese db_dump a tu nueva base de datos (que definiste en el wp-config.php). Eso es todo.

Una simple búsqueda y reemplazo fallará en casi el 99% de los cambios de dominio porque parte de los datos, específicamente los widgets, están serializados y necesitas ajustar tanto los tamaños de las cadenas como el contenido.

No estoy de acuerdo contigo. He movido muchas instalaciones de WordPress con este método y siempre ha funcionado. En la base de datos, casi todos los reemplazos se hacen con los GUID de las publicaciones. Solo algunos reemplazos se hacen en wp_options (como siteurl, home). Puedo aceptar que algunos datos están serializados, pero no es aplicable para nuestra URL de dominio. Un widget bien diseñado usa bloginfo('url'); no la URL directa, así que no debemos preocuparnos por los datos serializados.

sí, si lo planeas con anticipación o simplemente tienes suerte, podría funcionar, por eso dije 99% ;), pero la pregunta es general. Y esto es por mi propia experiencia.

Así que tenemos experiencias diferentes ;) Yo diría que este método FUNCIONARÁ en el 99% de los casos. Tal vez me equivoque, porque llevo trabajando con wp solo unos pocos años, pero no he encontrado ninguna resistencia al mover wp, incluso con plugins y widgets activados.

Supongo que depende de lo que uses en el sitio. Mi mala experiencia fue con sitios simples... El asunto es que como @helgatheviking ha señalado, existe una herramienta gratuita que hace la búsqueda y reemplazo y tiene en cuenta la serialización, así que no hay necesidad de arriesgarse incluso si estás 99% seguro de que ganarás.

Sí, funcionará en el 99% de los casos, pero ¿por qué dirigir mal incluso al 1%? Tu respuesta debería incluir la advertencia de que puede invalidar algunos datos. En un mundo ideal todos los plugins estarían codificados perfectamente, pero de hecho me he encontrado con esto personalmente, no vivimos en un mundo perfecto.

Estoy de acuerdo en que no vivimos en un mundo perfecto y siempre existe alguna posibilidad de fallar. Ambos tienen razón. Él preguntó por la forma más directa de migración y creo que esta es. Y funcionará en la mayoría de los casos. Con un 1% de riesgo de fallo, puedo arriesgarme, si es que debe ser la forma más fácil. Esta es mi propuesta para resolver este problema. Si puedo pedirte, ¿podrías enviarme algunos enlaces de plugins o widgets que podrían causar problemas con esta forma de migración? Hasta ahora no he visto ninguno.

Lo que hago es:
Crear una nueva base de datos en el servidor de destino. Importar el archivo SQL. Ejecutar las siguientes consultas SQL en la nueva base de datos:
UPDATE wp_options SET option_value = replace(option_value, 'test.example.com', 'test.midominio.com') WHERE option_name = 'home' OR option_name = 'siteurl'; UPDATE wp_postmeta SET meta_value = replace(meta_value, 'test.example.com', 'test.midominio.com') WHERE meta_key = '_menu_item_url'; UPDATE wp_posts SET guid = replace(guid, 'test.example.com','test.midominio.com'); UPDATE wp_posts SET post_content = replace(post_content, 'test.example.com', 'test.midominio.com');
Subir los archivos de WordPress al servidor de destino.
- Subir la carpeta wp-content, sobrescribiendo los archivos predeterminados de WordPress.
- Configurar tu wp-config.php normalmente, usando el nombre de la base de datos, usuario y contraseña de la base de datos que creaste.
- Ir al Panel de control y cambiar manualmente cualquier instancia de test.example.com en los widgets (estos no se pueden cambiar mediante consulta SQL porque están serializados en la base de datos).
- Cuando llegue el momento de cambiar a midominiodelcliente.com, realizar nuevamente las consultas SQL y ajustes de widgets mencionados anteriormente.
Dependiendo de tu tema y plugins, puede que tengas cambios adicionales que hacer en la base de datos o en el Panel de control. Estos tendrás que descubrirlos tú mismo y cambiarlos según los encuentres.
Advertencia justa: no es perfecto y puede ser un dolor de cabeza mover WordPress entre dominios. Otra cosa que también he visto hacer es agregar lo siguiente a tu archivo wp-config:
define('WP_HOME','http://'. $_SERVER['SERVER_NAME']);
define('WP_SITEURL','http://'. $_SERVER['SERVER_NAME']);
Esto ayudará a que el sitio funcione en cualquier dominio en el que se encuentre actualmente, pero aún tendrás que lidiar con URLs codificadas directamente en el contenido, opciones y menús. No lo he probado yo mismo y no sé si necesitas eliminar las opciones correspondientes de tu base de datos para que funcionen.
Actualización: Debí haber adivinado que habría un plugin para manejar la parte de la base de datos http://wordpress.org/extend/plugins/wp-migrate-db/

Recomiendo encarecidamente NO ejecutar los comandos SQL de actualización sugeridos anteriormente. La tabla de opciones específicamente puede contener muchos datos serializados: los simples buscar/reemplazar en datos serializados corromperán esos datos

Sugiero eliminar esa parte de tu respuesta por completo, y de hecho advertir contra técnicas manuales de buscar/reemplazar como esa o usar el comando 'sed'.

No estoy haciendo un simple buscar/reemplazar. Estoy limitando los comandos para cambiar campos que NO contienen datos serializados, y de hecho menciono no usar dichos comandos para cambiar información almacenada en widgets ya que esos datos SÍ están serializados.
En la tabla de opciones específicamente estoy usando la declaración WHERE "WHERE option_name = 'home' OR option_name = 'siteurl';" para evitar cambiar datos serializados.

Ahora lo veo, la primera vez que lo leí pasé por alto la cláusula WHERE. Lo siento por eso. Sin embargo, no deberías necesitar cambiar los valores de home y siteurl en la tabla de opciones, para eso están WP_HOME/WP_SITEURL. Usar esas definiciones anula los valores de la tabla de opciones, y añadir la definición adicional WP_RELOCATE hace que las dos primeras sobrescriban los ajustes en la tabla de opciones.

Además, estoy bastante seguro de que no se supone que debas cambiar los guid en la tabla de posts. Esos no están destinados a usarse como URLs sino como identificadores únicos. Edición: Lo verifiqué - para archivos adjuntos hay un caso donde necesitas cambiar el guid pero no aplica para un simple cambio de dominio.

Notarás que el uso de definir WP_HOME y WP_SITEURL estaba separado del resto de mi respuesta y también mencioné "No lo he probado yo mismo y no sé si necesitas eliminar las opciones correspondientes de tu base de datos para que funcionen". Reconocí que no sabía más sobre ese tema pero que era diferente de usar la base de datos.
Los GUID no son solo IDs únicos y cambiarlos no siempre es necesario pero no es dañino.

Está bien, solo estaba ofreciendo información más relevante sobre esas dos opciones, no intentaba crear una discusión. Con respecto a los GUIDs, de hecho pueden ser perjudiciales. Son únicos globalmente. Global en este caso realmente significa a nivel mundial, por eso incluyen información del dominio. Así que cualquier sistema externo que interactúe con tu sistema (como un agregador RSS), perderá el rastro de todo tu contenido.

Relevante - http://codex.wordpress.org/Changing_The_Site_URL#Important_GUID_Note

El OP mencionó que está transfiriendo desde su sitio de desarrollo. Este sitio no debería estar siendo agregado aún, y si lo está, perder esos registros es preferible ya que no querrás que los enlaces y contenido de tu espacio de desarrollo terminen en fuentes externas.

"Para que el campo GUID sea 'globalmente' único, es una convención aceptada que se utilice la URL o alguna representación de la URL. Por lo tanto, si eres dueño de example.com, entonces eres el único que usa example.com y, por lo tanto, es único para ti y tu sitio." <- Esto puede romperse potencialmente si el GUID contiene el dominio de desarrollo (si el espacio de desarrollo es agregado por fuentes externas, por ejemplo). De repente, hay dos publicaciones que tienen el mismo GUID. Es mejor que contenga el dominio en vivo para que se pueda seguir esta regla, en mi opinión.

Una respuesta anterior tenía esto, pero aquí hay un paso a paso con algunos otros datos:
- No instales WordPress
- Transfiere por FTP todo el directorio original de WordPress al nuevo directorio (ver más abajo si falta algo)
- Importa la base de datos SQL con phpMyAdmin en el panel de control de tu servidor
- Sube por FTP el archivo searchreplacedb.php al directorio donde está WordPress
- Ejecuta searchreplacedb.php desde tu navegador (¡borralo después!)
Tómate un descanso y factura a tu cliente $75!
(searchreplacedb.php está disponible GRATIS en: interconnectit.com/products/search-and-replace-for-wordpress-databases ... ellos también tienen instrucciones).
Si solo tienes la carpeta de contenidos de WordPress tienes otro problema. Debes conseguir el resto de la instalación de WordPress de la MISMA VERSIÓN EXACTA. Busca en la base de datos si no sabes qué versión de WordPress es. Es fácil descargar versiones antiguas en línea. Colócalo todo en el lugar correcto como antes, usando FTP para configurar las nuevas carpetas, si quieres que aparezca como se veía antes. No visites el sitio después de subir la base de datos y los archivos de WordPress si te falta algo o volverá al tema predeterminado o desactivará los plugins. He perdido configuraciones de plugins y he tenido que hacerlo todo de nuevo, así que piensa y ve despacio.
Si ya tienes una subcarpeta o complemento, o el nuevo sitio necesitará uno, planea con anticipación. No solo reemplaces la URL antes de tener en cuenta la nueva carpeta necesaria o la ausencia de una. Quizás necesites ejecutar searchreplacedb para 'carpeta/url' antes de volver a hacerlo para 'url', etc. ¡De lo contrario podrías estropear un 'complemento' cambiándolo a una 'instalación en subdirectorio mostrada en raíz' o alguna tontería similar!
Si la nueva estructura coincide con la antigua y tienes todo el directorio de WordPress, puedes hacerlo más fácil y rápido que leer este post! Coloca el programa en el mismo directorio donde has subido WordPress para mejores resultados, como dicen las instrucciones, ya que tiene una configuración automática.
Si no tienes acceso FTP, acceso al panel de control o acceso SQL, realmente necesitas un mejor servidor y podrías estar sin suerte.
Prueba con el buscar y reemplazar recomendado en otros posts y si tienes suerte, tienes una versión antigua de WordPress y encaja en los parámetros necesarios, funcionará; una forma dolorosa de jugar a la ruleta rusa con tu sitio.
Además, nunca edites datos en el Bloc de Notas a menos que sepas que no hay cadenas más largas de lo que aceptará. ¡Ahí hay un buen error en el que podrías pasar semanas buscando! Si tienes que mirarlo, solo mira, no lo guardes. Deberías olvidar que el Bloc de Notas existe y usar Notepad++, pero editar manualmente datos serializados en un editor de texto es tan malo como intentar hacer un buscar y reemplazar en phpMyAdmin; no lo hagas.
Podrías buscar "sql datos serializados". La respuesta corta es que buscar y reemplazar estropeará los datos serializados en un SQL. Las bases de datos de WordPress tienen datos serializados... cada vez más hoy en día.
Hice esto demasiadas veces y tuve un éxito marginal y me golpeé la cabeza contra la pared muchas veces antes de investigarlo correctamente. Ahora es pan comido.

He migrado varios sitios de un servidor/dominio a otro de esta manera, y generalmente todo lo que necesitas es una copia de seguridad y tu carpeta wp-content, que parece que ya tienes. Este es el método que sigo:
- Instala WordPress en el nuevo sitio. Puedes usar cualquier método que prefieras para esto, algunos hosts ofrecen instalaciones con un solo clic, de lo contrario simplemente hazlo según tu método preferido.
- Sobrescribe la carpeta wp-content con la copia que tienes. Esto asegura que todos tus plugins, archivos subidos, etc. sean iguales a los de tu servidor anterior.
- Sobrescribe la base de datos con la copia que tienes. Normalmente hago esto usando phpMyAdmin con la función de Importar. Algo a tener en cuenta aquí es que si tu copia de seguridad no incluye sentencias DROP, necesitarás eliminar primero todas las tablas en la base de datos.
- Si estás cambiando el nombre del dominio, necesitarás navegar por tu tabla wp_options en phpMyAdmin y actualizar la opción "site_url". Hay otra opción llamada "home" que también puedes actualizar, pero no es obligatorio ya que esto se puede cambiar en el administrador de WordPress una vez que tu sitio esté operativo.
¡Listo!
Esto debería ser todo lo que necesitas hacer para poner tu sitio en marcha. Una vez que esté operativo, sería prudente revisar cualquier configuración específica de plugins/temas que pueda hacer referencia a tu sitio antiguo y regenerar tus enlaces permanentes.
