Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Master-zu-Master-Replikation

Die Replikation wird verwendet, um zwei oder mehr Datenbanken synchron zu halten, indem entweder ausgeführte DML/Anweisungen oder Datensatzänderungen von einem Master-Server auf einen oder mehrere Slave-Server repliziert werden.

Es gibt drei Methoden zum Protokollieren der Daten für die Replikation:Die anweisungsbasierte Replikation (SBR) repliziert SQL-Anweisungen, die Daten ändern. Die zeilenbasierte Replikation (RBR) repliziert nur die geänderten Zeilen. Die gemischtbasierte Replikation (MBR) ist eine anweisungsbasierte Replikation und eine zeilenbasierte Replikation. Früher war die anweisungsbasierte Replikation für alle Versionen von mysqld die Standardmethode für das Offlogging. Fast alle Speicher-Engines unterstützen alle drei Ansätze zur Protokollierung von Daten.

Die MySQL-Master-Master-Replikation skaliert das System und verbessert die Leistung, indem der Overhead des Backups reduziert und Redundanz für die aktive Anwendung bereitgestellt wird. Wenn Sie nicht verstehen, was es ist, ist es wie zwei MySQL-Server, die sich gegenseitig auf dem Laufenden halten. Bei der Replikation fungieren zwei separate MySQL-Server als Cluster. Datenbank-Clustering eignet sich hauptsächlich für hochverfügbare Anwendungskonfigurationen

Die Master/Master-Replikation wird erreicht, indem ServerA als Slave von ServerB und ServerB als Slave von ServerA eingerichtet wird.

Annahme: Dieser Artikel enthält keine Schritte zur Installation des MySQL-Servers. Ich gehe davon aus, dass der MySQL-Server (Einzelinstanz) auf beiden Servern installiert wurde:

Um einen MySQL-Master für die Master-Replikation auf Linux-Servern zu konfigurieren, benötigen wir zwei Server. Informationen sind wie folgt:

Server A :192.168.1.2

Server B: 192.168.1.3

Betriebssystem: RHL 6.4 x86_64

MySQL-Server: 5.6.17 x86_64

Vorabprüfungen:

Deaktivieren Sie die Firewall auf beiden Servern:

service iptables stop
chkconfig iptables off
service iptables status

Beide Server sollten füreinander erreichbar sein, um die Erreichbarkeit zu prüfen, pingen Sie jeden Server an.

Kommentieren Sie das Attribut bind-address aus oder setzen Sie es auf (bind-address=0.0.0.0) in der Datei my.sandbox.cnf oder my.cnf auf beiden Servern. Ich habe my.sandbox.cnf erwähnt, falls Sie MySQL::Sandbox

verwenden

Zuerst aktivieren wir die Replikation von Server B nach A

SCHRITT 1:
AUF Server A:192.168.1.2

Bearbeiten Sie my.sandbox.cnf oder my.cnf und fügen Sie die folgenden Werte hinzu. server-id sollte> 0 sein; Falls Sie den Speicherort der my.cnf-Datei nicht kennen, verwenden Sie diesen Befehl auf der OS-Shell „mysql –help | grep my.cnf“, normalerweise befindet sich my.cnf im Verzeichnis /etc/

server-id=1
replicate-same-server-id=0
auto-increment-increment=2
auto-increment-offset=1
relay-log=serverA-relay-bin
relay-log-index=serverA-relay-bin.index
master-info-file=mysqk-master.info
relay-log-info-file=serverA-relay-log.info
log-bin=mysql-bin

AUF Server B:192.168.1.3

Bearbeiten Sie my.sandbox.cnf oder my.cnf und fügen Sie die folgenden Werte hinzu. Server-ID sollte> 0 sein;

server-id=2
replicate-same-server-id=0
auto-increment-increment=2
auto-increment-offset=2
relay-log=serverB-relay-bin
relay-log-index=serverB-relay-bin.index
master-info-file=mysqk-master.info
relay-log-info-file=serverB-relay-log.info
log-bin=mysql-bin

SCHRITT 2:
AUF Server A:192.168.1.2
create user 'syncstndby' identified by 'warsaw';
grant replication slave on *.* to 'syncstndby'@'192.168.1.3'  identified by 'warsaw';
flush privileges;
Auf Server B:192.168.1.3
create user 'syncstndby' identified by 'warsaw';
grant replication slave on *.* to 'syncstndby'@'192.168.1.2'  identified by 'warsaw';
flush privileges;
SCHRITT 3:
AUF SERVER B:192.168.1.3
mysql > SHOW GLOBAL VARIABLES LIKE 'PORT';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port          | 5617 |
+---------------+-------+
1 row in set (0.00 sec)


