sql >> Databasteknik >  >> RDS >> Mysql

Konfigurera Master-Master MySQL-databasreplikering

Vad är MySQL Master-Master Replication?

MySQL Master-Master-replikering lägger till hastighet och redundans för aktiva webbplatser. Med replikering fungerar två separata MySQL-servrar som ett kluster. Databasklustring är särskilt användbart för webbplatskonfigurationer med hög tillgänglighet. Använd två separata linoder för att konfigurera databasreplikering, var och en med privata IPv4-adresser.

Obs

Den här guiden är skriven för en icke-rootanvändare. Kommandon som kräver förhöjda privilegier har prefixet sudo . Om du inte är bekant med sudo kommandot kan du läsa vår guide för användare och grupper.

Den här guiden är skriven för Debian 9, Ubuntu 18.04 och Ubuntu 20.04.

Om du är osäker på vilken version av MySQL som har installerats på ditt system när du följer stegen nedan, anger du följande kommando:

mysql --version

Installera MySQL

  1. Använd följande kommandon för att installera MySQL på var och en av linoderna:

    sudo apt-get update
    sudo apt-get upgrade -y
    sudo apt-get install mysql-server mysql-client
    
  2. Kör kommandot MySQL säker installation. Du kommer att bli ombedd att skapa ett root-lösenord. Det rekommenderas att du väljer ja på alla frågorna:

    mysql_secure_installation
    

Redigera MySQL:s konfiguration

  1. Redigera /etc/mysql/my.cnf fil på var och en av linoderna. Lägg till eller ändra följande värden:

    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
    Obs Om du använder MySQL 8.0.25 eller tidigare, byt ut log_replica_updates med log_slave_updates (inom både Server 1 och 2). Se MySQL-dokumentationen för 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
    Obs Om du använder MySQL 8.0.25 eller tidigare, byt ut log_replica_updates med log_slave_updates (inom både Server 1 och 2). Se MySQL-dokumentationen för detaljer.
  2. Redigera bind-address konfiguration för att använda de privata IP-adresserna för var och en av linoderna.

    Fil:/ etc/mysql/my.cnf
    1
    
    bind-address    = x.x.x.x
  3. När du är klar, starta om MySQL-applikationen:

    sudo systemctl restart mysql
    

Skapa replikeringsanvändare

  1. Logga in på MySQL på var och en av linoderna:

    mysql -u root -p
    
  2. Konfigurera replikeringsanvändarna på varje Linode. Ersätt x.x.x.x med den privata IP-adressen för den motsatta Linode och password med ett starkt lösenord:

    MySQL8 och över

    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öljande kommando för att testa konfigurationen. Använd den privata IP-adressen för motstående Linode:

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

    Detta kommando bör ansluta dig till fjärrserverns MySQL-instans.

Konfigurera databasreplikering

  1. När du är inloggad på MySQL på Server 1, fråga masterstatus:

    SHOW MASTER STATUS;
    

    Notera fil- och positionsvärdena som visas:

    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 vid MySQL-prompten, ställ in replikfunktionaliteten för den databasen. Ersätt x.x.x.x med den privata IP-adressen från den första servern. Ersätt även värdet för source_log_file med filvärdet från föregående steg och värdet för source_log_pos med positionsvärdet.

    MySQL 8.0.22 eller senare:

    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 tidigare:

    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, fråga huvudstatusen. Notera fil- och positionsvärdena igen.

    SHOW MASTER STATUS;
    
  4. Ställ in replikdatabasstatus på Server 1, med liknande kommandon som i steg 2. När du anger kommandona, använd IP-adressen för Server 2 och fil- och positionsvärdena som du just samlade in i föregående steg.

  5. Testa genom att skapa en databas och infoga en rad:

    Server 1:

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

    Server 2:

    show tables in test;
    

När du frågar bör du se tabellerna från Server 1 replikerade på Server 2. Grattis, du har nu ett MySQL Master-Master-kluster!

Mer information

Du kanske vill konsultera följande resurser för ytterligare information om detta ämne. Även om dessa tillhandahålls i hopp om att de kommer att vara användbara, vänligen observera att vi inte kan garantera noggrannheten eller aktualiteten hos externt värdmaterial.

  • MySQL-referenshandböcker

  1. SQL Server saknas index

  2. SÄTT IN VÄRDEN DÄR INTE FINNS

  3. Livförsäkringsdatamodell

  4. Nyckelindikatorer för problemdesign