Sincronización de bases de datos entre desarrollo / etapas y producción


36

Tengo un problema con la sincronización de la base de datos de WordPress entre el desarrollo y la producción y me pregunto cómo otras personas lo resuelven. Soy consciente de esta pregunta, pero en realidad no cubre el caso de uso más desagradable y realista.

Digamos que tengo un sitio web en vivo de WordPress. Tomé un volcado de todo, replicarlo en nuestro entorno de desarrollo. Empecé a hacer cambios. 1 semana después, estoy listo para implementar mis actualizaciones. Mientras tanto, la base de datos en el sitio de producción ha cambiado (nuevas publicaciones, nuevos comentarios, etc.). ¿Cómo sincronizo los cambios entre la producción y el desarrollo durante el lanzamiento y es posible automatizar (al menos un poco) este proceso?



Respuestas:


10

Puede que haya una mejor manera de que me falte, pero le voy a dar 2 opciones:

1.Utilice Exportación XML para exportar sus nuevas publicaciones y comentarios. Luego use el Importador de WordPress para importar las nuevas publicaciones y comentarios nuevamente a la base de datos de desarrollo

Es mejor importar a dev y luego mover la base de datos a producción porque cuando la importes descargará todos los archivos multimedia nuevos de producción.

Mientras tanto, la producción ha cambiado (nuevas publicaciones, nuevos comentarios, etc.)

Esto resolvería su problema de incorporar cualquier contenido modificado.

2. Use el comando INSERT IGNORE INTO MySql para agregar las nuevas tablas desde dev. o el comando REPLACE para sobrescribir filas duplicadas en la misma tabla.

Antes de usar MySql, haga una copia de seguridad de ambas bases de datos y mueva la base de datos gz al servidor de producción y cargue el volcado (cambie el nombre de dev si es lo mismo que producción).

INSERT IGNORE INTO `_wp_production_db`.`wp_cool_plugin_options`
SELECT *
FROM `_wp_dev_db`.`wp_cool_plugin_options`

No me siento cómodo con los comandos de MySql, así que iría con la opción 1.


observe que la exportación XML se detiene en algún lugar con la cantidad de publicaciones, por ejemplo, en mi blog +10,000 publicaciones que no puedo usar.
edelwater

@edelwater, sí, esto depende de la configuración del servidor para max_execution_time (generalmente 30 segundos), para exportaciones muy grandes, este valor debe establecerse más alto (1-2 minutos o más)
mike23

2

Si se trata más del mismo tipo de datos (algunas publicaciones de blog nuevas, comentarios nuevos), no estoy seguro de por qué es necesario sincronizarlo realmente. No es que cambie la forma en que funciona el código en el sitio, ya que es más de lo mismo. Normalmente no me preocupo por eso a menos que sea un nuevo tipo de datos.

Siempre me aseguro de tener una buena muestra de los datos del sitio, no en todas las publicaciones, páginas y comentarios del sitio en vivo.


2
¡Buen punto! Sin embargo, si la producción tiene algunos cambios en el área puramente de contenido (publicaciones, comentarios) y el desarrollador tiene cambios en la configuración y la configuración (por ejemplo, agregó 5 complementos y modificó sus configuraciones), ¿cómo transferiría esos cambios de configuración sin realmente hacer el trabajo dos veces? tiempo en desarrollo y uno en producción)?
Alex

esa es la verdadera pregunta, ¿no es así y no tengo una respuesta?
curtismchale

-1. A veces necesitamos tenerlos sincronizados. Especialmente para la publicación / páginas idde la base de datos.
Francisco Corrales Morales

2

Tan pronto como toque el tema de hacer cambios en paralelo, toque el área de administración de la configuración. Con muchos patrones, comunidades propias (http://www.cmcrossroads.com/) y herramientas no tanto para la gestión de versiones (como svn / git) sino para el soporte de la gestión de configuración (patrones) como clearcase. (zonas totalmente diferentes).

En este caso, sigue siendo una situación simple y encontrará que funciona con algunas limitaciones y algunos trabajos manuales y algunas listas.

El escenario en el que estoy pensando para hacerlo más descriptivo de la solución ideal: múltiples desarrolladores que trabajan en la misma base de código, múltiples entornos de prueba, múltiples entornos de aceptación, múltiples entornos de aceptación de producción posiblemente en todos los rincones del mundo.

Si quieres hacer esto un poco más profesional:

a) escriba una lista de todos los elementos de configuración que encuentre, este podría ser el código de WordPress en sí mismo, complementos externos, contenido, metadatos y decida cuáles de estos desea incluir bajo algún tipo de "administración", cuáles importan.

