1. SynchronisationsprinzipBinlog-Protokollabonnement basierend auf MySQL: Das Binlog-Protokoll wird von MySQL verwendet, um Datenänderungen in Echtzeit aufzuzeichnen Es gibt zwei Arten der MySQL-Datensynchronisierung mit ES: vollständige Synchronisierung und inkrementelle Synchronisierung Vollständige Synchronisierung bedeutet, dass nach der ersten Erstellung des ES-Index alle Daten in MySQL auf einmal in ES importiert werden. Inkrementelle Synchronisierung bedeutet, dass neue Daten in MySQL generiert werden. Diese neuen Daten umfassen drei Situationen: neu eingefügte Daten in MySQL, aktualisierte alte Daten und gelöschte Daten. Die Änderungen und Ergänzungen dieser Daten müssen mit ES synchronisiert werden. 2. logstash-eingabe-jdbcDas offizielle Logstash-Plugin ist in Logstash integriert. Laden Sie einfach Logstash herunter und synchronisieren Sie MySQL- und Elasticsearch-Daten über die Konfigurationsdatei. Vorteil
Mangel
3. go-mysql-elasticsearchgo-mysql-elasticsearch ist ein Plug-in, das von einem einheimischen Autor entwickelt wurde Vorteil
Mangel
4. elasticsearch-jdbcDie neueste Version von elasticsearch-jdbc ist 2.3.4, und die unterstützte ElasticSearch-Version ist 2.3.4, die noch nicht implementiert ist. Vorteil
Mangel
5. Logstash-Input-JDBC-SynchronisierungDer erste Schritt ist die Installation: Nach logstash5.x ist das Plug-In logstash-input-jdbc integriert. Installieren Sie nach der Installation von logstash das Plugin logstash-input-jdbc über den Befehl cd /logstash-6.4.2/bin ./logstash-plugin installiere logstash-input-jdbc Der zweite Konfigurationsschritt: Erstellen Sie eine neue jdbc.conf im Ordner logstash-6.4.2/config und konfigurieren Sie sie wie folgt Erstellen Sie eine neue jdbc.sql-Datei im Verzeichnis logstash-6.4.2/config Wählen Sie * aus t_Mitarbeiter Schritt 3: Ausführen cd logstash-6.4.2 # Überprüfen Sie, ob die Syntax der Konfigurationsdatei korrekt ist. bin/logstash -f config/jdbc.conf --config.test_and_exit # Starten Sie bin/logstash -f config/jdbc.conf --config.reload.automatic --config.reload.automatic: Inhalt der Konfigurationsdatei automatisch neu laden Zeigen Sie die synchronisierten Daten an, nachdem Sie den Index in Kibana erstellt haben PUT Oktopus GET octopus/_search 6. go-mysql-elasticsearch-SynchronisierungSchritt 1: MySQL-Binlog-Protokoll go-mysql-elasticsearch fügt Daten hinzu, löscht und ändert sie synchron mit elasticsearch über Binlog-Protokolle in MySQL Das Binlog-Protokoll von MySQL wird hauptsächlich für die Master-Slave-Replikation und Datenwiederherstellung der Datenbank verwendet. Das Binlog zeichnet die Vorgänge zum Hinzufügen, Löschen, Ändern und Abfragen von Daten auf. Während des Master-Slave-Replikationsprozesses synchronisiert die Master-Datenbank das Binlog-Protokoll mit der Slave-Datenbank, und die Slave-Datenbank spielt die Ereignisse im Binlog-Protokoll erneut ab, um eine Master-Slave-Synchronisierung zu erreichen. MySQL Binlog hat drei Modi: ROW: Zeichnet jede Datenzeile auf, die geändert wurde, aber das Protokollvolumen ist zu groß. STATEMENT: Zeichnet jede SQL-Anweisung auf, die die Daten ändert, wodurch das Protokollvolumen reduziert wird. Allerdings ist die SQL-Anweisung bei Verwendung von Funktionen oder Triggern anfällig für Master-Slave-Inkonsistenzen. MIXED: Kombiniert die Vorteile von ROW und STATEMENT und wählt die Verwendung von ROW oder STATEMENT zum Aufzeichnen von Protokollen entsprechend der spezifischen SQL-Anweisung, die Datenoperationen ausführt. Um Daten über MySQL-Binlog mit dem ES-Cluster zu synchronisieren, können Sie nur den ROW-Modus verwenden, da nur der ROW-Modus den geänderten Inhalt der Daten in MySQL kennen kann. Am Beispiel der UPDATE-Operation lautet der Inhalt des Binlog-Protokolls im ROW-Modus wie folgt: ZEITSTEMPEL EINSTELLEN=1527917394/*!*/; BEGINNEN /*!*/; # bei 3751 #180602 13:29:54 Server-ID 1 end_log_pos 3819 CRC32 0x8dabdf01 Table_map: `webservice`.`building` zugeordnet zu Nummer 74 # bei 3819 #180602 13:29:54 Server-ID 1 end_log_pos 3949 CRC32 0x59a8ed85 Update_rows: Tabellen-ID 74 Flags: STMT_END_F BINLOG ' UisSWxMBAAAARAAAAOsOAAAAAEoAAAAAAAAEACndlYnNlcnZpY2UACGJ1aWxkaW5nAAYIDwEPEREG wACAAQAAAAHfq40= UisSWx8BAAAAggAAAG0PAAAAAEoAAAAAAAEAAgAG///A1gcAAAAAAAALYnVpbGRpbmctMTAADwB3 UkRNbjNLYlV5d1k3ajVbD64WWw+uFsDWBwAAAAAAAAtidWlsZGluZy0xMAEPAHdSRE1uM0tiVXl3 WTdqNVsPrhZbD64Whe2oWQ== '/*!*/; ### UPDATE `webservice`.`building` ###WO ### @1=2006 /* LONGINT meta=0 nullable=0 is_null=0 */ ### @2='building-10' /* VARSTRING(192) meta=192 nullable=0 is_null=0 */ ### @3=0 /* TINYINT meta=0 nullable=0 is_null=0 */ ### @4='wRDMn3KbUywY7j5' /* VARSTRING(384) meta=384 nullable=0 is_null=0 */ ### @5=1527754262 /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */ ### @6=1527754262 /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */ ### SATZ ### @1=2006 /* LONGINT meta=0 nullable=0 is_null=0 */ ### @2='building-10' /* VARSTRING(192) meta=192 nullable=0 is_null=0 */ ### @3=1 /* TINYINT meta=0 nullable=0 is_null=0 */ ### @4='wRDMn3KbUywY7j5' /* VARSTRING(384) meta=384 nullable=0 is_null=0 */ ### @5=1527754262 /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */ ### @6=1527754262 /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */ # bei 3949 #180602 13:29:54 Server-ID 1 end_log_pos 3980 CRC32 0x58226b8f Xid = 182 BEGEHEN /*!*/; Ein Beispiel für Binlog-Inhalte im STATEMENT-Modus ist wie folgt: ZEITSTEMPEL FESTLEGEN=1527919329/*!*/; Aktualisieren Sie den Gebäudesatz Status = 1, wobei Id = 2000 /*!*/; # bei 688 #180602 14:02:09 Server-ID 1 end_log_pos 719 CRC32 0x4c550a7d Xid = 200 BEGEHEN /*!*/; Aus den Protokollinhalten von UPDATE-Operationen im ROW-Modus und im STATEMENT-Modus können wir ersehen, dass der ROW-Modus die Werte aller Felder einer zu ändernden Datenzeile vor der Aktualisierung vollständig aufzeichnet und die Werte aller Felder nach der Änderung, während der STATEMENT-Modus nur die SQL-Anweisung der UPDATE-Operation aufzeichnet. Wenn wir MySQL-Daten in Echtzeit mit ES synchronisieren möchten, können wir Binlog nur im ROW-Modus auswählen, den Dateninhalt des Binlog-Protokolls abrufen und analysieren, die ES-Dokument-API ausführen und die Daten mit dem ES-Cluster synchronisieren. Anzeigen und Ändern des Binlog-Modus # Binlog anzeigen modemysql> Variablen wie „%binlog_format%“ anzeigen; # Binlog ändern modemysql> set global binlog_format='ROW'; # Prüfen Sie, ob Binlog aktiviert ist mysql> Variablen wie „log_bin“ anzeigen; # Binlog aktivieren Ändern Sie die Datei my.cnf log-bin = mysql-bin Schritt 2 Installation # Installieren Sie go sudo apt-get installiere go # Installieren Sie godep Gehen Sie zu github.com/tools/godep # Holen Sie sich das Plugin go-mysql-elasticsearch unter github.com/siddontang/go-mysql-elasticsearch # Installieren Sie das Plugin go-mysql-elasticsearch cd go/src/github.com/siddontang/go-mysql-elasticsearch machen Schritt 3 Konfiguration go/src/github.com/siddontang/go-mysql-elasticsearch/etc/river.toml # MySQL-Adresse, Benutzer und Passwort # Der Benutzer muss über Replikationsberechtigungen in MySQL verfügen. my_addr = "127.0.0.1:3306" # Grundlegende MySQL-Einstellungen, die synchronisiert werden müssen my_user = "root" mein_Passwort = "root" # Elasticsearch-Adresse es_addr = "127.0.0.1:9200" # Lokale Elasticsearch-Konfiguration # Pfad zum Speichern von Daten, wie master.info, und zum Dumpen von MySQL-Daten data_dir = "./var" # Datenspeicher-URL # Die folgende Konfiguration wird als Standard gespeichert# Innere HTTP-Statusadresse stat_addr = "127.0.0.1:12800" # Pseudo-Server-ID wie ein Slave server_id = 1001 #mysql oder mariadb Geschmack = "mysql" #mysqldump Ausführungspfad mysqldump = "mysqldump" #MySQL-Datenquelle [[Quelle]] schema = "test" //Der entsprechende Datenbankname, wenn Elasticsearch mit MySQL synchronisiert wird. # Nur die folgenden Tabellen werden mit Elasticsearch synchronisiert. # Um mehrere Tabellen in der Testdatenbank zu synchronisieren. Bei einigen Projekten, die den Mechanismus zur Tabellenpartitionierung verwenden, können wir zum Abgleichen Platzhalter verwenden. Beispielsweise kann t_[0-9]{4} den Tabellen t_0000 bis t_9999 entsprechen. Tabellen = ["t", "t_[0-9]{4}", "tfield", "tfilter"] # Nachfolgend finden Sie die Zuordnung von Sonderregeln # Für eine Tabelle müssen wir den Typ des ES-Index angeben, mit dem ihre Daten synchronisiert werden sollen. Wenn nicht angegeben, verwenden wir standardmäßig den Schemanamen als ES-Index und -Typ [[Regel]] schema = "test" //Datenbanknametable = "t" //Tabellennameindex = "test" //Entsprechender Indexnametype = "t" //Entsprechender Typname# Synchronisiere alle Tabellen, die dem Format t_[0-9]{4} entsprechen, mit dem ES mit Indextest und Typ t. Natürlich müssen diese Tabellen sicherstellen, dass das # Schema konsistent ist [[Regel]] schema = "test" Tabelle = "t_[0-9]{4}" Index = "Test" Typ = "t" # Für die Tabelle tfilter synchronisieren wir nur die ID- und Name-Spalten, die anderen werden nicht synchronisiert filter = ["id", "name"] # Die Spalten-ID der Tabelle tfield wird auf es_id abgebildet, und Tags werden auf es_tags abgebildet. # Liste Dieses Feld teilt Ihnen explizit mit, dass die entsprechenden Spaltendaten in den ES-Array-Typ konvertiert werden müssen. Dies wird jetzt häufig für MySQLs varchar # und andere Typen verwendet. Wir können Daten wie „a, b, c“ speichern und dann hoffen, sie beim Synchronisieren mit ES in ein Listenformat wie [a, b, c] konvertieren zu können. [Regel.Feld] # Spalte „id“ dem ES-Feld „es_id“ zuordnen id="es_id" # Ordnen Sie die Spalte „tags“ dem ES-Feld „es_tags“ mit dem Array-Typ zu tags="es_tags,list" # Spalte „Schlüsselwörter“ mit Array-Typ zu ES zuordnen Schlüsselwörter=",Liste" Schritt 4: Ausführen cd go/src/github.com/siddontang/go-mysql-elasticsearch bin/go-mysql-elasticsearch -config=./etc/river.toml 7. Elasticsearch-JDBC-SynchronisierungLaden Sie das Tool herunter Entpacken: unzip elasticsearch-jdbc-2.3.2.0-dist.zip Festlegen von Umgebungsvariablen [root@autofelix /]# vi /etc/profile exportiere JDBC_IMPORTER_HOME=/elasticsearch-jdbc-2.3.2.0 Umgebungsvariablen wirksam machen [root@autofelix /]# Quelle /etc/Profil Konfigurationsreferenz Schritt 1: Erstellen Sie einen neuen Ordner odbc_es im Stammverzeichnis wie folgt [root@autofelix /]# ll /odbc_es/ drwxr-xr-x 2 root root 4096 16. Juni 03:11 Protokolle -rwxrwxrwx 1 root root 542 16. Juni 04:03 mysql_import_es.sh Schritt 2: Erstellen Sie ein neues Skript mysql_import_es.sh mit folgendem Inhalt [root@autofelix odbc_es]# cat mysql_import_es.sh '#!/bin/sh bin=$JDBC_IMPORTER_HOME/bin lib=$JDBC_IMPORTER_HOME/lib echo '{ "Typ": "jdbc", "jdbc": { "elasticsearch.autodiscover":true, "elasticsearch.cluster":"my-application", #Clustername, siehe: /usr/local/elasticsearch/config/elasticsearch.yml "url":"jdbc:mysql://10.8.5.101:3306/test", #MySQL-Datenbankadresse "Benutzer":"root", #MySQL-Benutzername "Passwort":"123456", #MySQL-Passwort "sql":"select * from cc", "elastische Suche" : { "Host": "10.8.5.101", "Hafen" : 9300 }, "index" : "meinindex", #neuer Index "Typ" : "meinTyp" #neuer Typ } }'| java \ -cp "${lib}/*" \ -Dlog4j.configurationFile=${bin}/log4j2.xml \ org.xbib.tools.Runner \ org.xbib.tools.JDBCImporter Schritt 3: Fügen Sie mysql_import_es.sh ausführbare Berechtigungen hinzu. [root@autofelix odbc_es]# chmod a+x mysql_import_es.sh Schritt 4: Führen Sie das Skript mysql_import_es.sh aus [root@autofelix odbc_es]# ./mysql_import_es.sh Dies ist das Ende dieses Artikels zum Synchronisieren von MySQL-Daten mit Elasticsearch. Weitere Informationen zum Synchronisieren von MySQL-Daten mit Elasticsearch finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: Unterschiede zwischen Windows Server 2008R2, 2012, 2016 und 2019
>>: Lösung für die Ineffektivität der flexiblen Layoutbreite in CSS3
Ein Satz zur Einführung von HOC Was ist eine Komp...
Das Computersystem ist: win7 Dieser Artikel basie...
Inhaltsverzeichnis Vorwort Verwenden Sie keine Ze...
Ich möchte den Titel links und das Datum rechts a...
Verwenden Sie auto.js, um den täglichen Check-in ...
Inhaltsverzeichnis Aufbau einer JSX-Umgebung NPM ...
Die MySQL-Versionsnummer ist 5.7.28. Tabelle A ha...
Grammatik: Hintergrundbild: Kegelschnitt-Farbverl...
zählen(*) erreichen 1. MyISAM: Speichert die Gesa...
Szenario mit dem Problem des Seitenumblätterns B ...
Inhaltsverzeichnis Was ist natives JavaScript A. ...
Heute werden wir einen einfachen Fall durchgehen ...
Vorwort: MySQL ist ein relationales Datenbankverw...
Erstellen Sie zunächst einen Tomcat-Ordner. Um di...
Die Implementierung des Erweiterns und Reduzieren...