MySQL: si server_id no se establece explícitamente, a continuación, obtener el error `ERROR 1200 (HY000) en la línea 1: El servidor no está configurado como esclavo;`

dba.stackexchange https://dba.stackexchange.com/questions/4400

  •  16-10-2019
  •  | 
  •  

Pregunta

Nuestra versión de MySQL es "mysql Ver 14,14 Distrib 5.1.35, por portbld-freebsd7.2 (amd64) utilizando 5.2"

Tenemos dos servidores de bases de datos con la replicación, en una simple relación maestro / esclavo. mysql2 es el maestro, mysql1 es el esclavo. Hace un año, mysql era el maestro y el esclavo era mysql2. Tuvimos que invertir sus roles durante un fallo de hardware.

En el maestro, que establece explícitamente la server_id (server-id)

[root@mysql2 ~]# grep server-id my.cnf
server-id       = 2
[root@mysql2 ~]# mysql -e "SHOW VARIABLES LIKE 'server_id'"
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 2     | 
+---------------+-------+

Sin embargo, este ajuste no se encuentra en my.cnf en el esclavo.

[root@mysql1 ~]# grep server-id my.cnf

Los chillidos. Esto no debería importar, porque el server_id se establece en 1 por defecto.

[root@mysql1 ~]# mysql -e "SHOW VARIABLES LIKE 'server_id'"
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 1     | 
+---------------+-------+

Si recomienzo MySQL, entonces la replicación no tendrán ningún problema.

Sin embargo, si manualmente "STOP SLAVE" "START SLAVE", me sale un error:

[root@mysql1 ~]# mysql -e "STOP SLAVE;"
[root@mysql1 ~]# mysql -e "START SLAVE;"
ERROR 1200 (HY000) at line 1: The server is not configured as slave; fix in config file or with CHANGE MASTER TO

¿Por qué aparece este error cuando no establece explícitamente un valor en my.cnf? ¿Por qué funciona la replicación cuando reinicio, pero no cuando "STOP SLAVE;" "START SLAVE;"?

  • Parece ser que MySQL asigna un valor por defecto a la server_id variable.
  • Según el my.cnf defecto, el server_id será por defecto 1

    # required unique id between 1 and 2^32 - 1 
    # defaults to 1 if master-host is not set 
    # but will not function as a master if omitted 
    #server-id  = 1 
    

La solución es establecer explícitamente id_servidor en my.cnf, según lo sugerido por Baron Schwartz en http://www.xaprb.com/blog/2007/08/01/why-mysql-server-not-configured-as-slave/

server-id = 1

¿Fue útil?

Solución

Dos servidores no se les permite tener la misma server_id. Además, Si omite --server-id de un maestro , el ID por defecto es 0, en cuyo caso un maestro se niega conexiones desde todos los esclavos, y un esclavo se niega a conectarse a un maestro .

Para obtener más información, véase la Sección 15.1.1.2, “Ajuste de la configuración del esclavo de replicación” .

Aunque ambos servidores tienen diferentes valores server_id, por favor asegúrese de que el nuevo maestro tiene registro binario activado .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a dba.stackexchange
scroll top