Replicacion bidireccional en mysql

Iniciado por diego_lp, 18 Enero 2010, 22:16 PM

0 Miembros y 1 Visitante están viendo este tema.

diego_lp

Hola a todos de nuevo, tel vez esté siendo un poco pesado pero es que no se mucho de base de datos.  :xD
No logro encontrar informacion sobre alguna utilidad (gratuita al menos) para replicar una base de datos en 2 servidores distintos mysql.
Lo unico que eh encontrado es un programa llamado SQLBalance pero es pago  >:(.
Tambien eh leido que a partir de la proxima versión (la 6 si no recuerdo mal) se podran hacer replicaciones bidireccionales ya que hasta el momento solo se pueden hacer replicaciones unidireccionales  :huh:
Bueno tal vez a alguien se le ocurra algo para este tema  ;-)
Muchas gracias.
Saludos.
Los programadores hicimos un pacto con Dios, él no hace sistemas y nosotros no hacemos milagros!

^Tifa^

Tranquilo, no tienes necesidad de buscar herramientas de terceros para ello  ;)  el mismo motor MySQL puedes configurar varios motores MySQL en diferentes servidores para distribuir la carga si es un tema que te preocupa. Solo debes configurar uno de los motores MySQL como Maestro y el o los otros como esclavos de ese maestro. Asi podrias por ejemplo, designar el maestro como el que recibira la escritura (todos los INSERTS) y declarar el o los esclavos de los otros servidores como los que recibiran la lectura (SELECT) lo que haras es una replica del motor MySQL 'maestro-esclavo' estan sincronizados entre si. La configuracion no es complicada, mantenerlos aveces requiere tiempo y paciencia, un link que te podria ayudar de mas referencia:

http://dev.mysql.com/doc/refman/5.0/es/replication-faq.html

Ahora si tienes varios servidores apropiados (con discos SCSI en RAID y todo eso) podrias considerar MySQL Cluster server en vez del que usamos todos MySQL Community Server.

http://dev.mysql.com/downloads/cluster/

Ahora si aun asi quieres utilizar una herramienta de terceros para distribuir la carga y sacarle el mayor provecho a tu memoria ram, esta Memcached.

http://www.webtutoriales.com/tutoriales/linux/instalar-memcached.83.html

El cual puedes implementar como modulo dentro de distintos lenguajes, o directamente dentro del motor MySQL como funciones UDF (Un poco mas complicado si nunca has compilado funciones de usuarios dentro del motor MySQL).

Aunque claro esta lo mas economico, rapido y facil es considerar configurar varios motores MySQL como Maestro-Esclavo.



diego_lp

Gracias ^TiFa^ por la respuesta, el tema es que yo quiero que se sincronizen de alguna manera ambos servidores, es decir, quiero poder insertar registros (por ejemplo) en cualquiera de los 2 y que automaticamente se actualize la otra base de datos, ya habia leido sobre lo que dijiste de Maestro - Esclavo, pero si no eh entendido mal eso solo es unidereccional, y yo quiero que sea bidereccional, que en ambos se utilizen los select`s y los insert`s. ¿Eso tambien es posible desde mysql?
Muchas gracias por todas tus opciones y explicaciones.  ;-)
Los programadores hicimos un pacto con Dios, él no hace sistemas y nosotros no hacemos milagros!

^Tifa^

Hasta lo que me consta se puede tener replicacion Maestro-Maestro-esclavos. Pero no tendria mucha ventaja la verdad tener varios Maestros (que requeriran mas servidores 1 independiente para cada uno a no ser que quieras saturar 1 servidor con varios maestros corriendo a la vez). Ya que el objetivo de las replicas es intentar distribuir la carga entre servidores MySQL y de paso tener un respaldo preparado por si uno de los Maestros falla.

Es mas favorable que distribuyas los INSERTS al Maestro o Maestros y los SELECT al esclavo o los esclavos, puesto que no tiene mucho sentido montarse varios Maestros replicandose si a la larga toda la carga INSERT y SELECT y UPDATE iria hacia ellos... Para eso dejaria 1 solo motor MySQL corriendo.


sempus

Hola ^TiFa^

no quiero abrir un tema nuevo para tratar esto mismo xD

sabes, creo que tu no le ves mucho sentido a lo que plantea diego_lp pero quiza porque hablamos de necesidades distintas, yo comprendo perfectamente el porque diego_lp desea trabajar de esta forma, es algo que yo me pregunte en su momento y me quede igual con la duda xD.