mysql > show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 |      423 | |             | |
+------------------+----------+--------------+------------------+-------------------+

AUF SERVER A:192.168.1.2
CHANGE MASTER TO 
MASTER_HOST='192.168.1.3',
MASTER_USER='syncstndby',
MASTER_PASSWORD='warsaw',
MASTER_PORT= 5617, 
MASTER_LOG_FILE='mysql-bin.000002',  
MASTER_LOG_POS=423; 

Jetzt werden Sie darüber nachdenken, wo ich die Werte für diese Attribute auswähle, keine Sorge, ich erkläre es. Wählen Sie den MASTER_PORT Wert aus der obigen Abfrage (SHOW GLOBAL VARIABLES LIKE 'PORT') aus, in diesem Fall ist unser Port 5617 , Wählen Sie den MASTER_LOG_FILE-Wert aus der Spalte File in der obigen Abfrage („show master status;“), also Mysql-bin.000002), Wählen Sie den MASTER_LOG_POS-Wert aus der Spaltenposition in der obigen Abfrage, also 423)

SCHRITT 4:

Nun können Sie den Slave starten

mysql>start salve:
mysql> show slave status \G;

JETZT wurde die Replikation von B nach A aktiviert

SCHRITT 5 

In diesem Schritt testen wir die Replikation von Server B nach A:

AUF MASTER (Server B):192.168.1.3
show schemas;
create database reptest;
create table reptest.simples (id int not null primary key) ;
insert into reptest.simples values (999),(1),(2),(3);
AUF SLAVE:192.168.1.2 (Server A)
show schemas;
use reptest;
select * from reptest.simples;

Nun aktivieren wir die Replikation von Server A nach B

SCHRITT 6:
AUF SERVER A:192.168.1.2
mysql > SHOW GLOBAL VARIABLES LIKE 'PORT';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port          | 5617 |
+---------------+-------+
1 row in set (0.00 sec)

mysql > show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000004 |      120 | |             | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

AUF SERVER B:192.168.1.3
CHANGE MASTER TO 
MASTER_HOST='192.168.1.2',
MASTER_USER='syncstndby',
MASTER_PASSWORD='warsaw',
MASTER_PORT= 5617, 
MASTER_LOG_FILE='mysql-bin.000004', 
MASTER_LOG_POS=120; 

Wählen Sie den MASTER_PORT-Wert aus der obigen Abfrage (SHOW GLOBAL VARIABLES LIKE 'PORT') aus, in diesem Fall ist unser Port 5617. Wählen Sie den MASTER_LOG_FILE-Wert aus der Spalte "Datei" in der obigen Abfrage aus ("show master status;"), also Mysql-bin .000004), wählen Sie den MASTER_LOG_POS-Wert aus der Spaltenposition in der obigen Abfrage, also 120)

Nun können Sie den Slave starten

mysql> show slave status \G;
mysql>start salve:
mysql> show slave status \G;

SCHRITT 7

OK, unsere Umgebung ist also eingestellt. Jetzt werden wir testen, ob unsere Umgebung funktioniert oder nicht.

ON 192.168.1.2 (Server A)
insert into reptest.simples values (777),(41),(15),(61);

Hier haben wir die Tabelle nicht einfach im DB-Namen reptest erstellt, da sie bereits auf Server A repliziert wurde, als der DB-Reptest und die Tabelle auf Server B erstellt wurden.

AUF 192.168.1.3  (Server B)
use reptest;
select * from reptest.simples;

Hurra!! Sie können sehen, dass alles eingestellt ist und unsere Master-zu-Master-Replikation eingestellt ist.

WARNUNG: Es ist nicht schlau, Ihre Anwendung DML gleichzeitig auf beiden Servern ausführen zu lassen. Das gleichzeitige Schreiben auf beide Server ermöglicht ein einigermaßen dauerhaftes schnelles Failover für hohe Verfügbarkeit, bringt jedoch keine Leistungssteigerungen. Beide Server müssen die gesamte DML ausführen, unabhängig davon, ob die DML direkt von Clients oder über Replikation kommt