replicación mysql exitosa pero el esclavo no replica

8

He creado una configuración mysql maestro-esclavo y las cosas se ven bien. el "mostrar estado maestro"; en esclavo no muestra ningún error. esta es la salida

 Slave_IO_State: Waiting for master to send event
                  Master_Host: 109.123.100.58
                  Master_User: replica
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 106
               Relay_Log_File: relay-bin.000001
                Relay_Log_Pos: 4
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 106
              Relay_Log_Space: 106
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 

Sin embargo, en la replicación en esclavo no parece estar sucediendo cuando el maestro sufre cambios

En el maestro. MOSTRAR ESTADO MAESTRO

+------------------+----------+--------------+-------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB        |
+------------------+----------+--------------+-------------------------+
| mysql-bin.000001 |   639495 |              | mysql,informationschema |
+------------------+----------+--------------+-------------------------+

en esclavo SHOW PROCESSLIST rinde

+-----+-------------+-----------+------+---------+-------+-----------------------------------------------------------------------+------------------+
| Id  | User        | Host      | db   | Command | Time  | State                                                                 | Info             |
+-----+-------------+-----------+------+---------+-------+-----------------------------------------------------------------------+------------------+
| 174 | system user |           | NULL | Connect | 25777 | Waiting for master to send event                                      | NULL             |
| 175 | system user |           | NULL | Connect | 25777 | Has read all relay log; waiting for the slave I/O thread to update it | NULL             |
| 199 | root        | localhost | NULL | Query   |     0 | NULL                                                                  | show processlist |
+-----+-------------+-----------+------+---------+-------+-----------------------------------------------------------------------+------------------+
3 rows in set (0.00 sec)

Me estoy perdiendo de algo

Soyeed
fuente
Dos preguntas. ¿Tiene la misma versión de MySQL ejecutándose en maestro y esclavo? ¿Tiene un ID de servidor diferente configurado en la configuración para el maestro / esclavo? editar: ¿podemos ver el completo SHOW MASTER STATUStambién? Falta el bit superior, creo.
lo siento, mi error, el bit superior fue la salida para SHOW SLAVE STATUS \ G. muestra el estado del maestro en los rendimientos de esclavos + ------------------ + ---------- + ------------- - + ------------------------- + | Archivo | Puesto | Binlog_Do_DB | Binlog_Ignore_DB | + ------------------ + ---------- + -------------- + ---- --------------------- + | mysql-bin.000004 | 106 El | mysql, informationschema | + ------------------ + ---------- + -------------- + ---- --------------------- +
Soyeed
No mirar SHOW MASTER STATUSen el esclavo . Esta información no es relevante a menos que el esclavo también sirva como maestro para otros esclavos más abajo.
Michael - sqlbot
Si está SHOW PROCESSLISTen el maestro, ¿ve la conexión entrante del esclavo? Debieras. También, me gustaría probar STOP SLAVE IO_THREAD;a continuación, START SLAVE IO_THREAD;en el esclavo y ver cómo la salida de SHOW SLAVE STATUS(en el esclavo) cambia, en todo caso.
Michael - sqlbot

Respuestas:

5

El resultado que presentó es muy confuso. Por un lado, el maestro muestra:

mysql-bin.000001   639495 

El esclavo PROCESSLISTindica que la replicación funciona (el hilo IO está conectado al maestro, el hilo SQL está esperando).

El esclavo SHOW SLAVE STATUSnuevamente afirma que todo está bien, pero la posición del amo lo es 106.

¿Se emiten todas estas salidas aproximadamente al mismo tiempo? Si no, entonces no son valiosos.

Comprobaría lo siguiente:

  • Lo obvio: ¿es 109.123.100.58realmente tu maestro?
  • ¿ SHOW PROCESSLISTEn la lista maestra la conexión realizada por el esclavo bajo el replicausuario?
  • ¿Tiene diferentes server-idconfiguraciones para maestro y esclavo?
  • ¿Tiene alguna replicate-do-*o replicate-ignore-*ajustes en el mysql.cnfarchivo?
