Partage
  • Partager sur Facebook
  • Partager sur Twitter

Réplication de base de données mysql

Problème de configuration

17 septembre 2018 à 10:15:45

Bonjour,

Je suis en train de mettre  un système de réplication de ma base de données locale

Le serveur maître est sur ubuntu 16.04 et l'esclave est en ligne.

Mon problème est au niveau du fichier local my.cnf

Lorsque j'édite ce fichier avec la ligne suivante :

bind-address = 127.0.0.1

Et que je lance un service mysql restart;

Je reçois cette réponse :

Job for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details.

Alors je voudrais savoir d'où provient mon éventuel erreur. Est-ce dans la configuration de mysql que j'utilise depuis pas mal d'années maintenant ?

Merci d'avance pour vos réponses éclairées


  • Partager sur Facebook
  • Partager sur Twitter
19 septembre 2018 à 14:29:03

bind-address définit sur quelle(s) interface(s) réseaux mysql doit écouter.

En mettant 127.0.0.1, mysql ne peut écouter que les connexions entrantes depuis la machine elle même. En d'autres termes, il est coupé de l'extérieur. C'est une très bonne chance quand il n'y a qu'une seule base de données, et que les applications l'utilisant sont sur la même machine. Car en limitant l'accès, on réduit les surfaces d'attaque. La sécurité est donc bien meilleure.

Mais pour mettre en place une réplication, il faut bien que les mahcines distantes puisse se parler. Le maître doit donc écouter au moins sur l'interface qui permet d'accèder à l'esclave.

Il faut donc rajouter à bind-address, sa propre adresse IP.

Ca fait des années que je n'ai pas fait de réplication sur MySQL, mais ça peut expliquer pourquoi le slave n'arrive pas à démarrer, puisqu’il ne peut pas se connecter au master.

Par contre, il devient dans tous les cas indispensable de modifier les politiques de sécurité des comptes de MySQL :

- le compte Administrateur ne doit pouvoir être utilisé qu'à partir de localhost

- il faut un compte dédié à la réplication, et pour chaque application, limités à leurs besoins stricts

- et rajouter le chiffrement des données entrantes / sortantes de la BDD

-
Edité par Sebajuste 19 septembre 2018 à 14:31:49

  • Partager sur Facebook
  • Partager sur Twitter
24 septembre 2018 à 12:31:01

Bonjour Sebajuste,

Merci pour ta réponse qui éclaire mieux ma lanterne.

Tout d'abord, lorsque je fais ce paramétrage, je suis sur le maître. L'esclave est en ligne. Je n'ai pas encore créer de compte utilisateur qui sera dédié au service de réplication des données

Donc lorsque je met le paramètre bind-address, étant sur le maître, c'est l'adresse ip du maître qui doit la valeur de ce paramètre ?

Si c'est le cas et c'est ce que j'ai fait j'ai cette nouvelle erreur : Job for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details.

  • Partager sur Facebook
  • Partager sur Twitter
27 septembre 2018 à 19:58:47

Bonsoir, j'ai commenté la ligne du bind-address. En fait elle n'existait même pas dans mon fichier my.cnf. Je l'ai néanmoins ajouté et je l'ai commenté. Ce qui équivaudrait à écrire ceci :

bind-address = 0.0.0.0

Ok à partir de là tout se passe sans problème. Normal. Mais dès que j'ajoute ces lignes :

server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 10
max_binlog_size = 100M
binlog_do_db = exempledb

Et que je redémarre le service mysql

service mysql restart

J'ai de nouveau cette erreur dans mon terminal

Job for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details.

Ai-je écrit quelque chose d'anormal ? A ce que je sache, je n'ai fait que activer la conservation des fichiers sur le serveur ou alors mon code comporte un défaut

Merci de m'éclairer

-
Edité par thurin2000 27 septembre 2018 à 20:34:31

  • Partager sur Facebook
  • Partager sur Twitter