5 Möglichkeiten zur Migration von MySQL zu ClickHouse

5 Möglichkeiten zur Migration von MySQL zu ClickHouse

Die Datenmigration muss von MySQL nach ClickHouse importiert werden. Der zusammenfassende Plan sieht wie folgt aus und umfasst drei von ClickHouse selbst unterstützte Methoden und zwei Tools von Drittanbietern.

Tabellen-Engine MySQL erstellen
TABELLE ERSTELLEN [WENN NICHT VORHANDEN] [db.]Tabellenname [ON CLUSTER Cluster]
(
 Name1 [Typ1] [STANDARD|MATERIALISIERT|ALIAS Ausdruck1] [TTL Ausdruck1],
 Name2 [Typ2] [STANDARD|MATERIALISIERT|ALIAS Ausdruck2] [TTL Ausdruck2],
 ...
 INDEX Indexname1 Ausdruck1 TYP Typ1(...) GRANULARITÄT Wert1,
 INDEX Indexname2 Ausdruck2 TYP Typ2(...) GRANULARITÄT Wert2
) ENGINE = MySQL('Host:Port', 'Datenbank', 'Tabelle', 'Benutzer', 'Passwort'[, Ersetzungsabfrage, 'Bei_Duplikatsklausel']);

Offizielle Dokumentation: https://clickhouse.yandex/docs/en/operations/table_engines/mysql/

Beachten Sie, dass die eigentlichen Daten in einer entfernten MySQL-Datenbank gespeichert sind, die als Fremdtabelle verstanden werden kann.

Sie können dies überprüfen, indem Sie Daten in MySQL hinzufügen und löschen.

Einfügen in „Auswählen“
-- Erstellen Sie zuerst eine Tabelle CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
 Name1 [Typ1] [STANDARD|MATERIALISIERT|ALIAS Ausdruck1],
 Name2 [Typ2] [STANDARD|MATERIALISIERT|ALIAS Ausdruck2],
 ...
) ENGINE = Motor
-- Daten importieren INSERT INTO [db.]table [(c1, c2, c3)] Spalte auswählen oder * from mysql('host:port', 'db', 'table_name', 'user', 'password')

Sie können den Spaltentyp und die Anzahl der Spalten anpassen und Clickhouse-Funktionen zum Verarbeiten von Daten verwenden, z. B.

select toDate(xx) from mysql("Host:Port", "DB", "Tabellenname", "Benutzername", "Passwort")
Tabelle erstellen als „Auswählen aus“
TABELLE ERSTELLEN [WENN NICHT VORHANDEN] [db.]Tabellenname
ENGINE = Protokoll
ALS 
WÄHLEN *
VON mysql('Host:Port', 'DB', 'article_clientuser_sum', 'Benutzer', 'Passwort')

Netizen-Artikel: http://jackpgao.github.io/2018/02/04/ClickHouse-Use-MySQL-Data/

Benutzerdefinierte Spalten werden nicht unterstützt und der vom Blogger in der Referenz geschriebene Test ENGIN=MergeTree ist fehlgeschlagen.

Es kann als eine Kombination aus create table und insert into select verstanden werden.

Altinity/clickhouse-mysql-data-reader

Das Unternehmen Altinity hat ein Python-Tool zum Migrieren von Daten von MySQL zu ClickHouse als Open Source freigegeben (unterstützt inkrementelle Updates von Binlog und vollständigen Import), aber die offizielle Readme-Datei ist nicht mit dem Code synchronisiert und es funktioniert nicht gemäß der Schnellstartanleitung.

## Tabelle clickhouse-mysql erstellen \
 --src-host=127.0.0.1 \
 --src-user=Leser \
 --src-password=Qwerty1# \
 --Tabellenvorlagen mit Datenbankerstellung \
 --src-table=Fluggesellschaft.ontime > create_clickhouse_table_template.sql
