Sincronización de la base de datos mysql entre dos bases de datos

81

Estamos ejecutando una aplicación Java PoS (Punto de venta) en varias tiendas, con un backend MySql. Quiero mantener las bases de datos en las tiendas sincronizadas con una base de datos en un servidor host.

Cuando ocurren algunos cambios en una tienda, deben actualizarse en el servidor host. ¿Cómo logro esto?

peedee
fuente
10
Replicación de mysql: dev.mysql.com/doc/refman/5.0/en/replication.html
Libro de Zeus
¿Es fácil hacerlo? ¿Cuánto tiempo crees que tomará?
peedee
2
@peedee La replicación de MySQL es bastante fácil de configurar. Algunos comandos y una sincronización inicial. Me tomó unos 30 minutos mi primera vez.
ceejayoz
2
el lugar en una buena pregunta se estaba preguntando lo mismo con el mismo propósito]
codefreaK
Puede usar la función de replicación de MySQL o hay algunas herramientas disponibles que sincronizan la base de datos, se enumeran aquí stackoverflow.com/questions/52583/…
Peter Venderberghe

Respuestas:

60

La replicación no es muy difícil de crear.

Aquí hay algunos buenos tutoriales:

http://aciddrop.com/2008/01/10/step-by-step-how-to-setup-mysql-database-replication/

http://www.ghacks.net/2009/04/09/set-up-mysql-database-replication/

http://dev.mysql.com/doc/refman/5.5/en/replication-howto.html

http://www.lassosoft.com/Beginners-Guide-to-MySQL-Replication

Aquí algunas reglas simples que tendrás que tener en cuenta (hay más, por supuesto, pero ese es el concepto principal):

  1. Configure 1 servidor (maestro) para escribir datos.
  2. Configure 1 o más servidores (esclavos) para leer datos.

De esta forma evitarás errores.

Por ejemplo: si su secuencia de comandos se inserta en las mismas tablas tanto en el maestro como en el esclavo, tendrá un conflicto de clave primaria duplicada.

Puede ver el "esclavo" como un servidor "de respaldo" que contiene la misma información que el maestro pero no puede agregar datos directamente, solo siga las instrucciones del servidor maestro.

NOTA: Por supuesto, puede leer desde el maestro y puede escribir en el esclavo, pero asegúrese de no escribir en las mismas tablas (maestro a esclavo y esclavo a maestro).

Recomendaría monitorear sus servidores para asegurarse de que todo esté bien.

Avísame si necesitas ayuda adicional

Libro de Zeus
fuente
Sí, Tienda = maestro, Servidor = esclavo
Libro de Zeus
He configurado el maestro ahora y me voy a conectar a una base de datos esclava ... cuando haga esto, cualquier cambio en el maestro se reflejará en el esclavo y los cambios en el esclavo también se reflejarán en el maestro.
peedee
sí de inmediato si la configuración es buena. puede insertar un registro en el maestro y hacer una selección en el esclavo para probar. si eso pasa, ¡estás listo!
Libro de Zeus
Oye amigo ... Tengo el error 1045 en el esclavo. cual seria la razon de esto? tienes alguna idea?
peedee
ERROR 1045: Acceso denegado para el usuario: 'root @ localhost' (usando contraseña: NO) y dev.mysql.com/doc/refman/5.1/en/access-denied.html
Libro de Zeus
23

tres enfoques diferentes:

  1. Enfoque clásico cliente / servidor: no coloque ninguna base de datos en las tiendas; simplemente haga que las aplicaciones accedan a su servidor. Por supuesto, es mejor si configura una VPN, pero simplemente envolver la conexión en SSL o ssh es razonable. Ventaja: es la forma en que se pensaron originalmente las bases de datos. Desventaja: si tiene una latencia alta, las operaciones complejas pueden volverse lentas, es posible que deba utilizar procedimientos almacenados para reducir la cantidad de viajes de ida y vuelta.

  2. maestro / maestro replicado: como sugirió @Book Of Zeus. Contras: algo más complejo de configurar (especialmente si tiene varios talleres), romper cualquier máquina del taller podría comprometer potencialmente todo el sistema. Ventajas: mejor capacidad de respuesta, ya que las operaciones de lectura son totalmente locales y las operaciones de escritura se propagan de forma asincrónica.

  3. operaciones fuera de línea + paso de sincronización: haga todo el trabajo localmente y de vez en cuando (puede ser una vez por hora, diariamente, semanalmente, lo que sea) escriba un resumen con todos los registros nuevos / modificados de la última operación de sincronización y envíelo al servidor. Ventajas: puede trabajar sin red, rápido, fácil de verificar (si el resumen es legible). Contras: no tienes información en tiempo real.

Javier
fuente
10
Tengo el requisito de configurar el tercer tipo de sincronización de base de datos (operaciones fuera de línea + sincronización), me encantaría leer más sobre esto. No puedo buscar este en Google. ¿Hay un libro / artículo al que pueda hacer referencia?
abhishek77 en
10

SymmetricDS es la respuesta. Admite múltiples suscriptores con replicación de datos asincrónica en una dirección o bidireccional. Utiliza tecnologías web y de bases de datos para replicar tablas entre bases de datos relacionales, casi en tiempo real si se desea.

API de Java completa y robusta que se adapta a sus necesidades.

Komoo
fuente
Si tengo un servidor interno con una base de datos separada en algún área sin Internet, y tengo compradores en línea en la base de datos alojada en la web y quiero migrar las compras de la base de datos interna a la vida real, ¿puede indicar qué sucederá con los incrementos automáticos entre dos si ambos estuvieran reservando la misma identificación, sería complicado, ¿verdad? entonces (necesito sincronizar las operaciones realizadas en la base de datos interna en vivo sin afectar el incremento automático de ID y las relaciones entre tablas)
shareef