MySQL: se server_id non è impostato in modo esplicito, quindi ottenere l'errore `ERRORE 1200 (HY000) alla linea 1: Il server non è configurato come slave;`

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

  •  16-10-2019
  •  | 
  •  

Domanda

La nostra versione di MySQL è "mysql Ver 14.14 Distrib 5.1.35, per portbld-freebsd7.2 (amd64) usando 5.2"

Abbiamo due server di database con la replica, in una semplice relazione master / slave. mysql2 è il padrone, mysql1 è lo schiavo. Un anno fa, mysql era il padrone e mysql2 era schiavo. Abbiamo dovuto invertire i loro ruoli nel corso di un guasto hardware.

Nel master, abbiamo impostato in modo esplicito il 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     | 
+---------------+-------+

Ma, questa impostazione non è stato fissato nel my.cnf dello slave.

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

Ops. Questo non dovrebbe importare, perché la server_id è impostato su 1 per impostazione predefinita.

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

Se ricomincio mysql, allora la replica funzionerà bene.

Tuttavia, se manualmente "STOP SLAVE" "AVVIO SLAVE", ottengo un errore:

[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

Perché ricevo questo errore quando non imposto in modo esplicito un valore in my.cnf? Perché il lavoro di replica quando si riavvia, ma non quando "STOP SLAVE;" "AVVIO SLAVE;"?

  • Sembra che mysql assegnato un valore di default per il server_id variabile.
  • Secondo il my.cnf di default, il server_id imposterà 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 correzione è per esplicitamente server set-id in my.cnf, come suggerito da Baron Schwartz a http://www.xaprb.com/blog/2007/08/01/why-mysql-server-not-configured-as-slave/

Server-id = 1

È stato utile?

Soluzione

Due server non sono autorizzati ad avere la stessa server_id. Inoltre, Se si omette --server-id da un maestro , l'ID di default è 0, nel qual caso un maestro rifiuta le connessioni da tutti gli slave, e uno schiavo non si collega ad un master .

Per ulteriori informazioni, vedere la Sezione 15.1.1.2, “Impostazione della configurazione slave replica” .

Anche se entrambi i server hanno diversi valori server_id, si prega di assicurarsi che il nuovo master ha registrazione binaria attivata.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a dba.stackexchange
scroll top