web-dev-qa-db-fra.com

Comment désactiver complètement la réplication MySQL

J'utilise la réplication MySQL double maître et je souhaite maintenant passer à une seule base de données sans réplication. Comment désactiver complètement la réplication sur les deux bases de données?

64
David Collie

Pour désactiver complètement la réplication avec une configuration maître-maître, vous devez procéder comme suit sur chaque esclave:

  1. STOP SLAVE;
  2. RESET SLAVE; (Utilisation RESET SLAVE ALL; pour MySQL 5.5.16 et versions ultérieures)
  3. Modifiez le fichier my.cnf et supprimez toute information (le cas échéant) qui fait référence aux options "master -..." ou "replicate -...". Vous pouvez ne rien avoir dans le fichier my.cnf, car la réplication peut également être configurée dynamiquement.
  4. Redémarrez mysqld.
81
Harrison Fisk

Je sais que c'est une vieille question mais j'ai trouvé que je dois aussi réinitialiser les variables esclaves. Si vous utilisez "blah" comme suggéré, le serveur essaiera au démarrage de trouver le serveur "blah".

Remplacez MASTER par MASTER_Host='',MASTER_USER='',MASTER_PASSWORD='';

Vous pouvez vérifier que la machine n'est plus un esclave

SHOW SLAVE STATUS \G;
18
AndyW

Sur le ou les serveurs esclaves:

  1. Exécutez "stop slave" pour arrêter la réplication.
  2. Exécutez "reset slave" pour dire au serveur esclave d'oublier sa position dans le journal binaire récupéré du serveur maître.
  3. Ajoutez "skip-slave-start" à my.cnf pour empêcher le démarrage de la réplication lorsque vous redémarrez MySQL.

Il n'est pas nécessaire de redémarrer MySQL sur le maître ou l'esclave. La documentation complète se trouve dans la section 19 du MySQL Reference Manual .

Je vous recommande de laisser le reste des paramètres de réplication en place au cas où vous décideriez de revenir à votre configuration précédente. De cette façon, il vous suffirait de pousser les données et de réinitialiser la position de l'esclave (n'oubliez pas de supprimer skip-slave-start) plutôt que de recréer la configuration complète.

12
Chris Hall

Quelle que soit la version de MySQL, la façon la plus complète de procéder est la suivante

cd /var/lib/mysql
service mysql stop
rm -f master.info relay-*`
service mysql start

Cela doit fonctionner pour la dernière version car le paramètre de réplication persiste dans RAM pour MySQL 5.5.

Je viens de répondre à une question similaire à ce sujet: Comment changer un ancien esclave MySQL pour être un maître et supprimer les informations sur le statut de l'esclave?

7
RolandoMySQLDBA

La modification du fichier my.cnf seul ne suffit pas pour désactiver la réplication. En fait, ce n'est plus la façon recommandée de l'activer. Mettre les entrées dans le fichier my.cnf n'est efficace que pour le prochain démarrage et se comporte comme si vous aviez entré la commande dans le client mysql:

mysql> changez master en master_Host = 'blah', master_user = 'blah', master_password = 'blah' ...;

Ces deux méthodes créeront un fichier dans le répertoire de données appelé master.info. Tant que ce fichier existe, le serveur essaiera de répliquer en utilisant les détails qui s'y trouvent. Le "RESET SLAVE;" La commande répertoriée dans la première réponse supprimera le fichier master.info (ainsi que le fichier relay-log.info). Comme mentionné dans la première réponse, vous voulez également vous assurer que vous n'avez pas ces informations de configuration dans le fichier my.cnf, sinon au prochain redémarrage du serveur, la journalisation sera réactivée.

6
Tim

Une réponse est ici:

http://www.oops.net.br/~bac/bam/canopy_repl_setup.htm

* Modifiez le fichier de configuration MySQL: /etc/my.cnf et supprimez les 7 lignes suivantes dans la section intitulée [mysqld]:

port=3306
log-bin
server-id=1
master-Host=10.0.0.2
master-user=server_1_repl
master-password=server_1_passwd
master-port=3306*

Redémarrez MySQL.

5
David Collie

J'ajoute ceci à la réponse de Harrison Fisk:

Si vous avez utilisé RESET SLAVE ALL; alors le redémarrage n'est pas nécessaire.

De plus, vous souhaiterez peut-être activer les événements qui ont été désactivés sur l'esclave:

select * from information_schema.events where status = 'SLAVESIDE_DISABLED';

Pour chacun d'eux:

alter event <event_name> enable;
4
Franc Drobnič