GNU/Linux >> Linux Esercitazione >  >> Linux

Come impostare la replica master-master di MySQL

Questo articolo consolida le informazioni provenienti da diverse fonti nel formato che utilizzo per configurare MySQL Master/Master Replication. Il bello di Linux e dell'open source è che ci sono molti modi diversi per farlo. Dai un'occhiata ai miei riferimenti e usali per soddisfare qualsiasi esigenza tu possa avere. In caso di domande o problemi, non esitare a scrivermi una riga nei commenti.

Ipotesi

Questo articolo presuppone che tu abbia già installato MySQL su ciascuno dei tuoi server. In caso contrario, puoi farlo facilmente tramite il sito Web MySQL all'indirizzo https://www.mysql.org/downloads. Questo articolo non è stato testato su MariaDB ma dovrebbe funzionare se preferisci usare MariaDB.

Cambia SELINUX in permissive (se installato)

Server A

[[email protected] ~]# vi /etc/selinux/config
  
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=permissive
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted
	

Server B

[[email protected] ~]# vi /etc/selinux/config
  
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=permissive
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted
	

Interrompi e disabilita il firewall su ciascun server

Server A

[[email protected] ~]# systemctl stop firewalld
[[email protected] ~]# systemctl disable firewalld

Esegui il comando seguente per assicurarti che non ci siano regole del firewall

[[email protected] ~]# iptables -L

Il risultato dovrebbe essere simile a:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Server B

[[email protected] ~]# systemctl stop firewalld
[[email protected] ~]# systemctl disable firewalld

Esegui il comando seguente per assicurarti che non ci siano regole del firewall.

[[email protected] ~]# iptables -L

Il risultato dovrebbe essere simile a:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Modifica /etc/my.cnf su entrambi i server

Aggiungi le seguenti informazioni in fondo alla sezione [mysqld]

Server A

[[email protected] ~]# vi /etc/my.cnf
	
    server-id=1
    log-bin="mysql-bin"
    binlog-do-db=name_of_database
    replicate-do-db=name_of_database
    relay-log="mysql-relay-log"
    auto-increment-offset = 1
    

Server B

[[email protected] ~]# vi /etc/my.cnf
    
    server-id=2
    log-bin="mysql-bin"
    binlog-do-db=name_of_database
    replicate-do-db=name_of_database
    relay-log="mysql-relay-log"
    auto-increment-offset = 2
    

Assicurati di sostituire name_of_database con il nome del database che desideri replicare

Riavvia e abilita il demone MySQL su ciascun server

Server A

[[email protected] ~]# systemctl restart mysqld
[[email protected] ~]# systemctl enable mysqld

Server B

[[email protected] ~]# systemctl restart mysqld
[[email protected] ~]# systemctl enable mysqld

Crea l'utente replicatore su ciascun server

[[email protected] ~]# mysql -u root -p

mysql> CREATE USER 'replicator'@'%' IDENTIFIED BY 'change_me';
mysql> GRANT REPLICATION SLAVE ON foo.* TO 'replicator'@'%'
[[email protected] ~]# mysql -u root -p

mysql> CREATE USER 'replicator'@'%' IDENTIFIED BY 'change_me';
mysql> GRANT REPLICATION SLAVE ON foo.* TO 'replicator'@'%'

Ottieni informazioni sul file di registro da utilizzare sull'altro server

Server A

[[email protected] ~]# mysql -u root -p

mysql> SHOW MASTER STATUS;

+------------------+----------+------------------+------------------+
| File             | Position | Binlog_Do_DB     | Binlog_Ignore_DB |
+------------------+----------+------------------+------------------+
| mysql-bin.000001 | 154      | name_of_database |                  |
+------------------+----------+------------------+------------------+
1 row in set (0.00 sec)

Nota "File" e "Posizione" da questo comando

Server B

[[email protected] ~]# mysql -u root -p

mysql> STOP SLAVE;

mysql> CHANGE MASTER TO MASTER_HOST = 'Server A IP Address or HOSTNAME',MASTER_USER = 'replicator', MASTER_PASSWORD = 'change_me', MASTER_LOG_FILE = 'mysql-bin.000001', MASTER_LOG_POS = 154;
mysql> START SLAVE;

Ripeti gli stessi passaggi sul Server B

Server B

[[email protected] ~]# mysql -u root -p mysql> SHOW MASTER STATUS;

+------------------+----------+------------------+------------------+
| File             | Position | Binlog_Do_DB     | Binlog_Ignore_DB |
+------------------+----------+------------------+------------------+
| mysql-bin.000001 | 154      | name_of_database |                  |
+------------------+----------+------------------+------------------+
1 row in set (0.00 sec)

Nota "File" e "Posizione" da questo comando

Server A

[[email protected] ~]# mysql -u root -p 

mysql> STOP SLAVE; CHANGE MASTER TO MASTER_HOST = 'Server B IP Address or HOSTNAME', MASTER_USER = 'replicator', MASTER_PASSWORD = 'passw0rd', MASTER_LOG_FILE = 'mysql-bin.000001', MASTER_LOG_POS = 154;
mysql> START SLAVE;

Riavvia entrambi i server

Server A

[[email protected] ~]# systemctl reboot

Server B

[[email protected] ~]# systemctl reboot

Su entrambi i server crea il tuo database

[[email protected] ~]# mysql -u root -p 

mysql> CREATE DATABASE foo;

Sull'altro server controlla che il database sia presente

[[email protected] ~]# mysql -u root -p

mysql> SHOW DATABASES;

+--------------------+
| Database           |
+--------------------+
| information_schema |
| foo                |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

Fonti

  • https://www.howtoforge.com/mysql_database_replication
  • https://www.digitalocean.com/community/tutorials/how-to-set-up-mysql-master-master-replication
  • https://www.howtoforge.com/mysql_master_master_replication
  • http://www.ryadel.com/en/mysql-master-master-replication-setup-in-5-easy-steps/

Linux
  1. Come configurare MySQL Multi-Master Replication su Oracle Linux

  2. Configurazione della replica Master-Master con MySQL su Debian 8 (Jessie)

  3. Come configurare Pure-FTPD con MySQL su CentOS e RedHat

  4. Come configurare LogAnalyzer con Rsyslog e MySQL

  5. Come configurare la replica MySQL su CentOS

Come impostare la replica CouchDB su Ubuntu 16.04

Come configurare MySQL con Docker in Linux

Come configurare l'ultimo MySQL su Ubuntu 20.04 LTS

Come impostare la replica MySQL in RHEL/Centos

Come configurare una connessione MySQL remota sicura

Come impostare la replica MySQL Master-Slave su RHEL 7?