So verwenden Sie Maxwell zum Synchronisieren von MySQL-Daten in Echtzeit

So verwenden Sie Maxwell zum Synchronisieren von MySQL-Daten in Echtzeit

Über Maxwell

Maxwell ist ein in Java geschriebener Daemon, der MySQL-Binlogs in Echtzeit lesen und Zeilenaktualisierungen im JSON-Format in Kafka, RabbitMq, Redis usw. schreiben kann. Mit dem inkrementellen MySQL-Datenstrom gibt es viele Nutzungsszenarien, z. B. die Echtzeitsynchronisierung von Daten mit dem Cache, die Synchronisierung von Daten mit ElasticSearch, Datenmigration usw.

Offizielle Maxwell-Website: http://maxwells-daemon.io
Maxwell-Quellcode: https://github.com/zendesk/maxwell

Konfiguration und Verwendung von Maxwell

Maxwell ist von Java SDK abhängig, daher müssen Sie zuerst die JDK-Umgebung konfigurieren.

1. Laden Sie das Maxwell-Installationspaket herunter

root@xxx maxwell]# Passwort
/usr/lokal/maxwell
[root@xxx maxwell]# wget https://github.com/zendesk/maxwell/releases/download/v1.19.5/maxwell-1.19.5.tar.gz
[root@xxx maxwell]# tar zxvf maxwell-1.19.5.tar.gz 
[root@xxx maxwell]# cd maxwell-1.19.5

2. Konfigurieren Sie MySQL und öffnen Sie das MySQL-Binlog-Protokoll

[root@xxx mysql]# vi /usr/local/mysql/my.cnf 

[mysqld]
log-bin=mysql-bin #füge diese Zeile hinzu binlog-format=ROW #wähle Zeilenmodus server_id=1 #gebe nach dem Zufallsprinzip eine Zeichenfolge an, die nicht mit dem Namen anderer Maschinen im Cluster identisch sein darf. Wenn nur eine Maschine vorhanden ist, kannst du sie nach Belieben angeben

Starten Sie den MySQL-Dienst neu, melden Sie sich bei MySQL an und zeigen Sie den Binlog-Protokollmodus an

mysql> Variablen wie '%log_bin%' anzeigen
+---------------------------------+------------------------------+
| Variablenname | Wert |
+---------------------------------+------------------------------+
| log_bin | EIN |
| log_bin_basename | /data/mysqldb/mysql-bin |
| log_bin_index | /data/mysqldb/mysql-bin.index |
| log_bin_trust_function_creators | AUS |
| log_bin_use_v1_row_events | AUS |
| sql_log_bin | EIN |
+---------------------------------+------------------------------+
6 Reihen im Satz (0,11 Sek.)

Maxwell benötigt die Berechtigung, den Status in der durch die Option schema_database angegebenen Datenbank zu speichern (der Standarddatenbankname ist maxwell). Daher müssen Sie ihm im Voraus die Berechtigung erteilen:

#Erstellen Sie einen Benutzer yhrepl mit synchronisierten Daten
mysql> Benutzer ‚yhrepl‘@‚*‘ erstellen, identifiziert durch ‚scgaopan‘; 
Abfrage OK, 0 Zeilen betroffen (0,10 Sek.)

#Dieser Benutzer yhrepl muss die Berechtigung zum Bedienen der Datenbanktabelle haben, die synchronisiert werden muss mysql> gewähre test.* alle Berechtigungen an „yhrepl“@„%“, identifiziert durch „scgaopan“; 
Abfrage OK, 0 Zeilen betroffen (0,13 Sek.)

#Geben Sie yhrepl die Berechtigung zum Synchronisieren von datamysql> grant select,replication client,replication slave on *.* to 'yhrepl'@'%' identified by 'scgaopan';
Abfrage OK, 0 Zeilen betroffen (0,10 Sek.)
# Maxwell benötigt die Berechtigung, den Status in der durch die Option schema_database angegebenen Datenbank zu speichern (der Standarddatenbankname ist maxwell).
mysql> gewähre 'yhrepl'@'%', identifiziert durch 'scgaopan', alle Privilegien auf maxwell.*;
Abfrage OK, 0 Zeilen betroffen (0,09 Sek.)

3. Starten Sie Maxwell und führen Sie hauptsächlich in den eigentlichen Kampf beim Schreiben von Daten in rabbitmq ein:

[root@xxx maxwell-1.19.5]# vi /usr/local/maxwell/maxwell-1.19.5/config.properties
#Protokollebene log_level=DEBUG

Produzent = Kaninchenmq
daemon=true

#Überwachte Datenbank, MySQL-Benutzer muss über die Berechtigung zum Lesen des Binärprotokolls und zum Erstellen neuer Datenbanktabellen verfügen host=47.105.110.xxx
Benutzer=yhrepl
Passwort=scgaopan

output_nulls=true
jdbc_options=autoReconnet=true

#Welche Tabellen in der Datenbank werden überwacht? filter=exclude: *.*,include: test.AA

#replica_server_id und client_id eindeutige Kennung, wird für die Clusterbereitstellung verwendet replica_server_id=64
client_id=Test-ID

#metrics_type=http
#metrics_slf4j_interval=60
#http_port=8111
#http_diagnostic=true # Standardwert: false

#kaninchenmq
rabbitmq_host=47.105.110.xxx
rabbitmq_port=5672
rabbitmq_user=Gast
rabbitmq_pass=Gast
rabbitmq_virtual_host=/
rabbitmq_exchange=maxwell
rabbitmq_exchange_type=Thema
rabbitmq_exchange_durable=false
rabbitmq_exchange_autodelete=false
rabbitmq_routing_key_template=%db%.%table%
rabbitmq_message_persistent=false
rabbitmq_declare_exchange=true

