¿Puede un esclavo MySQL ser un maestro al mismo tiempo?

17

Estoy en el proceso de migrar 2 servidores DB (maestro y esclavo) a dos nuevos servidores DB (maestro y esclavo)

DB1 - Master (producción)

DB2 - Esclavo (producción)

DB3 - Nuevo maestro

DB4 - Nuevo esclavo

Actualmente tengo la replicación configurada como:

DB1 -> DB2
DB3 -> DB4

Para replicar los datos de producción en los nuevos servidores, me gustaría "encadenarlos" para que se vea así:

DB1 -> DB2 -> DB3 -> DB4

es posible? Cuando ejecuto show master status;en DB2 (el esclavo de producción), la posición de binlog nunca parece cambiar:

+ ------------------ + ---------- + -------------- + ---- -------------- +
El | Archivo | Puesto | Binlog_Do_DB | Binlog_Ignore_DB |
+ ------------------ + ---------- + -------------- + ---- -------------- +
El | mysql-bin.000020 | 98 El | El |
+ ------------------ + ---------- + -------------- + ---- -------------- +

Estoy un poco confundido sobre por qué la posición del binlog no está cambiando en DB2, idealmente será el maestro de DB3.

mmattax
fuente

Respuestas:

9

Sí, es posible :) Esto se llama replicación "Master with Relay Slave" y hay muchos documentos al respecto en la red.

Te recomiendo que eches un vistazo a la documentación oficial aquí .

Por cierto, también eche un vistazo a estas diapositivas . Tienen algunos consejos sobre topologías de replicación.

Espero que esto ayude.

Marco Ramos
fuente
3

Sí, puede conectar en cadena servidores MySQL, incluso puede hacer una replicación circular con dos o más máquinas. solo recuerde habilitar binloging en esclavo que también actúa como maestro.

pQd
fuente
1
La replicación circular es increíblemente frágil. Es desaconsejable en la mayoría de las circunstancias.
Warner
@Warner: este fue solo un ejemplo de una configuración de replicación aún más complicada.
pQd
Los amigos no permiten que los servidores mysql se conecten en cadena.
sjas
@sjas a menos que tengan una razón muy específica para hacerlo y entiendan las posibles consecuencias de romper la cadena.
pQd
Lo siento, pero todavía no. La complejidad siempre te persigue más tarde.
sjas
0

Sí, es posible. Siendo realistas, necesita una nueva instantánea de DB2 para construir DB3. En ese punto, si tiene una buena posición, puede usarlo para DB4 o tomar otra instantánea de DB3.

No olvide establecer un único server_idpara cada servidor.

High Performance MySQL es un gran libro para hacer referencia a una administración MySQL más avanzada.

Warner
fuente
Actualmente, DB2 es solo un esclavo, pero su posición binlog no está cambiando ... ¿Sabes si eso es normal?
mmattax
El esclavo (DB2) está actualizado con el maestro, pero la posición del binlog no está cambiando, ¿qué debo verificar?
mmattax
Sí, he confirmado que puedo cambiar los datos en DB1 y están replicados en DB2, pero la posición binlog de DB2 es la misma.
mmattax
Creo DB @ no está registrando cambios de esclavos, de ahí la posición no está cambiando: dev.mysql.com/doc/refman/5.1/en/...
mmattax
0

¿Por qué no simplemente agregar DB3 como un nuevo esclavo y luego promoverlo a maestro cuando esté listo para hacer el cambio? Esto le daría el beneficio adicional temporal de tener múltiples esclavos, y reduciría o eliminaría su tiempo de inactividad.

Phuzion
fuente
eso es exactamente lo que estoy haciendo ...
mmattax