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.
NotaQuesta guida è scritta per un utente non root. I comandi che richiedono privilegi elevati sono preceduti da
sudo
. Se non hai familiarità consudo
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
-
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
-
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
-
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
conlog_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
conlog_slave_updates
(all'interno di entrambi i server 1 e 2). Consulta la documentazione di MySQL per i dettagli. -
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
-
Una volta completato, riavvia l'applicazione MySQL:
sudo systemctl restart mysql
Crea utenti di replica
-
Accedi a MySQL su ciascuno dei Linode:
mysql -u root -p
-
Configura gli utenti di replica su ogni Linode. Sostituisci
x.x.x.x
con l'indirizzo IP privato del Linode opposto epassword
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';
-
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
-
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)
-
Sul Server 2 al prompt di MySQL, configurare la funzionalità di replica per quel database. Sostituisci
x.x.x.x
con l'IP privato del primo server. Sostituisci anche il valore persource_log_file
con il valore del file del passaggio precedente e il valore persource_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;
-
Sul Server 2, interrogare lo stato del master. Annota ancora i valori del file e della posizione.
SHOW MASTER STATUS;
-
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.
-
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