MySQL: si server_id est pas explicitement définie, puis obtenir une erreur `ERROR 1200 (HY000) à la ligne 1: le serveur est configuré en tant qu'esclave pas;`

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

  •  16-10-2019
  •  | 
  •  

Question

Notre version MySQL est "mysql Ver 14,14 Distrib 5.1.35, pour portbld-freebsd7.2 (amd64) en utilisant 5.2"

Nous avons deux serveurs de bases de données avec la réplication, dans une simple relation maître / esclave. mysql2 est le maître, l'esclave est mysql1. Il y a un an, mysql était le maître et l'esclave était mysql2. Nous avons dû inverser leur rôle lors d'une défaillance matérielle.

Sur le maître, nous avons mis explicitement l'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     | 
+---------------+-------+

Mais, ce paramètre n'a pas été défini dans my.cnf sur l'esclave.

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

Whoops. Cela ne devrait pas question, parce que le server_id est réglé sur 1 par défaut.

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

Si je redémarre mysql, la réplication fonctionnera très bien.

Cependant, si je manuellement "STOP SLAVE" "START SLAVE", je reçois une erreur:

[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

Pourquoi est-ce que je reçois cette erreur quand je ne mets pas explicitement une valeur dans my.cnf? Pourquoi le travail de réplication lorsque je redémarre, mais pas quand je « STOP SLAVE; » "START SLAVE;"?

  • Il semble que MySQL attribué une valeur par défaut à la server_id variable.
  • Selon le my.cnf par défaut, le server_id par défaut à 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 
    

Le correctif est serveur-id dans my.cnf explicitement ensemble, comme suggéré par le baron Schwartz à http://www.xaprb.com/blog/2007/08/01/why-mysql-server-not-configured-as-slave/

  

server-id = 1

Était-ce utile?

La solution

Deux serveurs ne sont pas autorisés à avoir le même server_id. En outre, Si vous omettez --server-id d'un maître , l'identifiant par défaut est 0, auquel cas un maître refuse les connexions à partir de tous les esclaves, et un esclave refuse de se connecter à un maître.

Pour plus d'informations, voir la section 15.1.1.2, « Réglage de la configuration des esclaves de réplication » .

Même si les deux serveurs ont des valeurs différentes de server_id, s'il vous plaît assurez-vous que le nouveau maître a log binaire activé .

Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top