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;`
-
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
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é .