sql >> Database >  >> RDS >> Mysql

Master-Master MySQL-databasereplicatie configureren

Wat is MySQL Master-Master-replicatie?

MySQL Master-Master-replicatie voegt snelheid en redundantie toe aan actieve websites. Bij replicatie fungeren twee afzonderlijke MySQL-servers als een cluster. Databaseclustering is met name handig voor websiteconfiguraties met hoge beschikbaarheid. Gebruik twee afzonderlijke Linodes om databasereplicatie te configureren, elk met privé IPv4-adressen.

Opmerking

Deze handleiding is geschreven voor een niet-rootgebruiker. Opdrachten die verhoogde bevoegdheden vereisen, worden voorafgegaan door sudo . Als je niet bekend bent met de sudo commando, kunt u onze Gids voor Gebruikers en Groepen raadplegen.

Deze handleiding is geschreven voor Debian 9, Ubuntu 18.04 en Ubuntu 20.04.

Als u niet zeker weet welke versie van MySQL op uw systeem is geïnstalleerd wanneer u de onderstaande stappen volgt, voert u de volgende opdracht in:

mysql --version

MySQL installeren

  1. Gebruik de volgende opdrachten om MySQL op elk van de Linodes te installeren:

    sudo apt-get update
    sudo apt-get upgrade -y
    sudo apt-get install mysql-server mysql-client
    
  2. Voer de opdracht MySQL veilige installatie uit. U wordt gevraagd om een ​​root-wachtwoord aan te maken. Het wordt aanbevolen om ja te selecteren op alle vragen:

    mysql_secure_installation
    

De configuratie van MySQL bewerken

  1. Bewerk de /etc/mysql/my.cnf bestand op elk van de Linodes. Voeg de volgende waarden toe of wijzig deze:

    Server 1:

    Bestand:/ etc/mysql/my.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
    Opmerking Als u MySQL 8.0.25 of eerder gebruikt, vervangt u log_replica_updates met log_slave_updates (binnen zowel Servers 1 als 2). Zie de MySQL-documentatie voor details.

    Server 2:

    Bestand:/ etc/mysql/my.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
    Opmerking Als u MySQL 8.0.25 of eerder gebruikt, vervangt u log_replica_updates met log_slave_updates (binnen zowel Servers 1 als 2). Zie de MySQL-documentatie voor details.
  2. Bewerk het bind-address configuratie om de privé-IP-adressen voor elk van de Linodes te gebruiken.

    Bestand:/ etc/mysql/my.cnf
    1
    
    bind-address    = x.x.x.x
  3. Als u klaar bent, start u de MySQL-toepassing opnieuw:

    sudo systemctl restart mysql
    

Maak replicatiegebruikers

  1. Log in op MySQL op elk van de Linodes:

    mysql -u root -p
    
  2. Configureer de replicatiegebruikers op elke Linode. Vervang x.x.x.x met het privé IP-adres van de andere Linode, en password met een sterk wachtwoord:

    MySQL8 en hoger

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

    Onder MySQL8

    GRANT REPLICATION SLAVE ON *.* TO 'replication'@'x.x.x.x' IDENTIFIED BY 'password';
    
  3. Voer de volgende opdracht uit om de configuratie te testen. Gebruik het privé IP-adres van de andere Linode:

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

    Deze opdracht zou u moeten verbinden met de MySQL-instantie van de externe server.

Databasereplicatie configureren

  1. Terwijl u bent aangemeld bij MySQL op server 1, kunt u de masterstatus opvragen:

    SHOW MASTER STATUS;
    

    Let op de bestands- en positiewaarden die worden weergegeven:

    mysql> SHOW MASTER STATUS;
    +------------------+----------+--------------+------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +------------------+----------+--------------+------------------+
    | mysql-bin.000001 |      277 |              |                  |
    +------------------+----------+--------------+------------------+
    1 row in set (0.00 sec)
    
  2. Stel op Server 2 bij de MySQL-prompt de replicafunctionaliteit voor die database in. Vervangx.x.x.x met het privé-IP van de eerste server. Vervang ook de waarde voor source_log_file met de bestandswaarde van de vorige stap, en de waarde voor source_log_pos met de positiewaarde.

    MySQL 8.0.22 of hoger:

    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 of eerder:

    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. Vraag op Server 2 de masterstatus op. Noteer nogmaals de bestands- en positiewaarden.

    SHOW MASTER STATUS;
    
  4. Stel de status van de replicadatabase in op Server 1, gebruik vergelijkbare opdrachten als in stap 2. Gebruik bij het invoeren van de opdrachten het IP-adres van Server 2 en de bestands- en positiewaarden die u zojuist in de vorige stap hebt verzameld.

  5. Test door een database te maken en een rij in te voegen:

    Server 1:

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

    Server 2:

    show tables in test;
    

Wanneer u ernaar vraagt, ziet u de tabellen van Server 1 gerepliceerd op Server 2. Gefeliciteerd, u heeft nu een MySQL Master-Master-cluster!

Meer informatie

U kunt de volgende bronnen raadplegen voor aanvullende informatie over dit onderwerp. Hoewel deze worden verstrekt in de hoop dat ze nuttig zullen zijn, houd er rekening mee dat we niet kunnen instaan ​​voor de nauwkeurigheid of tijdigheid van extern gehost materiaal.

  • MySQL-referentiehandleidingen

  1. Orde handhaven in MySQL IN-query

  2. Hoe de JDK-versie in Oracle te controleren?

  3. Buitenlandse sleutel naar samengestelde sleutel

  4. Oracle SQL-escape-teken (voor een '&')