Shlomi Noach
fuente
Sí, la salida es al mismo tiempo. 1. sí 109.123.100.58 es el maestro. 2. no 3. sí 4. no. Mostrar lista de procesos en espectáculos maestros '+-------+------+-----------+------+---------+------+-------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +-------+------+-----------+------+---------+------+-------+------------------+ | 23243 | root | localhost | NULL | Query | 0 | NULL | SHOW PROCESSLIST | +-------+------+-----------+------+---------+------+-------+------------------+
Soyeed
3
2-no ?? Más raro por minutos. No estoy seguro de que tu esclavo esté realmente conectado al maestro correcto.
Shlomi Noach
1
¡Gracias por el consejo! En mi caso, tuve la replicación M-> S1-> S2, y mi id de servidor S2 coincidía con mi id de servidor M.
Aaron R.
1

Mejor que usar binlog-ignore-db es usar el filtrado del lado esclavo. Estaba atrapado en una situación similar, sí, me llevó todo un día descubrirlo:

Me perdí algo grande !!!

La diferencia entre

--replicate-do-db=
--replicate-do-table=

En el lado esclavo. Y

--replicate-do-table='mydb.%'

no funcionó para mí en la mesa. Tuve que usar

--replicate-do-db='mydb'

Supongo que esto hubiera funcionado para un comodín

--replicate-wild-do-table='mydb.%'

... Ahora para descubrir cómo replicar la misma tabla de múltiples maestros. Bien, lo descubrí, MySQL no lo admite de forma nativa; MariaDB 10 hace.

También tuve otro problema inicialmente: mi contraseña tenía más de 32 caracteres. ¡Abucheo!

Dagelf
fuente
1

También me encontré con este problema. La causa raíz era tener el maestro server_id=0. MariaDB tiene un comportamiento especial para el server_id=0cual no permitirá que la replicación funcione.

Server_id debe ser único para cada servidor en el grupo de replicación. Si se deja en 0, el valor predeterminado hasta MariaDB 10.2.1, un esclavo no se conectará a un maestro, y un maestro rechazará todas las conexiones esclavas.

Cuando comencé a indexar en base a 1, todo funcionó bien.

Ryan Goodfellow
fuente
-2

No le dijo al esclavo qué base de datos replicar: la variable Replicate_Do_DB está vacía.

Intenta agregar la línea

replicate-do-db = name_of_db (donde "name_of_db" es el nombre de la base de datos para replicar)

en su my.cnf (en esclavo) y reinicie el servidor esclavo.

EDITAR: No creo que mi respuesta sea la solución correcta, mientras tanto ;-)

Quizás eche un vistazo a esta página: http://dev.mysql.com/doc/refman/5.1/en/replication-problems.html

Chris
fuente
No creo que sea correcto. Puede ver que 639495 bytes se han registrado en el binlog del maestro
La pregunta es por qué la replicación no funciona, no si se escribió algo en el binlog. Por lo general, el comando SHOW MASTER STATUS no muestra más información.
lo siento, mi mal ... muestra los rendimientos del estado de maestro+------------------+----------+--------------+-------------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+-------------------------+ | mysql-bin.000004 | 106 | | mysql,informationschema | +------------------+----------+--------------+-------------------------+
Soyeed
También me dijeron que si no me refiero a replicate-do-db, replica todas las bases de datos. en su lugar tuve elentry binlog_ignore_db = mysql binlog_ignore_db = informationschema
Soyeed
1
No siga los consejos en esta respuesta, ya que no necesita decirle a la base de datos qué esquema replicar (por defecto para todos los esquemas), y esto posiblemente rompería su replicación, y probablemente no sea lo que está buscando. Desea (99.999%) replicar todos los esquemas.
Shlomi Noach