MySQL Master-Master Replicación de TODAS las bases de datos. ¿Cómo?

16

Antecedentes : tengo dos servidores MySQL 5.1 configurados en la replicación basada en filas Master-Master (RBR) siguiendo esta excelente guía . Quiero todas las bases de datos replicadas, y agregaré nuevas bases de datos regularmente.

Objetivo : me gustaría poder agregar nuevas bases de datos a la replicación simplemente agregando la base de datos a uno de los servidores; sin tener que detener a ambos esclavos, cambiar los archivos de configuración, reiniciar los servidores MySQL e iniciar los esclavos nuevamente.

Pregunta : Por lo que he leído, yo creo que puedo hacer esto simplemente omitiendo alguna binlog-do-db, binlog-ignore-db, replicate-do-db, y replicate-ignore-dbajustes en la configuración de cada servidor, pero no puedo estar seguro. Los documentos de MySQL sobre cómo se evalúan las opciones de replicación a nivel de base de datos y tabla me hacen pensar que podría no haber forma de lograr esto.

Las partes relevantes de mis /etc/mysql/my.cnfarchivos se copian a continuación. ¿Estoy en el camino correcto? ¿Es posible lo que quiero?

Maestro 1 :

[mysqld]
binlog-format = row
server-id = 1
replicate-same-server-id = 0
auto-increment-increment = 2
auto-increment-offset = 1

master-host = <master2_ip>
master-user = slave_user
master-password = <password>
master-connect-retry = 60

log-bin = /var/log/mysql/mysql-bin.log
relay-log = /var/lib/mysql/slave-relay.log
relay-log-index = /var/lib/mysql/slave-relay-log.index
expire_logs_days = 14
max_binlog_size = 2048M

Master 2 :

[mysqld]
binlog-format = row
server-id = 2
replicate-same-server-id = 0
auto-increment-increment = 2
auto-increment-offset = 2

master-host = <master1_ip>
master-user = slave_user
master-password = <password>
master-connect-retry = 60

log-bin = /var/log/mysql/mysql-bin.log
relay-log = /var/lib/mysql/slave-relay.log
relay-log-index = /var/lib/mysql/slave-relay-log.index
expire_logs_days = 14
max_binlog_size = 2048M
Andrew Ensley
fuente
1
Cree la base de datos en la máquina a la que dirige las escrituras.
Martin
¿Cuál es tu configuración completa? Intento la siguiente respuesta, no funcionó :-(
zx1986

Respuestas:

17

Así lo hice para ambos maestros

log-bin = mysqld-bin
binlog-ignore-db=test
binlog-ignore-db=information_schema
binlog-ignore-db=mysql
log-slave-updates
replicate-ignore-db=test
replicate-ignore-db=information_schema
replicate-ignore-db=mysql
relay-log=mysqld-relay-bin
Miguel
fuente
¿Puede agregar bases de datos a cualquiera de los maestros y hacer que se repliquen automáticamente en el otro?
Andrew Ensley
sí lo hicieron ... acabo de configurar cuáles ignorar
Mike
1
Dos preguntas: solo necesito asegurarme de que los dos estamos diciendo lo mismo. # 1 ¿Puede agregar una base de datos a uno de los dos maestros y se crea en el otro automáticamente, y luego todos los datos insertados en la nueva base de datos se replican sin cambiar la configuración o reiniciar los servidores? # 2 ¿Está utilizando la replicación basada en sentencias o en filas? Necesito todos los cambios en todas las bases de datos replicadas; incluso aquellos que se ejecutan sin una declaración de "uso" de antemano. ¿Funcionará bien esta configuración con la replicación basada en filas?
Andrew Ensley
3
sí sí sí sí sí :)
Mike
1
Ok, anoche configuré mis servidores usando estas configuraciones. Me salteé la log-slave-updatesconfiguración porque no vi la necesidad. Todo funciona a la perfección. Puedo agregar y quitar bases de datos y los cambios se replican. ¡Gracias! Recompensa otorgada.
Andrew Ensley
4