b) describa los flujos de trabajo que pueden suceder, por ejemplo, qué sucede con una solución, qué sucede con algo nuevo que se está desarrollando, en qué caso cambia el contenido de su lado, cómo se llama y quién lo hace, quién es el propietario del mismo por ejemplo, una nueva publicación o un nuevo complemento.

c) para el trabajo en paralelo, primero describa qué CI desea administrar, decida si el flujo es siempre del desarrollo a la producción o si realmente es necesario hacerlo todo de dos maneras.

d) para cada uno de los tipos de CI bajo (a) escriba una resolución. Por ejemplo, para TODO eso es texto (o texto exportado como archivos php pero TAMBIÉN texto plano en archivos XML) es posible la fusión. Esto realmente no es un problema, pero necesita una buena herramienta de combinación. Por ejemplo, con ClearCase obtendría una combinación de 3 formas en las siguientes situaciones: 1) combinaciones triviales: las hará automáticamente 2) no trivial automático: las hará automáticamente PERO debe verificarlo 3) no trivial no automático: esto es un conflicto, por ejemplo, en 1 línea se han realizado varios cambios. Los elementos no triviales son la parte mínima que debe cuidar manualmente, una buena herramienta de fusión lo guiará en esto, por ejemplo, el que está en claro (que también hace la combinación de palabras y donde puede vincular otras fusiones comerciales o no comerciales para un archivo específico tipos). Además, si ha identificado en (a) archivos que deben copiarse, solo su comportamiento sería no fusionarse, sino simplemente copiarse de una manera sobrescribiendo la otra versión sin una fusión (por ejemplo, complementos que no ha modificado). Muchos de estos tipos son posibles con diferentes comportamientos. Pero escriba las relaciones entre los CI,

Luego, para las fusiones no basadas en texto, debe tomar una decisión sobre cómo manejarlas, por ejemplo, imágenes que se han cambiado en 2 lugares. Aquí podría decidir que la producción siempre tiene preferencia (al menos eso es lo que yo pensaría), lo que lo hace simple.

Entonces ... para resolver este problema, necesita una herramienta de administración de versiones que admita diferentes flujos. Cada secuencia representaría una parte. (Esto puede ser inmensamente complejo dependiendo de sus necesidades, pero en este caso creo que es muy simple).

Si ahora puede lograr tener estas transmisiones bajo sus instalaciones de WordPress y sincronizarlas también con el contenido de la base de datos, etc., entonces puede realizar las fusiones en la herramienta CM / versioning y luego exportarlas nuevamente al otro entorno.

La cosa es que ... debes escribir esto primero. Este no es un truco técnico. Es un patrón predeterminado alrededor de la administración de configuración, por lo que no hay nada extraño aquí también, pero debe escribirlo. Puede encontrar, por ejemplo, que un complemento instalado realiza cambios en la base de datos con algunos datos que son diferentes en otro entorno, por lo que debe tener un procedimiento adicional al respecto.

Técnicamente casi siempre todo es posible, consulte http://www.cmcrossroads.com/forums para ver escenarios que son docenas o cientos de veces más complejos, aunque siempre utilizando el mismo enfoque y el mismo conjunto de patrones CM.

en resumen: coloque una capa de administración de versiones debajo, automatice las fusiones y maneje los conflictos, luego importe en el entorno de destino. Piense en una estrategia de transmisión que encaje aquí y anótela. Realice una pequeña gestión CM CM. Esa sería la solución profesional, de lo contrario, instale algún hack de copia de db, scripts, etc.


2

Acabo de hacer una publicación sobre cómo sincronizo los datos de producción con nuestra puesta en escena, consulte mi publicación de blog al respecto en: http://blog.wp.weightpoint.se/2012/01/04/synchronizing-wordpress-multisite-database -desde la producción hasta el entorno de montaje /

Si desea sincronizar el código y otras cosas también, recomendaría crear un repositorio git o mercurial con el archivo de ignorar relevante.

Si desea realizar actualizaciones diferenciales para producir productos, entonces creo que crear scripts de migración es la mejor y más segura.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.