[Tuto] Réplication base de données avec PHPMyAdmin

Pour certains de vos projets, vous aurez sûrement la nécessité de créer un système de sauvegarde de données complet. Ici, nous allons apprendre à copier en temps direct une base de données d’un serveur S1 (maître) sur un serveur S2 (esclave), ce qui nous permettra d’avoir deux bases de données totalement synchronisées. En cas de crash du premier serveur, on peut alors basculer sur la base de l’autre serveur et ainsi, ne perdre aucune donnée.

Pour ce faire, nous allons utiliser un serveur sous Debian 6.0 avec PHPMyAdmin. (Pour installer ce serveur web, je vous invite à aller lire ce tutoriel)

Etape 1 : Création de la base de données à dupliquer

Créez une base de donnée sur S1 et S2 depuis PHPMyAdmin. La mienne s’appellera, de manière tout à fait objective, « tiloweb ».

Etape 2 : Configuration du serveur maître

Dans l’accueil de PHPMyAdmin du serveur S1, allez dans l’onglet « Réplication ».

Puis cliquez sur le lien « configurer » de la partie « Réplication maître ».

Cliquez sur « Configurer le serveur maître »

Un formulaire apparaît, choisissez la ou les bases de données à répliquer sur votre S2. En l’occurrence, la table « tiloweb ». On vous demande alors de modifier un fichier pour y rajouter quelques paramètres de configuration.

Configuration de la réplication

Le fichier en question, si vous avez suivi la procédure d’installation standard de MySQL, se trouve à l’adresse suivante dans votre serveur : /etc/mysql/my.cnf. Contrairement à ce que vous dit PHPMyAdmin, ne copiez pas ces lignes à la fin de votre fichier de configuration mais quelque part entre « [mysqld] » et « [mysqldump] » (normalement, juste après la ligne 86). Trouvez également la ligne « bind-address » et commentez-la (ce qui vous permettra d’autoriser les connexions depuis d’autres IP). Vérifiez également que les droits de ce fichiers sont bien en 755 (et non pas en 777). Cliquez alors sur « Exécuter ». PHPMySQL va redémarrer automatiquement le serveur MySQL et normalement.

Tuto Réplication - Screen 5

Confirmation de la configuration de votre S1 comme maître.

Cliquez ensuite sur « Ajouter un utilisateur pour la réplication vers l’esclave ? ». Et remplissez le formulaire comme suit :

Créez un nouvel utilisateur avec les droits de réplication maître

Vous pouvez bien évidement choisir un nom d’utilisateur différent, mais par soucis d’organisation, j’utilise l’utilisateur « sync ». Dans la ligne « Serveur »,  « % » signifie « Tout serveur » mais vous pouvez décider de n’autoriser qu’un IP spécifique.

Votre serveur maître est maintenant prêt à être répliqué.

Etape 3 : Configuration du serveur esclave

Sur votre serveur S2, rendez-vous dans l’onglet « Réplication » puis cliquez sur « configurer le serveur esclave ? ». Commencez alors par modifier le même fichier my.cnf en rajouter cette fois ci simplement la ligne « server-id » et en vous assurant que le numéro est unique. Remplissez alors le formulaire avec les identifiants correspondant à l’utilisateur créé en étape 2 :

Remplissez les informations de l’utilisateur créé à l’étape 2

Validez, et voila votre serveur esclave configuré.

Cliquez ensuite sur « synchroniser les bases de données avec le serveur maître ». Ce qui va permettre de s’assurer, avant de démarrer le processus, que les données soient les mêmes sur les deux serveurs. Une fois que c’est fait, il ne vous reste plus qu’à cliquer sur « Démarrer » complètement. Et voila, votre base de données est répliquée.

Etape 4 : Test

Un petit test s’impose tout de même pour vérifier que la réplication s’effectue correctement. Allez sur l’interface PHPMyAdmin de votre S1, sélectionnez dans votre base répliquée une table et insérez une ligne. Normalement, la ligne est automatiquement insérée également sur le serveur S2. Essayez !

 

La réplication d’une base de donnée n’est qu’une étape parmi tant d’autre pour la création d’un hébergement sécurisé, comme un PRA (Plan de Reprise d’Activité, qui vous permet une sauvegarde sûr de toutes vos données) ou un Cluster (qui vous permet de répartir les charges d’un site à forte fréquentation sur plusieurs serveurs). Vous voulez aller plus loin ? Je vous conseille l’excellent article d’Antoine Augusti « La réplication de bases de données » qui vous apprendra à gérer plus de deux serveurs à la fois.

19 commentaires

  1. J’ai un soucis… je suis ce petit tuto, mais lorsque j’essaye de connecter le slave au master via phpmyadmin, j’ai une erreur :
    Connexion impossible sur le maître 88.191.x.x
    Pensant que ça pouvait venir du firewall de la machine en master, je l’ai désactivé mais sans plus de résultat. J’avoue que je coince un peu sur la source su soucis.

    Côté master ça a l’air d’être correct :
    Variable Valeur
    File mysql-bin.000002
    Position 107
    Binlog_Do_DB application
    Binlog_Ignore_DB

    Une idée? Merci beaucoup

    1. Alors première question : Est-ce que l’utilisateur SQL avec lequel tu connectes le slave sur le master a les droits depuis un autre serveur que localhost ?

      En gros, pour vérifier, va sur ton master, regarde les droits utilisateurs, et dans la partie « server », tu dois avoir « % ».

      Si ce n’est pas le cas, alors ton slave n’est pas autorisé à se connecté. Fais la modification et n’oublie pas de cliquer en bas sur « Recharger les droits utilisateur ».

      Ca résoud ton soucis ?

  2. merci pour ta réponse rapide.
    J’ai créé le user sur le master directement depuis phpmyadmin en ne précisant pas d’origine. J’ai donc bien le % dans la partie server..

    1. Ouvre ton fichier /etc/mysql/my.conf et trouve la variable bind-adress, est-ce qu’elle est correctement commentée ?

      Vérifie ensuite que le fichier est bien en chmod 755 (et non pas 777) puis redémarre ton serveur SQL :

      /etc/init.d/mysql restart

  3. C’est le cas. En fait j’ai un autre user avec lequel je peux accéder à ma BDD depuis un client SQL…
    Y’a un truc de sioux que je dois raté mais la je vois pas.

    Est-ce que le fait d’avoir un alias réseau pour gérer une IPFailover peut expliquer ça?

      1. non non c’est pas un user slave. C’était juste pour illustrer le fait que je peux me connecter depuis une machine distante.
        Pour la réplication, je suis avec un user dédié qui est un user « slave ».
        J’ai peut être rajouté d’ailleurs sur ce user d’autres droits… mais bon normalement ça devrait pas influer

  4. Bonjour,
    je voudrais savoir, pour une réplication unidirectionnelle, si le serveur maitre tombe en panne, comment faire pour basculer vers le serveur esclave pour que celui-ci devient le maitre.

    1. Ca se fait plus du côté réseau pour le coup.

      Certains hébergeurs proposent un système de IP FailOver. Soit un IP qui redirige vers l’IP de ton choix.

      Dans un premier temps, tu rediriges cet IP vers le serveur Maître, s’il tombe, tu changes la redirection vers le serveur esclave.

Laisser un commentaire