web-dev-qa-db-fra.com

Erreur: "impossible d'initialiser la structure d'informations maître" lors de la réplication maître esclave dans MySQL

J'essaie de faire la réplication maître esclave pour MySQL. Lorsque je tape la commande suivante:

CHANGE MASTER TO MASTER_Host='10.1.100.1', MASTER_USER='slave_user', MASTER_PASSWORD='slave_password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=451228;
mysql> START SLAVE;

il renvoie l'erreur suivante:

ERREUR 1201 (HY000): impossible d'initialiser la structure d'informations maître; plus de messages d'erreur peuvent être trouvés dans le journal des erreurs MySQL

Toute aide serait grandement appréciée.

41
user619684

ESSAYEZ DE LE RÉINITIALISER, C'EST MAGIQUE! SUR ESCLAVE, LE TYPE DE COMMANDE ESCLAVE MYSQL:

RESET SLAVE;

ESSAYEZ ENCORE:

CHANGE MASTER TO MASTER_Host='10.1.100.1', MASTER_USER='slave_user', MASTER_PASSWORD='slave_password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=451228;
mysql> START SLAVE;
143
Neo

Veuillez vérifier plusieurs choses:

1) Assurez-vous que le /etc/my.cnf du maître a effectivement défini server_id

Voici pourquoi: la réplication repose sur l'ID serveur. Chaque fois qu'une requête est exécutée et enregistrée dans le journal binaire du maître, l'ID serveur du maître est enregistré avec elle. Par défaut, si un server_id n'est pas défini dans /etc/my.cnf, le server_id est défini par défaut sur 1. Cependant, les règles de réplication MySQL exigent qu'un server_id soit explicitement défini dans /etc/my.cnf du maître. De plus, pour tout esclave donné, mysqld vérifie le server_id de l'instruction SQL pendant qu'il le lit dans le journal de relais et s'assure qu'il est différent du server_id de l'esclave. C'est ainsi que la réplication MySQL sait qu'il est sûr d'exécuter cette instruction SQL. Cette règle est nécessaire dans le cas où la réplication circulaire (Master-Master, MultiMaster) est implémentée.

utilisation select @@server_id; en ligne de commande sql pour vérifier vraiment la configuration sur le serveur.

2) Assurez-vous que /etc/my.cnf de l'esclave a effectivement défini server_id

Voici pourquoi: Même raison que dans # 1

3) Assurez-vous que le server_id dans le /etc/my.cnf du maître est différent du server_id dans le /etc/my.cnf de l'esclave

Voici pourquoi: Même raison que dans # 1

Remarque: si vous configurez plusieurs esclaves, assurez-vous que chaque esclave a un id_serveur différent de son maître et de ses esclaves frères.

Voici pourquoi: Exemple

Un maître avec 2 esclaves
MASTER a server_id 1
SLAVE1 a server_id 2
SLAVE2 a server_id 2

La réplication deviendra agressive paresseusement sur SLAVE2 car un frère frère a le même server_id. En fait, il prendra régulièrement du retard, fera une pause, traitera quelques instructions SQL. C'est la faute du maître pour avoir un ou plusieurs esclaves avec id_serveur identique. Il s'agit d'un piège qui n'est vraiment documenté nulle part. J'ai vu des dizaines de fois dans ma vie.

5
RolandoMySQLDBA