Crmgo Blog

MySQL-Replikation

MySQL-Replikation

Einstellungen des Assistenten Geben Sie unbedingt eine eindeutige Server-ID, den Pfad für die Binärlogs und den Namen der Datenbank für die Replikation im Abschnitt [mysqld] an: server-id = 1 log-bin = /var/lib/mysql/mysql-bin replicate-do-db = testdb Stellen Sie sicher, dass auf der Festplatte ausreichend Platz für die Binärlogs vorhanden ist. Fügen wir…

MySQL-Replikation
Master-Konfiguration

Geben Sie unbedingt eine eindeutige Server-ID, den Pfad für die Binärlogs und den Datenbanknamen für die Replikation im Abschnitt [mysqld] an:
server-id = 1
log-bin = /var/lib/mysql/mysql-bin
replicate-do-db = testdb

Stellen Sie sicher, dass ausreichend Festplattenspeicher für die Binärlogs verfügbar ist.

Fügen Sie den Benutzer „replication“ hinzu, unter dessen Rechten die Replikation durchgeführt wird. Es reicht aus, die Berechtigung "replication slave" zu vergeben:
mysql@master> GRANT replication slave ON "testdb".* TO "replication"@"192.168.1.102" IDENTIFIED BY "password";

Starten Sie MySQL neu, damit die Änderungen in der Konfiguration wirksam werden:
root@master# service mysqld restart

Wenn alles erfolgreich war, sollte der Befehl "show master status" ungefähr Folgendes anzeigen:
mysql@master> SHOW MASTER STATUS\G
File: mysql-bin.000003
Position: 98
Binlog_Do_DB:
Binlog_Ignore_DB:

Der Wert „position“ muss mit jeder Änderung an der Datenbank auf dem Master ansteigen.

Replika-Konfiguration

Geben Sie die Server-ID, den Datenbanknamen für die Replikation und den Pfad zu den Relay-Binlogs im Abschnitt [mysqld] der Konfiguration an und starten Sie MySQL anschließend neu:
server-id = 2
relay-log = /var/lib/mysql/mysql-relay-bin
relay-log-index = /var/lib/mysql/mysql-relay-bin.index
replicate-do-db = testdb

root@replica# service mysqld restart

Datenübertragung
Daten übertragen

Hier müssen wir die Datenbank schreibsperren. Dazu können Sie entweder die Anwendungen stoppen oder auf dem Master die Einstellung read_only aktivieren (Achtung: Dieses Flag gilt nicht für Benutzer mit der SUPER-Berechtigung). Falls Sie MyISAM-Tabellen verwenden, führen Sie außerdem "flush tables" aus:
mysql@master> FLUSH TABLES WITH READ LOCK;
mysql@master> SET GLOBAL read_only = ON;

Rufen Sie den Status des Masters mit dem Befehl „show master status“ ab und notieren Sie die Werte für File und Position (nach erfolgreicher Sperrung des Masters sollten diese sich nicht ändern):
File: mysql-bin.000003
Position: 98

Erstellen Sie einen Dump der Datenbank und heben Sie nach Abschluss der Operation die Sperrung des Masters auf:
mysql@master> SET GLOBAL read_only = OFF;

Übertragen Sie den Dump auf die Replika und stellen Sie die Daten daraus wieder her.
Starten Sie schließlich die Replikation mit den Befehlen "change master to" und "start slave" und prüfen Sie, ob alles erfolgreich war:
mysql@replica> CHANGE MASTER TO MASTER_HOST = "192.168.1.101 ", MASTER_USER = "replication ", MASTER_PASSWORD = "password ", MASTER_LOG_FILE = "mysql-bin.000003 ", MASTER_LOG_POS = 98;
mysql@replica> start slave;

Die Werte für MASTER_LOG_FILE und MASTER_LOG_POS entnehmen Sie dem Master.

Überprüfen Sie den Fortschritt der Replikation mit dem Befehl "show slave status":
mysql@replica> SHOW SLAVE STATUS\G

Dieser Artikel stammt von habr und wurde in der Praxis überprüft.

Ich bin auf den Fehler [ERROR] Failed to initialize the master info structure gestoßen.

Die Lösung lautet: RESET SLAVE;

Das zweite Problem – InnoDB-Tabellen wurden nicht erstellt – wurde durch das Löschen der Logs .. 0 ..01 gelöst.

Wenn bestimmte Tabellen von der Replikation ausgeschlossen werden sollen, tragen Sie diese in die Konfiguration ein:

replicate-wild-ignore-table=base.mw_words_positions
replicate-wild-ignore-table=base.mw_sotrudniki_log

Fehler überspringen:

SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; hat bei mir nicht geholfen,

aber das Hinzufügen zu my.cnf

slave-skip-errors= <Fehlercode oder all>

hat das Problem gelöst.

Hinweis: Dieser Beitrag kann KI-unterstützt erstellt und anschließend redaktionell geprüft worden sein. Verantwortlich: Dmytro Lomaka, Kaltenkirchen.