Comment changer un ancien esclave MySQL pour être un maître et supprimer les informations sur le statut de l'esclave?

10

J'ai une configuration maître -> esclave où le maître a échoué. J'ai pu réinitialiser l'ancien esclave pour qu'il devienne un maître et l'ancien maître pour qu'il en devienne esclave. Bien.

Ce que je n'arrive pas à faire, c'est de supprimer les informations du maître sur l'ancien esclave qui est maintenant le nouveau maître. Je vois:

mysql> show slave status \G
*************************** 1. row ***************************
           Slave_IO_State: 
              Master_Host: 10.1.2.101
              Master_User: replicationSlave
              Master_Port: 3306
              ...
              Slave_IO_Running: No
              Slave_SQL_Running: No

J'ai lu beaucoup de documentation MySQL mais je n'ai toujours pas trouvé de moyen d'effacer les informations sur l'esclave du nouveau maître. J'ai essayé:

  1. RESET SLAVEce qui ne semble pas effacer ces paramètres. [[En fait, il supprime le master.infofichier mais pas les paramètres de mémoire. Voir ci-dessous.]]
  2. CHANGE MASTER TO MASTER_HOST='' qui crache juste sur une erreur car elle a été dépréciée récemment.
  3. Vérification my.cnfqui ne contient pas les informations de base car elles ont été ajoutées par programme.
  4. RESET MASTERparce que certains docs mysql l'ont recommandé. Cela réinitialise uniquement les journaux de bacs.
  5. Fouiller dans les tables internes de MySQL pour voir si je peux trouver les champs à effacer.

Quelle est la bonne façon de le faire sur MySQL ~ 5.5.9? Merci pour toute aide.


Éditer:

Il s'avère donc que RESET SLAVEle master.infofichier est supprimé comme @RolandoMySQLDBA le sous-entend. Cependant, vous devez toujours redémarrer le serveur avant de supprimer les informations sur l'esclave.

Existe-t-il un moyen de supprimer ces informations esclaves sans avoir à redémarrer mysqld?

Gris - alors arrêtez d'être mauvais
la source
Lié à dba.stackexchange.com/questions/12092/…
Gris - alors arrêtez d'être méchant

Réponses:

10

Dans MySQL 5.5.16 et versions ultérieures, vous pouvez utiliser RESET SLAVE ALLpour faire tout ce qui est RESET SLAVEfait et réinitialiser les paramètres de connexion à partir de la mémoire, de cette façon, cela ne nécessite pas de redémarrage mysqld.

Filipe Giusti
la source
6

Le moyen le plus rapide et le plus sale pour effacer les informations sur les esclaves d'une instance MySQL

  • Ajouter skip-slave-startà /etc/my.cnf sous[mysqld]
  • service mysql stop
  • rm -f /var/lib/mysql/master.info /var/lib/mysql/relay-*
  • service mysql start
  • Supprimer skip-slave-startde /etc/my.cnf

Cela devrait le faire pour vous !!!

Cela serait nécessaire car selon la documentation MySQL surRESET SLAVE :

Dans MySQL 5.5 (contrairement à MySQL 5.1 et versions antérieures), RESET SLAVE ne modifie aucun paramètre de connexion de réplication tel que l'hôte maître, le port maître, l'utilisateur maître ou le mot de passe maître, qui sont conservés en mémoire. Cela signifie que START SLAVE peut être émis sans exiger une instruction CHANGE MASTER TO après RESET SLAVE.

Ainsi, les informations de réplication sont toujours en mémoire. Un redémarrage mysql est la seule façon de procéder.

RolandoMySQLDBA
la source
Merci @Rolando. +1 J'ai vu cela mais je ne l'ai pas essayé. J'essaie de ne pas avoir à redémarrer mysqld pour résoudre ce problème.
Gray - alors arrêtez d'être méchant
De plus, je ne vois aucun master.infofichier. Est-ce toujours là sur un "maître" ou un "esclave"?
Gray - alors arrêtez d'être méchant
master.info est toujours sur Slave Server.
Abdul Manaf
5

RESET SLAVEsuivi d'un redémarrage n'efface pas les informations sur l'esclave en ce qui concerne phpmyadmin. Vous devez également définir CHANGE MASTER TO MASTER_HOST=''.

Jack
la source
3

Je recommanderais de maintenir la commande skip-slave-start dans votre fichier de configuration ('dans /etc/my.cnf') sous votre 'mysqld' pour éviter toute surcharge des données maître-esclave. Pour vous donner un exemple - lorsque vous travaillez dans un environnement cloud, disons qu'un ancien maître se bloque puis redémarre avec succès lorsque vous êtes votre fournisseur résout le problème - l'ancien esclave (maintenant nouveau maître) se répliquera à partir de l'ancien maître, remplaçant les données avant le DBA a une chance de s'en rendre compte.

BTW, cela est également pertinent dans un environnement non cloud. Si, disons, un autre administrateur fait apparaître l'ancien maître sans coordination. En outre, un autre problème explique pourquoi il est judicieux de conserver la commande `` skip-slave-start '' même s'il s'agit d'un esclave - pas de réplication automatique, ce qui signifie que vous avez plus de contrôle sur la prévention des résultats imprévisibles. :)

Lena Weber
la source
Merci pour la réponse @Lena. C'est une bonne idée. Je vais y jeter un œil.
Gris - alors arrêtez d'être mauvais le