GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Konfigurieren Sie die MySQL-Quellreplikatreplikation

Die MySQL®-Replikation ermöglicht die Replikation eines Datenbankservers (in diesem Artikel als Quellserver bezeichnet) auf einen oder mehrere Datenbankserver (in diesem Artikel als Replikationsserver bezeichnet). Bei MySQL ist die Replikation asynchron. Das bedeutet, dass die Replica-Server nicht permanent verbunden sein müssen, um Updates vom Quellserver zu erhalten. Beispielsweise können Sie den Reproduktionsthread auf dem Reproduktionsserver stoppen und zu einem späteren Zeitpunkt neu starten, und er wird automatisch mit der Quelle synchronisiert.

Dieses Lernprogramm bietet eine einfache Einrichtung (ein einzelner Quellserver, der auf einen einzigen Replikatserver repliziert), der alle Datenbanken von der Quelle auf das Replikat repliziert.

Voraussetzungen

Führen Sie die folgenden Schritte aus, bevor Sie mit diesem Lernprogramm beginnen.

  • Installieren Sie Ihr Betriebssystem. (Die Schritte in diesem Artikel werden mit einem CentOS®-Betriebssystem ausgeführt)
  • Installieren Sie mysql
  • Installieren Sie mysql-devel
  • Mysql-Server installieren

Hinweis: Das Verfahren in diesem Artikel beschreibt die Replikationskonfiguration auf einer neuen Gruppe von Servern ohne Daten oder Datenbank. Dies ist wichtig, da vorhandene Daten auf Servern die Replikation stören. Sie können dieses Verfahren für andere Varianten von Linux® verwenden

Erfassen Sie IP-Informationen

Die MySQL-Konfiguration in diesem Artikel wird über die privaten IPs Ihres Cloud-Servers repliziert. Notieren Sie sich die private IP jedes Servers.

Quelle:

[user@mysql-source ~]$ /sbin/ifconfig
 eth0      Link encap:Ethernet  HWaddr 40:40:51:B7:A4:2E
           inet addr:67.23.9.185  Bcast:67.23.9.255  Mask:255.255.255.0
           inet6 addr: fe80::4240:51ff:feb7:a42e/64 Scope:Link
           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
           RX packets:28878 errors:0 dropped:0 overruns:0 frame:0
           TX packets:15147 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:1000
           RX bytes:37708534 (35.9 MiB)  TX bytes:1129533 (1.0 MiB)

 eth1      Link encap:Ethernet  HWaddr 40:40:1A:AF:35:F2
           inet addr:10.176.41.72  Bcast:10.176.63.255 Mask:255.255.224.0
           inet6 addr: fe80::4240:1aff:feaf:35f2/64 Scope:Link
           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
           RX packets:3 errors:0 dropped:0 overruns:0 frame:0
           TX packets:13 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:1000
           RX bytes:230 (230.0 b)  TX bytes:762 (762.0 b)

 lo        Link encap:Local Loopback
           inet addr:127.0.0.1  Mask:255.0.0.0
           inet6 addr: ::1/128 Scope:Host
           UP LOOPBACK RUNNING  MTU:16436  Metric:1
           RX packets:0 errors:0 dropped:0 overruns:0 frame:0
           TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:0
           RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

Sie möchten die IP notieren, die für eth1 angezeigt wird . Die IP-Adresse wird direkt nach inet addr: aufgeführt . In diesem Beispiel lautet die private IP des Quellservers 10.176.41.72. Wiederholen Sie dies auf dem Replikatserver und notieren Sie sich die private IP.