## Ändern Sie das Skript vim create_clickhouse_table_template.sql
## Importieren und erstellen Sie die Tabelle clickhouse-client -mn < create_clickhouse_table_template.sql
## Daten in clickhouse-mysql importieren \
 --src-host=127.0.0.1 \
 --src-user=Leser \
 --src-password=Qwerty1# \
 --Tabelle-Migration \
 --dst-host=127.0.0.1 \
 --dst-table=logunified \
 --csvpool

Offizielle Dokumentation: https://github.com/Altinity/clickhouse-mysql-data-reader#mysql-migration-case-1—migrate-existing-data

Beachten Sie, dass die oben genannten drei Methoden alle von MySQL in ClickHouse importiert werden. Wenn die Datenmenge groß ist, wird MySQL stark unter Druck gesetzt. Im Folgenden sind zwei Offline-Methoden aufgeführt (Streamsets unterstützen sowohl Echtzeit als auch Offline)

csv

## Ignorieren Sie das Erstellen der Tabelle clickhouse-client \
 -h Gastgeber \
 --query="INSERT INTO [db].table FORMAT CSV" < test.csv

Bei einer minderen Qualität der Quelldaten kommt es allerdings häufig zu Problemen, wie zum Beispiel Sonderzeichen (Trennzeichen, Escape-Zeichen) oder Zeilenumbrüchen. Ich wurde schwer betrogen.

Benutzerdefiniertes Trennzeichen, --format_csv_delimiter="|"
Wenn ein Fehler auftritt, überspringen Sie ihn, anstatt abzubrechen. --input_format_allow_errors_num=10 lässt bis zu 10 Fehlerzeilen zu, --input_format_allow_errors_ratio=0.1 lässt 10 % Fehler zu. csv überspringt Nullwerte und meldet Code: 27. DB::Exception: Eingabe kann nicht analysiert werden: erwartet, vorher: xxxx: (in Zeile 69) FEHLER: Müll nach Nullable(Datum): "8,002<ZEILENFEED>0205" sed ' :a;s/,,/,\\N,/g;ta' |clickhouse-client -h host --query "INSERT INTO [db].table FORMAT CSV" Ersetzen Sie ,, durch ,\N,
python clean_csv.py --src=src.csv --dest=dest.csv --chunksize=50000 --cols --encoding=utf-8 --delimiter=,

clean_csv.py Siehe meinen anderen Artikel 032-csv-Datei Fehlertoleranzverarbeitung

Streamsets

Streamsets unterstützt den vollständigen Import aus MySQL oder das Lesen von CSV und unterstützt auch inkrementelles Einfügen durch Abonnieren von Binlog. Bitte lesen Sie meinen anderen Artikel 025 – Installation des Big Data ETL-Tools StreamSets und Abonnement von MySQL Binlog.

Dieser Artikel zeigt nur, wie Clickhouse aus MySQL importiert wird

Dieser Artikel setzt voraus, dass Sie den Streamsets-Dienst bereits eingerichtet haben

Aktivieren und Neustarten des Dienstes

Laden Sie das JDBC-JAR und die Abhängigkeitspakete von MySQL und Clickhouse hoch.

Bequemer Weg: Erstellen Sie pom.xml und verwenden Sie Maven, um es einheitlich herunterzuladen

<Projekt xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <groupId>com.anjia</groupId>
 <artifactId>Demo</artifactId>
 <packaging>Glas</packaging>
 <version>1.0-SNAPSHOT</version>
 <name>Demo</name>
 <url>http://maven.apache.org</url>
 <Abhängigkeiten>
 <Abhängigkeit>
 <groupId>ru.yandex.clickhouse</groupId>
 <artifactId>clickhouse-jdbc</artifactId>
 <version>0.1.54</version>
 </Abhängigkeit>
 <Abhängigkeit>
 <groupId>mysql</groupId>
 <artifactId>mysql-connector-java</artifactId>
 <version>5.1.47</version>
 </Abhängigkeit>
 </Abhängigkeiten>
</Projekt>

Wenn Maven lokal installiert ist, führen Sie den folgenden Befehl aus