Con respecto a la creación de bases de datos, todavía hay informes de errores sobre el uso de CREATE DATABASE con replicación basada en filas.

Este informe está cerrado, pero el error apareció nuevamente en MySQL 5.1.47.
Este informe se basa en MySQL Cluster (motor de almacenamiento NDB).
Este informe se basa en replicar-wild-ignore-table que aún se replica.

La replicación basada en filas hace que los registros binarios crezcan a una velocidad extraordinaria que puede aumentar el tráfico de la red simplemente enviando datos de registros binarios a los registros de retransmisión del esclavo.

@ Mike dice que consiguió que la creación de la base de datos funcionara y se replicara perfectamente No lo dudo en absoluto. Lo que soy es un poco cauteloso de que MySQL (eh Oracle) no haya logrado todos los inconvenientes de la replicación basada en filas una vez que se instancia la base de datos.

Es posible que desee cambiar a row_format MIXED si aún desea entradas basadas en filas en los registros binarios. Internamente, el formato de registro binario tiende a flotar entre la instrucción y el fijo de todos modos: (Ver http://bugs.mysql.com/bug.php?id=40146 ). Se cierran más informes de errores usando mixto y rehuyendo de los basados ​​en filas ( http://bugs.mysql.com/bug.php?id=39701 ) pero los problemas persisten de forma intermitente.

NOTA FINAL

Para su propia cordura, vuelva a la replicación basada en instrucciones y haga que CREATE DATABASE (que es una instrucción SQL) estable y consistente para el SQL posterior en la base de datos creada. De hecho, el informe de error más reciente muestra que es mejor usar la replicación basada en declaraciones, independientemente de lo que diga la documentación sobre las opciones de nivel de base de datos y nivel de tabla.

RolandoMySQLDBA
fuente
Gracias por toda la información. Mi único problema con la replicación basada en sentencias es que los cambios que especifican la base de datos (es decir, "INSERT INTO db1.table1 (col1) VALUES ('hi');") no funcionarán a menos que la base de datos sea la base de datos actual en uso. Supongo que puede ser el momento de cambiar a la declaración basada en la replicación y limpiar algo de código ...
Andrew Ensley
Resulta que no fue tan difícil arreglar el código necesario. Estoy usando la replicación basada en instrucciones ahora. Gracias por el consejo.
Andrew Ensley
0

Hmm ... También tendrás que encontrar una manera de manejar / diferenciar las teclas y campos de incremento automático. Esto se ve interesante .. http://mysql-mmm.org/

Nandhini Anand
fuente
Esto se maneja en la configuración auto-increment-incrementy auto-increment-offseten mis archivos de configuración. Vea esta página: dev.mysql.com/doc/refman/5.1/en/…
Andrew Ensley
Creo que lo malinterpretas. @ Andrew está hablando de agregar nuevas bases de datos, no de agregar nuevos servidores de bases de datos. Si @Andrew estaba introduciendo nuevos servidores de bases de datos, entonces podría haber colisiones clave al redistribuir los datos entre 3 o más servidores DB, que su respuesta abordaría. +1 por su esfuerzo, pero lea todas las preguntas detenidamente. Me han quemado de la misma manera también.
RolandoMySQLDBA
@todos: Vaya ... lo siento. Podría jurar que lo leí completo, pero no debe haberlo leído en su lugar ...
Nandhini Anand
-1

cmiiw pensé que deberías poder crear una base de datos en master1 y master2 sin cambiar la configuración o detener el esclavo, pero asegúrate de que la réplica master - master se esté ejecutando. porque no define qué base de datos necesita replicarse, significa que todas las bases de datos se replicarán si no las define en my.cnf.

chocripple
fuente
Eso es exactamente lo que estoy preguntando aquí. No puedo encontrar una respuesta definitiva sobre esto hasta ahora.
Andrew Ensley