la necesidad (hablando de mi caso particular) es que en donde laboro hay 7 sucursales con 7 bases de datos distintas (una por sucursal) con 7 servidores (uno por sucursal) pero que son servidores solo por tener el sistema windows server y no porque en hardware lo sean, aparte de esto, hay una cede central que si posee un servidor en hardware y sistema operativo, que este tiene los datos de las 7 sucursales, osea la base de datos es muy grande a medida pasa el tiempo, aca nosotros tenes la necesidad (no resuelta xD) de replicar los datos entre estas 7 sucursales entre si, porque si estas en una sucursal (sucursal1), esta tiene que ver la existencia de todas la demas (las 6 restantes) asi como las otras 6 ver las existencias de sucursal1, aparte de esto, la cede central tiene movimientos de ordenes de compras nacionales y extranjeras, y los datos tienen que ser vistos desde las 7 sucursales, porque si algun cliente pregunta si tienen X producto y en ninguna sucursal hay existencia para efectuar un translado, entonces, el cliente pregunta si ya se pidio y cuando entra, por este motivo los datos de la cede central deben estar en las 7 bases de datos, ahora bien, claro que podriamos evitar la redundancia de datos, haciendo que el sistema consulte a la base central, pero no lo hemos hecho de esta forma por una sola razon, el dia que el internet falle nos lloveran puteadas xD y aunque nosotros no tengamos la culpa a ellos no les importa (a los jefes de sucursales) por lo tanto, la unica opcion que encontramos es correr una rutina cada 30 minutos para que los datos entre si solo tengan un retraso de 30 minuto entre sucursales y cede central, ahora bien, esto funciona casi perfectamente, hasta que, por una de esas cosas de la vida, nos dimos cuenta, que en registros "especificos" nos puede ocurrir duplicacion de datos en la base de la cede central, cosa que podemos enmendar siempre y cuando sepamos que origino esta duplicacion, pero la cosa, es que creo que seria mas facil si fuera una replicacion que haga internamente algun motor (MySql en este caso), ya que el motor que nosotros usamos no tiene este funcionalidad, el caso, es que como no sabiamos si esto se puede hacer no le metimos mano, ya que diego_lp lo trae a colacion y puesto que a mi me interesa, me gustaria saber si esto es posible?, necesitamos un motor distinto por el simple hecho de los SELECT, ya que trabajo reportes en los que cuando una tabla pasa de un millon de registros y los filtros al parecer no me funcionan tan bien con un indice compuesto ,me veo en la necesidad de migrar a un motor que sea mucho mejor, en este caso, hemos pensado hacerlo en MySql, dime ^TiFa^, lo que plantee se puede hacer con MySql?

Thks!

salu2
...si la tuviera detendría el tiempo para verla como lo hago en este momento y seria feliz eternamente...
Descarga openSUSE

^Tifa^

Lo que diego_lp se refiere es un poco distinto a lo que ahora me preguntas sempus.

La situacion de diego_lp no es tanto que no conozca sobre replicacion en MySQL (Porque esta funcionalidad existe) en el caso de el, el queria tener mas de 1 servidor Maestro para realizar INSERTS entonces yo le dije que si ese es su objetivo que considere MySQL Cluster (Otro motor de DB) en vez del tipico MySQL Community Server (El que todos usamos).

Ahora Sempus en tu caso, hay 7 sucursales y en cada una un servidor MySQL. Puedes ahorrarte sobremanera tener que tener una tarea programada que cada 30 minutos envie la data por red a los 7 servidores... considera enormemente configurarte al menos 1 o 2 Servidores Maestros y el resto de los servidores de las sucursales de Esclavos. Asi la Data estara siempre sincronizada en las 7 sucursales sin necesidad de usar tareas programadas ni nada.

Ahora, porque te digo de usar 1 o 2 servidores MySQL Maestros meramente si sabes que tienes grandes cantidades de INSERT y UPDATE usa 2 maestros, pero si sabes que no son tan abundantes los INSERTS y UPDATES usa 1 solo Maestro. los otros 6 servidores MySQL usalos de esclavo para los SELECTS, asi distribuyes mejor la carga de tu banda ancha entre los 7 servidores. El maestro en este caso solo lo tendras para realizar los INSERTS y los UPDATES (Ademas de automaticamente replicar estos cambios en los otros 6 esclavos de las demas sucursales). Los esclavos podras dividirte como mas te convenga y distribuir por ejemplo 3 esclavos a 3 sucursales para los SELECTS y los otros 3 esclavos para las otras 3 sucursales para sus SELECTS. Asi te aseguro te ahorraras muchisima banda ancha, y todos tendran sus datos sincronizados y actualizados...

Te recomiendo que averigues mas sobre como configurar la Replicacion entre 2 o mas servidores MySQL.


BitGenix

Gracias ^Tifa^ por tus comentarios. Tengo exactamente la misma necesidad de sempus. Analizando lo que explicas, aun no le veo el sentido como se sincronizaran todas las sucursales entre si y con la cede central.

La pregunta facil seria: Cualquier cambio que ocurra (insert,update) en cualquiera de las bases de datos de la sucursales y cede central se sincronizaran automaticamente dentro de un tiempo razonable?

Solo quiero ver el panorama de que todas las sucursales se quedaron sin internet, pero siguieron trabajando offline. Cuando llega el Internet, la magia seria que despues de la sincronizacion cada una de las sucursales y la central tuvieran localmente de nuevo el mismo contenido entre todas (y ya preparadas por si se vuelve a caer el internet).

Iba a comenzar a escribir mi propio codigo para que esto suceda (no lo veo dificil). Solo que si se puede hacer esto ya de una forma nativa, me ahorraria tiempo y neuronas :)

Saludos...