sql >> Database teknologi >  >> RDS >> Mysql

Konfigurer Master-Master MySQL-databasereplikering

Hvad er MySQL Master-Master Replication?

MySQL Master-Master-replikering tilføjer hastighed og redundans til aktive websteder. Med replikering fungerer to separate MySQL-servere som en klynge. Databaseklynger er særligt nyttigt til webstedskonfigurationer med høj tilgængelighed. Brug to separate linoder til at konfigurere databasereplikering, hver med private IPv4-adresser.

Bemærk

Denne guide er skrevet til en ikke-rootbruger. Kommandoer, der kræver forhøjede privilegier, er præfikset med sudo . Hvis du ikke er bekendt med sudo kommando, kan du tjekke vores bruger- og gruppervejledning.

Denne vejledning er skrevet til Debian 9, Ubuntu 18.04 og Ubuntu 20.04.

Hvis du er usikker på, hvilken version af MySQL der er blevet installeret på dit system, når du følger nedenstående trin, skal du indtaste følgende kommando:

mysql --version

Installer MySQL

  1. Brug følgende kommandoer til at installere MySQL på hver af linoderne:

    sudo apt-get update
    sudo apt-get upgrade -y
    sudo apt-get install mysql-server mysql-client
    
  2. Kør kommandoen MySQL sikker installation. Du bliver bedt om at oprette en root-adgangskode. Det anbefales, at du vælger ja til alle spørgsmålene:

    mysql_secure_installation
    

Rediger MySQL's konfiguration

  1. Rediger /etc/mysql/my.cnf fil på hver af linoderne. Tilføj eller rediger følgende værdier:

    Server 1:

    Fil:/ 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
    Bemærk Hvis du bruger MySQL 8.0.25 eller tidligere, skal du erstatte log_replica_updates med log_slave_updates (inden for både Server 1 og 2). Se MySQL-dokumentationen for detaljer.

    Server 2:

    Fil:/ 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
    Bemærk Hvis du bruger MySQL 8.0.25 eller tidligere, skal du erstatte log_replica_updates med log_slave_updates (inden for både Server 1 og 2). Se MySQL-dokumentationen for detaljer.
  2. Rediger bind-address konfiguration for at bruge de private IP-adresser for hver af linoderne.

    Fil:/ etc/mysql/my.cnf
    1
    
    bind-address    = x.x.x.x
  3. Når du er færdig, genstart MySQL-applikationen:

    sudo systemctl restart mysql
    

Opret replikeringsbrugere

  1. Log ind på MySQL på hver af linoderne:

    mysql -u root -p
    
  2. Konfigurer replikeringsbrugerne på hver Linode. Erstat x.x.x.x med den private IP-adresse på den modsatte Linode og password med en stærk adgangskode:

    MySQL8 og derover

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

    Under MySQL8

    GRANT REPLICATION SLAVE ON *.* TO 'replication'@'x.x.x.x' IDENTIFIED BY 'password';
    
  3. Kør følgende kommando for at teste konfigurationen. Brug den private IP-adresse på den modsatte Linode:

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

    Denne kommando skal forbinde dig til fjernserverens MySQL-instans.

Konfigurer databasereplikering

  1. Mens du er logget ind på MySQL på Server 1, skal du forespørge om masterstatus:

    SHOW MASTER STATUS;
    

    Bemærk fil- og positionsværdierne, der vises:

    mysql> SHOW MASTER STATUS;
    +------------------+----------+--------------+------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +------------------+----------+--------------+------------------+
    | mysql-bin.000001 |      277 |              |                  |
    +------------------+----------+--------------+------------------+
    1 row in set (0.00 sec)
    
  2. På Server 2 ved MySQL-prompten skal du konfigurere replikafunktionaliteten for den database. Erstat x.x.x.x med den private IP fra den første server. Erstat også værdien for source_log_file med filværdien fra det forrige trin og værdien for source_log_pos med positionsværdien.

    MySQL 8.0.22 eller nyere:

    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 eller tidligere:

    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. På server 2 skal du forespørge om masterstatus. Bemærk igen fil- og positionsværdierne.

    SHOW MASTER STATUS;
    
  4. Indstil replika-databasestatus på Server 1 ved at bruge lignende kommandoer som i trin 2. Når du indtaster kommandoerne, skal du bruge IP-adressen på Server 2 og de fil- og positionsværdier, du lige har indsamlet i det forrige trin.

  5. Test ved at oprette en database og indsætte en række:

    Server 1:

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

    Server 2:

    show tables in test;
    

Når du bliver spurgt, bør du se tabellerne fra Server 1 replikeret på Server 2. Tillykke, du har nu en MySQL Master-Master-klynge!

Flere oplysninger

Du ønsker måske at konsultere følgende ressourcer for yderligere oplysninger om dette emne. Selvom disse leveres i håb om, at de vil være nyttige, bemærk venligst, at vi ikke kan stå inde for nøjagtigheden eller aktualiteten af ​​eksternt hostede materialer.

  • MySQL-referencemanualer

  1. Migration fra Oracle Database til MariaDB - A Deep Dive

  2. 5 måder at implementere case-usensitiv søgning i SQLite med fuld Unicode-understøttelse

  3. IndexOf-funktion i T-SQL

  4. Sådan opretter du et sikkert login-script i PHP og MySQL