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