Replik:

 [user@mysql-replica ~]$ /sbin/ifconfig
 eth0      Link encap:Ethernet  HWaddr 40:40:BE:90:EB:1E
           inet addr:67.23.10.69  Bcast:67.23.10.255  Mask:255.255.255.0
           inet6 addr: fe80::4240:beff:fe90:eb1e/64 Scope:Link
           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
           RX packets:29047 errors:0 dropped:0 overruns:0 frame:0
           TX packets:13527 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:1000
           RX bytes:37743828 (35.9 MiB)  TX bytes:1473375 (1.4 MiB)

 eth1      Link encap:Ethernet  HWaddr 40:40:AE:5B:35:3A
           inet addr:10.176.41.207  Bcast:10.176.63.255 Mask:255.255.224.0
           inet6 addr: fe80::4240:aeff:fe5b:353a/64 Scope:Link
           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
           RX packets:3 errors:0 dropped:0 overruns:0 frame:0
           TX packets:13 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:1000
           RX bytes:230 (230.0 b)  TX bytes:762 (762.0 b)

 lo        Link encap:Local Loopback
           inet addr:127.0.0.1  Mask:255.0.0.0
           inet6 addr: ::1/128 Scope:Host
           UP LOOPBACK RUNNING  MTU:16436  Metric:1
           RX packets:0 errors:0 dropped:0 overruns:0 frame:0
           TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:0
           RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

Die IP-Adresse für unseren Replica-Server in diesem Beispiel lautet 10.176.41.207. Wenn Sie beide privaten IPs irgendwo notiert haben, können Sie mit der Konfiguration beginnen.

Server konfigurieren

Quelle

  • Bearbeiten Sie die /etc/my.cnf Datei auf dem Quellserver, um die binäre Protokollierung zu aktivieren und den Namen des Servers festzulegen.

      [user@mysql-source ~]$ sudo vi /etc/my.cnf
    
  • Fügen Sie diese Zeilen unter mysqld hinzu Abschnitt.

      log-bin=/var/lib/mysqllogs/RackspaceServerID-theServerShortName-binary-log
      expire_logs_days=7
      server-name=<server_number>
    
  • Legen Sie den Replikationsbenutzer fest.

      mysql> GRANT REPLICATION SLAVE ON *.* to 'replicant'@'slaveIP' IDENTIFIED BY 'somepassword';
    

Die Quelle my.cnf Konfiguration ist abgeschlossen.

Replikatvorbereitung

  • Stellen Sie sicher, dass die Zeitzonen zwischen Quelle und Replikat übereinstimmen.

  • Legen Sie die folgenden Elemente fest:

      relay-log=/var/lib/mysqllogs/RackspaceServerID-theServerShortName-relay-log
      relay-log-space-limit = 16G
      read-only=1
      server-name=<server_number>
    

Erste Kopie der Daten zum Replikat

Wählen Sie eine der folgenden Optionen, um Daten auf das Replikat zu kopieren.

  • mysqldump
  • Kopieren Sie die Flatfiles

mysqldump

Erwägen Sie diese Option, wenn das Datenverzeichnis eine angemessene Größe hat und wenn Sie Ihre Tabellen für die Dauer der Prozedur sperren lassen können.

 mysqldump -A --flush-privileges --master-data=1 | gzip -1 > ~rack/master.sql.gz

Übertragen Sie die Dump-Datei auf das Replikat und importieren Sie sie.

Kopieren Sie die Flatfiles

Stoppen Sie für diese Methode MySQL auf beiden Servern und verschieben Sie das Datenverzeichnis auf der Replik aus dem Weg. Wenn MySQL nicht auf beiden Servern gestoppt ist, ist es notwendig, ein Backup zu machen:

 # mv /var/lib/mysql{,.prereplication}

Verwenden Sie eine der oben aufgeführten Methoden, um das Datenverzeichnis auf dem Replikat in eine Kopie der Quelle umzuwandeln. Zum Beispiel:

 # rsync -azv --progress --delete /var/lib/mysql/ slave:/var/lib/mysql/

Wenn das Kopieren der Daten abgeschlossen ist, starten Sie MySQL auf beiden Servern neu. Stellen Sie sicher, dass innodb-log-file-size in /etc/my.cnf für Replikat und Quelle gleich eingestellt ist, oder MySQL wird auf dem Replikat nicht gestartet.

Wenn das Replikat eine neuere Version von MySQL ist, führen Sie mysql_upgrade aus auf replicabevor Sie den start slave ausgeben Befehl.

Replikat an Quelle anhängen

Sie benötigen den Dateinamen und die Position des Binärprotokolls aus der Quelle, die der Sicherung entspricht. Wenn Sie mysqldump verwenden , wird dies in die master.sql.gz aufgenommen Datei selbst.

 # zgrep -m 1 -P 'CHANGE MASTER' master.sql.gz
 CHANGE MASTER TO MASTER_LOG_FILE = '<binary log filename>', MASTER_LOG_POS = <binary log position>;