mvn-Abhängigkeit: Abhängigkeiten kopieren -DoutputDirectory=lib -DincludeScope=kompilieren

Alle erforderlichen JAR-Dateien werden heruntergeladen und in das Lib-Verzeichnis kopiert.

Kopieren Sie es dann in streamsets /opt/streamsets-datacollector-3.9.1/streamsets-libs-extras/streamsets-datacollector-jdbc-lib/lib/

Starten Sie den Streamsets-Dienst neu

       

Zusammenfassen

Oben sind die 5 Methoden zum Migrieren von MySQL zu ClickHouse, die vom Herausgeber vorgestellt wurden. Ich hoffe, dass sie für alle hilfreich sein werden. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Herausgeber wird Ihnen rechtzeitig antworten. Ich möchte auch allen für ihre Unterstützung der Website 123WORDPRESS.COM danken!
Wenn Sie diesen Artikel hilfreich finden, können Sie ihn gerne abdrucken und dabei bitte die Quelle angeben. Vielen Dank!

Das könnte Sie auch interessieren:
  • Detaillierte Schritte zum Migrieren des Datenordners der MySQL-Datenbank
  • Detaillierte Erklärung zur Migration einer MySQL-Datenbank auf einen anderen Computer
  • Zusammenfassung der Methoden zur Migration einer Oracle-Datenbank nach MySQL
  • Migrieren Sie die MySQL-Datenbank zur Oracle-Datenbank
  • Die MySQL-Datenbankmigration exportiert und importiert schnell große Datenmengen
  • So verwenden Sie das Entladen, Migrieren und Laden von MySQL InnoDB-Tablespaces
  • Detaillierte Erläuterung der MySQL-Datenmigration - Vorsichtsmaßnahmen beim direkten Ersetzen des Datenverzeichnisses
  • Detaillierte Erläuterung der Migrationsmethode für MySQL5.5-Datenbankdatenverzeichnisse
  • Methode zur Synchronisierung von MySQL-Sicherungs- und Migrationsdaten
  • Ein MySQL-Migrationsplan und eine praktische Auflistung der Fallstricke

<<:  So stellen Sie ein SpringBoot-Projekt mit Docker bereit

>>:  ElementUI implementiert die Funktionsschaltfläche zum Zurücksetzen des Formulars el-form

Artikel empfehlen

InnerHTML verstehen

<br />Verwandte Artikel: innerHTML HTML DOM ...

25 Beispiele für die Verwendung kreisförmiger Elemente im Webdesign

Heute listet dieser Beitrag einige großartige Beis...

So verwenden Sie den dd-Befehl in Linux, ohne die Festplatte zu zerstören

Egal, ob Sie versuchen, Daten von einem sterbende...

Detaillierte Erklärung der Interaktion zwischen React Native und IOS

Inhaltsverzeichnis Voraussetzungen RN übergibt We...

Löschvorgang für Docker-Volumes

prune Um diesen Befehl verwenden zu können, müsse...

Docker5 - Vollfunktionaler Hafenlager-Bauprozess

Harbor ist ein Registry-Server auf Unternehmenseb...

Detaillierte Erklärung des Unterschieds zwischen Uniapp und Vue

Inhaltsverzeichnis 1. Einfaches Seitenbeispiel 2....

Zusammenfassung der Linux-Befehle zur Dateiverzeichnisverwaltung

Befehl „touch“ Es hat zwei Funktionen: Eine beste...

Docker-Installation von Nginx Probleme und Fehleranalyse

Frage: Beim Installieren Nginx in Docker ist der ...

So stellen Sie ein Vue-Projekt unter Nginx bereit

Heute werde ich den Server nginx verwenden und mu...

CentOS7-Installations-Tutorial für Zabbix 4.0 (Abbildung und Text)

Deaktivieren Sie SeLinux setenforce 0 Dauerhaft g...

Der vollständige Implementierungsprozess von Sudoku mit JavaScript

Inhaltsverzeichnis Vorwort So lösen Sie Sudoku Fü...