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

Configura la replica del database MySQL Master-Master

Cos'è MySQL Master-Master Replication?

La replica MySQL Master-Master aggiunge velocità e ridondanza ai siti Web attivi. Con la replica, due server MySQL separati agiscono come un cluster. Il clustering del database è particolarmente utile per le configurazioni di siti Web a disponibilità elevata. Utilizza due Linode separati per configurare la replica del database, ciascuno con indirizzi IPv4 privati.

Nota

Questa guida è scritta per un utente non root. I comandi che richiedono privilegi elevati sono preceduti da sudo . Se non hai familiarità con sudo comando, puoi consultare la nostra guida Utenti e Gruppi.

Questa guida è stata scritta per Debian 9, Ubuntu 18.04 e Ubuntu 20.04.

Se non sei sicuro di quale versione di MySQL sia stata installata sul tuo sistema quando segui i passaggi seguenti, inserisci il seguente comando:

mysql --version

Installa MySQL

  1. Utilizzare i seguenti comandi per installare MySQL su ciascuno dei Linode:

    sudo apt-get update
    sudo apt-get upgrade -y
    sudo apt-get install mysql-server mysql-client
    
  2. Esegui il comando di installazione sicura MySQL. Ti verrà chiesto di creare una password di root. Si consiglia di selezionare Sì a tutte le domande:

    mysql_secure_installation
    

Modifica la configurazione di MySQL

  1. Modifica il /etc/mysql/my.cnf file su ciascuno dei Linode. Aggiungi o modifica i seguenti valori:

    Server 1:

    File:/ 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
    Nota Se utilizzi MySQL 8.0.25 o versioni precedenti, sostituisci log_replica_updates con log_slave_updates (all'interno di entrambi i server 1 e 2). Consulta la documentazione di MySQL per i dettagli.

    Server 2:

    File:/ 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
    Nota Se utilizzi MySQL 8.0.25 o versioni precedenti, sostituisci log_replica_updates con log_slave_updates (all'interno di entrambi i server 1 e 2). Consulta la documentazione di MySQL per i dettagli.
  2. Modifica l'bind-address configurazione per utilizzare gli indirizzi IP privati, per ciascuno dei Linode.

    File:/ etc/mysql/my.cnf
    1
    
    bind-address    = x.x.x.x
  3. Una volta completato, riavvia l'applicazione MySQL:

    sudo systemctl restart mysql
    

Crea utenti di replica

  1. Accedi a MySQL su ciascuno dei Linode:

    mysql -u root -p
    
  2. Configura gli utenti di replica su ogni Linode. Sostituisci x.x.x.x con l'indirizzo IP privato del Linode opposto e password con una password complessa:

    MySQL8 e versioni successive

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

    Sotto MySQL8

    GRANT REPLICATION SLAVE ON *.* TO 'replication'@'x.x.x.x' IDENTIFIED BY 'password';
    
  3. Eseguire il comando seguente per testare la configurazione. Usa l'indirizzo IP privato del Linode opposto:

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

    Questo comando dovrebbe connetterti all'istanza MySQL del server remoto.

Configura replica database

  1. Dopo aver effettuato l'accesso a MySQL sul Server 1, interroga lo stato del master:

    SHOW MASTER STATUS;
    

    Prendere nota dei valori di file e posizione visualizzati:

    mysql> SHOW MASTER STATUS;
    +------------------+----------+--------------+------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +------------------+----------+--------------+------------------+
    | mysql-bin.000001 |      277 |              |                  |
    +------------------+----------+--------------+------------------+
    1 row in set (0.00 sec)
    
  2. Sul Server 2 al prompt di MySQL, configurare la funzionalità di replica per quel database. Sostituiscix.x.x.x con l'IP privato del primo server. Sostituisci anche il valore per source_log_file con il valore del file del passaggio precedente e il valore per source_log_pos con il valore della posizione.

    MySQL 8.0.22 o versioni successive:

    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 o precedente:

    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. Sul Server 2, interrogare lo stato del master. Annota ancora i valori del file e della posizione.

    SHOW MASTER STATUS;
    
  4. Imposta lo stato del database di replica sul Server 1, utilizzando comandi simili a quelli del passaggio 2. Quando inserisci i comandi, utilizza l'indirizzo IP del Server 2 e i valori di file e posizione appena raccolti nel passaggio precedente.

  5. Testare creando un database e inserendo una riga:

    Server 1:

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

    Server 2:

    show tables in test;
    

Quando richiesto, dovresti vedere le tabelle del Server 1 replicate sul Server 2. Congratulazioni, ora hai un cluster MySQL Master-Master!

Maggiori informazioni

Si consiglia di consultare le seguenti risorse per ulteriori informazioni su questo argomento. Sebbene questi siano forniti nella speranza che possano essere utili, tieni presente che non possiamo garantire l'accuratezza o la tempestività dei materiali ospitati esternamente.

  • Manuali di riferimento MySQL