Mysql
 sql >> Base de données >  >> RDS >> Mysql

Configurer la réplication de la base de données MySQL maître-maître

Qu'est-ce que la réplication maître-maître MySQL ?

La réplication MySQL Master-Master ajoute de la vitesse et de la redondance pour les sites Web actifs. Avec la réplication, deux serveurs MySQL distincts agissent comme un cluster. La mise en cluster de bases de données est particulièrement utile pour les configurations de sites Web à haute disponibilité. Utilisez deux Linodes distincts pour configurer la réplication de la base de données, chacun avec des adresses IPv4 privées.

Remarque

Ce guide est écrit pour un utilisateur non root. Les commandes qui nécessitent des privilèges élevés sont préfixées par sudo . Si vous n'êtes pas familier avec le sudo commande, vous pouvez consulter notreGuide des utilisateurs et des groupes.

Ce guide est écrit pour Debian 9, Ubuntu 18.04 et Ubuntu 20.04.

Si vous ne savez pas quelle version de MySQL a été installée sur votre système lorsque vous suivez les étapes ci-dessous, saisissez la commande suivante :

mysql --version

Installer MySQL

  1. Utilisez les commandes suivantes pour installer MySQL sur chacun des Linodes :

    sudo apt-get update
    sudo apt-get upgrade -y
    sudo apt-get install mysql-server mysql-client
    
  2. Exécutez la commande d'installation sécurisée MySQL. Il vous sera demandé de créer un mot de passe root. Il est recommandé de sélectionner oui à toutes les questions :

    mysql_secure_installation
    

Modifier la configuration de MySQL

  1. Modifiez le /etc/mysql/my.cnf fichier sur chacun des Linodes. Ajoutez ou modifiez les valeurs suivantes :

    Serveur 1 :

    Fichier :/ etc/mysql/mon.cnf
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    
    [mysqld]
    server_id           = 1
    log_bin             = /var/log/mysql/mysql-bin.log
    log_bin_index       = /var/log/mysql/mysql-bin.log.index
    relay_log           = /var/log/mysql/mysql-relay-bin
    relay_log_index     = /var/log/mysql/mysql-relay-bin.index
    expire_logs_days    = 10
    max_binlog_size     = 100M
    log_replica_updates = 1
    auto-increment-increment = 2
    auto-increment-offset = 1
    Remarque Si vous utilisez MySQL 8.0.25 ou une version antérieure, remplacez log_replica_updates avec log_slave_updates (dans les deux serveurs 1 et 2). Voir la documentation MySQL pour plus de détails.

    Serveur 2 :

    Fichier :/ etc/mysql/mon.cnf
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    
    [mysqld]
    server_id           = 2
    log_bin             = /var/log/mysql/mysql-bin.log
    log_bin_index       = /var/log/mysql/mysql-bin.log.index
    relay_log           = /var/log/mysql/mysql-relay-bin
    relay_log_index     = /var/log/mysql/mysql-relay-bin.index
    expire_logs_days    = 10
    max_binlog_size     = 100M
    log_replica_updates = 1
    auto-increment-increment = 2
    auto-increment-offset = 2
    Remarque Si vous utilisez MySQL 8.0.25 ou une version antérieure, remplacez log_replica_updates avec log_slave_updates (dans les deux serveurs 1 et 2). Voir la documentation MySQL pour plus de détails.
  2. Modifiez l'bind-address configuration afin d'utiliser les adresses IP privées, pour chacun des Linodes.

    Fichier :/ etc/mysql/mon.cnf
    1
    
    bind-address    = x.x.x.x
  3. Une fois terminé, redémarrez l'application MySQL :

    sudo systemctl restart mysql
    

Créer des utilisateurs de réplication

  1. Connectez-vous à MySQL sur chacun des Linodes :

    mysql -u root -p
    
  2. Configurez les utilisateurs de réplication sur chaque Linode. Remplacer x.x.x.x avec l'adresse IP privée du Linode adverse, et password avec un mot de passe fort :

    MySQL8 et supérieur

    CREATE USER 'replication'@'x.x.x.x' IDENTIFIED BY 'password';
    GRANT REPLICATION SLAVE ON *.* TO 'replication'@'x.x.x.x';
    

    Sous MySQL8

    GRANT REPLICATION SLAVE ON *.* TO 'replication'@'x.x.x.x' IDENTIFIED BY 'password';
    
  3. Exécutez la commande suivante pour tester la configuration. Utilisez l'adresse IP privée du Linode adverse :

    mysql -u replication -p -h x.x.x.x -P 3306
    

    Cette commande devrait vous connecter à l'instance MySQL du serveur distant.

Configurer la réplication de la base de données

  1. Une fois connecté à MySQL sur le serveur 1, interrogez le statut du maître :

    SHOW MASTER STATUS;
    

    Notez les valeurs de fichier et de position qui sont affichées :

    mysql> SHOW MASTER STATUS;
    +------------------+----------+--------------+------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +------------------+----------+--------------+------------------+
    | mysql-bin.000001 |      277 |              |                  |
    +------------------+----------+--------------+------------------+
    1 row in set (0.00 sec)
    
  2. Sur le serveur 2, à l'invite MySQL, configurez la fonctionnalité de réplique pour cette base de données. Remplacerx.x.x.x avec l'adresse IP privée du premier serveur. Remplacez également la valeur de source_log_file avec la valeur du fichier de l'étape précédente et la valeur de source_log_pos avec la valeur de la position.

    MySQL 8.0.22 ou supérieur :

    STOP REPLICA;
    CHANGE REPLICATION SOURCE TO
        source_host='x.x.x.x',
        source_port=3306,
        source_user='replication',
        source_password='password',
        source_log_file='mysql-bin.000001',
        source_log_pos=106;
    START REPLICA;
    

    MySQL 8.0.22 ou version antérieure :

    STOP SLAVE;
    CHANGE MASTER TO
        master_host='x.x.x.x',
        master_port=3306,
        master_user='replication',
        master_password='password',
        master_log_file='mysql-bin.000001',
        master_log_pos=106;
    START SLAVE;
    
  3. Sur le serveur 2, interrogez l'état du maître. Notez à nouveau les valeurs de fichier et de position.

    SHOW MASTER STATUS;
    
  4. Définissez l'état de la base de données répliquée sur le serveur 1, en utilisant des commandes similaires à celles de l'étape 2. Lors de la saisie des commandes, utilisez l'adresse IP du serveur 2 et les valeurs de fichier et de position que vous venez de collecter à l'étape précédente.

  5. Testez en créant une base de données et en insérant une ligne :

    Serveur 1 :

    create database test;
    create table test.flowers (`id` varchar(10));
    

    Serveur 2 :

    show tables in test;
    

Une fois interrogé, vous devriez voir les tables du serveur 1 répliquées sur le serveur 2. Félicitations, vous avez maintenant un cluster MySQL Master-Master !

Plus d'informations

Vous pouvez consulter les ressources suivantes pour plus d'informations sur ce sujet. Bien que ceux-ci soient fournis dans l'espoir qu'ils seront utiles, veuillez noter que nous ne pouvons pas garantir l'exactitude ou l'actualité des documents hébergés en externe.

  • Manuels de référence MySQL