Starten Sie Maxwell:

[root@xxx maxwell-1.19.5]# ./bin/maxwell
#Kann im Hintergrund gestartet werden [root@xxx maxwell-1.19.5]# nohub ./bin/maxwell &

Wenn der Start erfolgreich ist, wird die Maxwell-Bibliothek automatisch generiert. Die Bibliothek zeichnet den Status der Maxwell-Synchronisierung, die ID der letzten Synchronisierung und andere Informationen auf. Wenn die Hauptbibliothek ausfällt oder die Synchronisierung abnormal ist, basiert die nächste Synchronisierung auf der ID der letzten Synchronisierung, solange die Maxwell-Bibliothek vorhanden ist. Wenn die Maxwell-Bibliothek nicht generiert wird oder ein Fehler gemeldet wird, sind die in config.properties konfigurierten MySQL-Benutzerberechtigungen möglicherweise nicht ausreichend.

RabbitMQ-Betrieb

RabbitMQ-Operation, nach dem Start von Maxwell wird ein Maxwell-Austausch generiert

Die Bindung der entsprechenden Warteschlange, des Austauschs und der Warteschlange muss jedoch vom Benutzer implementiert werden.

Erstellen Sie eine Maxwell-Test-Warteschlange:

Binden Sie die Warteschlange an die Börse:

Beachten Sie, dass beim Routing-Schlüssel zwischen Groß- und Kleinschreibung unterschieden wird.

Ändern Sie einen Datensatz in der Datenbank und Sie können sehen, dass sich ein Datensatz in der Maxwell-Test-Warteschlange befindet.

Vollständige Synchronisierung

Verwenden Sie den Befehl maxwell-bootstrap

./bin/maxwell-bootstrap --database xhd --table xhd-sso --host 127.0.0.1 --user xiehd --password xiehd2018 --client_id maxwell_dev

Synchronisieren Sie alle Daten in der Tabelle xhd.xhd-sso und geben Sie maxwell mit der Client-ID maxwell_dev an, um die Synchronisierung durchzuführen

Der vorherige Befehl ist zuerst öffnen und dann maxwell mit client_id=maxwell_dev starten

./bin/maxwell --client_id maxwell_dev

Warten Sie, bis die Ausführung abgeschlossen ist

Oben finden Sie Einzelheiten zur Verwendung von Maxwell zum Synchronisieren von MySQL-Daten in Echtzeit. Weitere Informationen zur Verwendung von Maxwell zum Synchronisieren von MySQL-Daten finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Python implementiert ein Skript zum Synchronisieren inkrementeller MySQL-Tabellendaten mit Clickhouse
  • Detaillierte Erläuterung des tatsächlichen Prozesses der Master-Slave-Synchronisierung der MySQL-Datenbank
  • Zwei Möglichkeiten zum Speichern von Scrapy-Daten in einer MySQL-Datenbank (synchron und asynchron)
  • Konfiguration der MySQL-Master/Slave-Datenbanksynchronisierung und häufige Fehler
  • Das KTL-Tool realisiert die Methode zum Synchronisieren von Daten von MySQL zu MySQL
  • Tutorial zum Synchronisieren von MySQL-Daten mit ElasticSearch mithilfe von Python
  • Master-Slave-Synchronisationskonfiguration und Lese-/Schreibtrennung der MySQL-Datenbank
  • Schritte zum Synchronisieren von MongoDB-Daten mit MySQL mithilfe von node.js
  • Master-Slave-Konfiguration für die synchrone Replikation einer MySQL-Datenbank unter Linux
  • PHP verwendet die SWOOLE-Erweiterung zum Synchronisieren von MySQL-Daten

<<:  Der Unterschied zwischen shtml und html

>>:  So verwenden Sie CSS-Medienabfragen mit einem geringeren Seitenverhältnis

Artikel    

Artikel empfehlen

Der Unterschied zwischen Datenzeit und Zeitstempel in MySQL

In MySQL gibt es drei Datumstypen: Datum (Jahr-Mo...

Gründe für den plötzlichen Leistungsabfall bei MySQL

Manchmal kann es vorkommen, dass eine SQL-Anweisu...

TypeScript-Aufzählungstypen im Detail erklären

Inhaltsverzeichnis 1. Digitale Aufzählung 2. Zeic...

Beispiel eines Befehls zur Linux-Hardwarekonfiguration

Hardware-Ansichtsbefehle System # uname -a # Kern...

Semantische Webseiten XHTML semantische Auszeichnung

Ein weiterer wichtiger Aspekt bei der Trennung vo...

Einfache Implementierung von HTML zum Erstellen eines persönlichen Lebenslaufs

Lebenslauf-Code: XML/HTML-CodeInhalt in die Zwisc...

Der DOCTYPE-Modusauswahlmechanismus bekannter Browser

Dokumentumfang Dieser Artikel behandelt den Modus...

Zwei Möglichkeiten, damit IE6 Bilder im PNG-24-Format normal anzeigt

Methode 1: Bitte fügen Sie den folgenden Code nach...

Eine gängige Technik zur Implementierung von Dreiecken mit CSS (mehrere Methoden)

In manchen Vorstellungsgesprächen werden häufig F...

Detaillierte Erklärung zum Erstellen einer aktualisierbaren Ansicht in MySQL

Dieser Artikel beschreibt anhand eines Beispiels,...