Pregunta

Tengo un servidor de prueba que utiliza los datos de una base de datos de prueba.Cuando he terminado la prueba, se pasa a la base de datos activa.

El problema es que tengo otros proyectos que se basan en los datos ahora en producción, así que tengo que ejecutar un script que toma los datos de las tablas que necesito, borra los datos en la DB test e inserta los datos en la DB.

He estado tratando de encontrar una manera de mejorar este modelo.El problema no está tanto en la migración, ya que los datos sólo se actualiza una o dos veces a la semana (sin ninguna acción por mi parte).El problema es tener la migración tener lugar sólo cuando sea necesario.Me gustaría tener mi script de migración incluyen una comprobación rápida en contra de las mesas en vivo y las tablas de prueba y, si es necesario, hacer el movimiento.Si no ha habido actualizaciones, el script se cierra.

De esta manera, puedo incluir el script de actualización en mis otras secuencias de comandos y no tendrá que preocuparse de si los datos están en sincronía.

No se pueden utilizar las marcas de tiempo.Para uno, no tengo control sobre las tablas en el lado vivo una vez en vivo, y también porque parece un poco tonto a granel de las mesas más para conviencience.

He intentado hacer una "MOSTRAR TABLA de ESTADO DE livedb", sino porque las mesas son de todos InnoDB, no hay "Tiempo de Actualización", además, parece que la "Hora de creación" fue esta mañana, que me lleva a creer que la base de datos es una copia de seguridad y re-crean a diario.

Es allí cualquier otra propiedad en la tabla que se muestran a cual de los dos es más reciente?Una "Fila más reciente Fecha", tal vez?

¿Fue útil?

Solución

En resumen:Hacer que el desarrollo-actualización en vivo de primera clase en su aplicación.En lugar de depender de la base de datos del motor para el suministro de usted con la información necesaria para hacer una decisión de actualizar o no actualizar ... esa es la pregunta), acaba de implementar como parte de su aplicación.De lo contrario, usted está tratando de encajar una clavija redonda en un agujero cuadrado.

Sin saber cuál es su modelo de datos es, y sin entender en absoluto lo que su modelo de sincronización es, usted tiene un par de opciones:

  1. Coinciden con las claves primarias contra el frente de la base de datosla base de datos de prueba.Cuando la prueba de > live Id, hacer una actualización.
  2. El uso de marcas de tiempo en una tabla para determinar si necesita ser actualizado
  3. Usar el hash md5 de una tabla de base de datos y la fecha de modificación (UTC) para determinar si una tabla se ha cambiado.

Larga historia corta:Sincronización de base de datos es muy duro.Implementar una solución que sea específica para su aplicación.No hay un "genérico" de la solución que va a trabajar de forma ideal.

Otros consejos

Si usted tiene un incremento automático de las tablas, puede comparar los valores máximos autoincrement para ver si son diferentes.

Sin embargo, la versión de MySQL está usando?

En lugar de rodar su propia, se puede usar una solución pre-existente para mantener las bases de datos sincronizados. He oído cosas buenas sobre SJA de SQLyog (ver aquí ). Nunca he utilizado yo mismo, pero he estado muy impresionado con sus otros programas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top