Für eine Kopie auf Dateiebene, z. B. eine kalte Kopie, die durch Herunterfahren von MySQL und Verwenden von rsync erhalten wird , der Dateiname und die Position des Binärprotokolls sind die erste Protokolldatei, die nach dem Neustart von MySQL erstellt wird.

Sie können dies erhalten, indem Sie diesen Schritten folgen:

 # service mysqld stop
 # tail -n 1 /var/lib/mysqllogs/db1-1234-bin-log.index
 /var/lib/mysqllogs/db1-1234-bin-log.000001
 # rsync ...
 # service mysqld start

Beginnen Sie in diesem Fall bei Dateiname db1-bin-log.000001 + 1 = db1-1234-bin-log.000002 am Anfang dieser Datei. Sie erhalten dieses Ergebnis:

 MASTER_LOG_FILE = 'db1-1234-bin-log.000002', MASTER_LOG_POS = 4

Führen Sie nun CHANGE MASTER aus auf dem Replikat, um die Anmeldeinformationen für die Verbindung mit der Quelle festzulegen, sowie die binäre Protokolldatei und die Position, von der aus die Replikation gestartet werden soll.

 mysql> change master to master_host='master-ip',master_user='userSetAbove', master_password='passwordSetAbove',master_log_file='logfile-from-above-command', master_log_pos=4;
 mysql> start slave;

MySQL-Root-Anmeldeinformationen

Stellen Sie sicher, dass das neue Replikat dieselben Anmeldeinformationen in /root/.my.cnf hat Datei als Quellserver. Die MySQL-Datenbank und die Benutzerberechtigungstabelle werden ebenfalls mit dem Replikat synchronisiert.

Holland

Da Sie die MySQL-Datenbank aus der Quelle importiert haben, sind jetzt alle Passwörter gleich. So wie Sie /root/.my.cnf aktualisiert haben auf dbReplica, um mit dbSource übereinzustimmen, müssen Sie möglicherweise die /etc/holland/backupsets/default.conf aktualisieren Datei, um die gleichen Anmeldeinformationen wie die Quelle für rackspace_backup zu verwenden .

Testen

Testen Sie Ihre Einstellungen, indem Sie eine Dummy-Datenbank auf der Quelle erstellen und überprüfen, ob sie auf dem Replikat angezeigt wird. Nach der Verifizierung können Sie die Dummy-Datenbank löschen und bestätigen, dass das Replikat sie automatisch löscht.

Wenn Sie einen Fehler wie Last_IO_Error: error connecting to master sehen , den Replikationsbenutzer manuell testen. Versuchen Sie von der Replik aus zwei Dinge:

nc masterIP 3306

Wenn Sie hier einen Fehler sehen, ist Ihre Gewährung falsch, wahrscheinlich weil Sie sich in einem anderen Netzwerksegment befinden als Sie dachten. Der Fehler sieht folgendermaßen aus:Host dbSlave is not allowed to connect to this MySQL server .

mysql -ureplicant -hmasterDb -p

Wenn Sie eine Fehlermeldung erhalten, ist Ihr Grant falsch.

Wenn eine Verbindung nicht hergestellt werden kann, müssen Sie möglicherweise die Firewall anpassen oder überprüfen, ob Sie die richtigen Annahmen darüber treffen, wie das Netzwerk für diesen Kunden konfiguriert ist.

Filterung

Es wird empfohlen, keine Replikationsfilterung zu verwenden. Wenn Sie einige Tabellen aus dem Replikat ausschließen möchten, ist die einzige empfohlene Methode eine der folgenden my.cnf auf dem Replikat konfigurierte Optionen:

 replicate-wild-do-table=dbase1.%
 replicate-wild-do-table=dbase3.%

 replicate-wild-ignore-table=dbase2.%
 replicate-wild-ignore-table=dbase4.someTable

Muster können die Platzhalterzeichen % enthalten und \_ , die dieselbe Bedeutung haben wie LIKE Mustervergleichsoperator. Wenn Sie ein Literal_-Zeichen verwenden müssen, maskieren Sie es wie folgt:

 replicate-wild-ignore-table=%.%\_tmp

