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
Unter den klassischen Farbkombinationen kann wohl...
Wie lade ich MySQL von der offiziellen Website he...
Die Lösung zum Vergessen des ursprünglichen MySQL...
Es gibt viele Artikel zur SSH-Serverkonfiguration...
Mixins bieten eine sehr flexible Möglichkeit, wie...
Vorwort <br />Im vorherigen Artikel „Mein CS...
Der Hyperlink-Tag stellt einen Linkpunkt dar und ...
Einführung in Textschatten Verwenden Sie in CSS d...
Einführung Um Datenverlust in einer Produktionsum...
Inhaltsverzeichnis 1. Globale Ebene 2. Datenbanke...
Ursache Ich habe WordPress einst auf Vultr einger...
Was tun, wenn Sie Ihr Linux/Mac MySQL-Passwort ve...
Docker Compose Einführung in Compose Compose ist ...
In diesem Artikel werden anhand von Beispielen di...
Vorwort Derzeit ist das von meiner Firma verwende...