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/