In MySQL 5.5 sind Filteroptionen auf Datenbankebene auf Plattformen, die Groß-/Kleinschreibung in Dateinamen unterstützen, zwischen Groß- und Kleinschreibung zu unterscheiden. Bei Filteroptionen auf Tabellenebene wird auf keiner Plattform zwischen Groß- und Kleinschreibung unterschieden, unabhängig vom Wert von lower_case_table_names Systemvariable.

Veranstaltungen

Wenn my.cnf auf der Quelle aktiviert wurde, können Sie ihn auf dem Replikat deaktivieren. Wenn der Ereignisplaner auf dem Replikat aktiviert werden muss, überprüfen Sie, ob die vorhandenen Ereignisse mit CREATE EVENT ... DISABLE ON SLAVE erstellt wurden mit etwas wie:select db, name from mysql.event where status not in (‘disabled’,‘slavename_disabled’);

Überwachung

Überwachen Sie die Replikation immer. In Emerging verwenden wir im Allgemeinen SiteScope Content Match mit check_replication.php , das normalerweise in snamee httpd lebt, das auf dem Replikat läuft.

Sie müssen GRANT dafür auf der Quelle ausgeben, die auf das Replikat repliziert:

 GRANT REPLICATION CLIENT ON *.* TO 'rep_monitor'@'slavePrimaryIP' IDENTIFIED BY 'somePassword';

Angenommen, Sie befinden sich hinter einer Firewall, sollte die „SlavePrimaryIP“ die interne IP-Adresse des Replikatservers [192.168.100.x] sein. In der check_replication.php Skript, setzen Sie host=‘192.168.100.x , die interne IP des Servers, auf dem das Skript ausgeführt wird. Dies ist normalerweise dasselbe wie slavePrimaryIP .

Wenden Sie sich an Ihren Account Manager und fordern Sie die Einrichtung des SiteScope-Monitors an. Die URL sollte die öffentliche IP des Überwachungsservers sein, zum Beispielhttps://68.23.45.32/check_replication.php

Hinweis: Das Skript kann zusätzliche Elemente in der dsn list haben Array und prüfen Sie mehrere Replikate mit einem einzigen SiteScope-Probe. Die PHP-Dokumentation gibt an, dass das Komma nach dem letzten Array-Element optional ist und weggelassen werden kann. Da der SiteScope-Probe jedoch mehrere Replikate überprüft, ist es möglicherweise weniger klar, welches Replikat ein Problem hatte, wenn die Warnung schnell gelöscht wird. In dieser Hinsicht kann es sinnvoll sein, eine check_replication.php zu haben undentsprechender SiteScope-Probe, der auf jedem Replikat ausgeführt wird.

Lehnen Sie sich jetzt zurück und lassen Sie Ihren Replica-Server von der Quelle replizieren. Achten Sie darauf, keine Schreibvorgänge auf dem Reproduktionsserver durchzuführen, da dies die Replikation unterbricht! Alle auf der Quelle ausgeführten Schreibvorgänge werden automatisch über das Binärprotokoll und die Replikation an die Reproduktion gesendet. Weitere Informationen zur MySQL-Replikation finden Sie unter https://dev.mysql.com/doc/refman/5.0/en/replication.html.


Linux
  1. So richten Sie die MySQL-Master-Master-Replikation ein

  2. So richten Sie die MySQL-Replikation unter CentOS ein

  3. Richten Sie die MySQL-Quellreplikatreplikation ein

  4. So konfigurieren Sie eine MySQL-Slave-Datenbank

  5. Was ist der Zweck des „Systembenutzers“ in der MySQL-Replikation?

So konfigurieren Sie die MySQL-Master-Slave-Replikation unter CentOS 7

So konfigurieren Sie die MySQL (MariaDB) Master-Slave-Replikation unter Debian 10

Konfigurieren Sie die OpenLDAP Multi-Master-Replikation unter Linux

MySQL 8 Master-Slave-Replikation auf Ubuntu 20.04

So installieren und konfigurieren Sie MySQL unter Ubuntu 18.04

Wie richte ich die MySQL-Master-Slave-Replikation auf RHEL 7 ein?