3rikaa

MySql Tabellen von verschiedenen Geräten in eine Server Mysql Datenbank spiegeln

Hallo,
ich bin im Bereich Linux und Datenbanken ganz neu. Habe bis jetzt C für Mikrocontroller entwickelt.
Nun muss bzw darf ich etwas mit Datenbanken machen.
Ich soll auf verschiedenen Linux Geräten Sensordaten in eine MySql Datenbank Sammeln. Diese Geräte haben aber nicht immer eine Verbindung zum Internet.
Wenn das Internet vorhanden ist soll die Lokale Datenbanktabelle in eine Server MySqldatenbank gespiegelt werden. bzw Die neuen Daten an den Server übertragen werden.
Mein erster Gedanken war MySQL Replikation.
Nach dem lesen der Doku scheint mir aber dieses Werkzeug nicht als das richtige. Oder kann man von verschieden Clients auf einen Server synkronisieren? Mit welchen Werkzeug löst man diese Aufgabe?


Danke für die Hilfe
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 600820

Url: https://administrator.de/forum/mysql-tabellen-von-verschiedenen-geraeten-in-eine-server-mysql-datenbank-spiegeln-600820.html

Ausgedruckt am: 07.06.2025 um 04:06 Uhr

wiesi200
wiesi200 30.08.2020 um 19:03:15 Uhr
Goto Top
Hallo,

so als Gedanke.

In den zu übertragenden Tabellen eine zusätzliche Spalte ob schon übertragen oder nicht.

Dann vor deine Zentraldatenbank einen Webservice spannen.
Jetzt kannst du am Client einen Request per HTTPS machen und damit die Daten übertragen und am Server durch den Webservice den DB Eintrag machen. Und das ganze dann als Service der das alle x Minuten oder wie immer du willst das macht.

Wenn der Webservice erreichbar ist setzt du die Spalte in der Tabelle am Client auf übermittelt.
Dadurch hast du auch wenig Firewall Probleme.
145033
145033 30.08.2020 aktualisiert um 19:05:20 Uhr
Goto Top
maretz
maretz 30.08.2020 um 20:01:41 Uhr
Goto Top
Nun - das kommt drauf an wieviel Einfluss du hast. Ich habe sowas ähnliches, meine Software schreibt nur lokal in die DB und dann gibt es einen „Cache-Controller“ der die Daten von der lokalen DB in die Zentrale DB schreibt und das lokale löscht (wenn das Schreiben erfolgreich war) bzw. der einfach 10 - 60 min später nen Retry macht wenn es nicht erfolgreich war.

So habe ich nicht das Problem das Daten doppelt da sind oder verloren gehen...
3rikaa
3rikaa 30.08.2020 um 21:24:24 Uhr
Goto Top
Zitat von @wiesi200:

Hallo,

so als Gedanke.

In den zu übertragenden Tabellen eine zusätzliche Spalte ob schon übertragen oder nicht.

Dann vor deine Zentraldatenbank einen Webservice spannen.
Jetzt kannst du am Client einen Request per HTTPS machen und damit die Daten übertragen und am Server durch den Webservice den DB Eintrag machen. Und das ganze dann als Service der das alle x Minuten oder wie immer du willst das macht.

Wenn der Webservice erreichbar ist setzt du die Spalte in der Tabelle am Client auf übermittelt.
Dadurch hast du auch wenig Firewall Probleme.

Würdest du das mit PHP machen? Und alles zu Fuß programmieren?
3rikaa
3rikaa 30.08.2020 um 21:25:38 Uhr
Goto Top
Zitat von @145033:

Oder nen sqldump via ssh auf die Zieldb.
https://serverfault.com/questions/356070/how-to-sync-two-mysql-tables-on ...
Hallo wie weit ist der Dump einstellbar? Oder wird hier immer alles kopiert?
3rikaa
3rikaa 30.08.2020 um 21:27:13 Uhr
Goto Top
Zitat von @maretz:

Nun - das kommt drauf an wieviel Einfluss du hast. Ich habe sowas ähnliches, meine Software schreibt nur lokal in die DB und dann gibt es einen „Cache-Controller“ der die Daten von der lokalen DB in die Zentrale DB schreibt und das lokale löscht (wenn das Schreiben erfolgreich war) bzw. der einfach 10 - 60 min später nen Retry macht wenn es nicht erfolgreich war.

So habe ich nicht das Problem das Daten doppelt da sind oder verloren gehen...

Klingt für mich sehr gut dein Vorschlag.
Ist„Cache-Controller“von Dir geschrieben oder ist das was von der Stange?
certifiedit.net
certifiedit.net 30.08.2020 um 22:21:32 Uhr
Goto Top
Solide Idee, damit wirfst du dann im Zweifel doppelte Schlüssel rein oder am Ende hast du datenquark
3rikaa
3rikaa 30.08.2020 um 22:24:57 Uhr
Goto Top
Zitat von @certifiedit.net:

Solide Idee, damit wirfst du dann im Zweifel doppelte Schlüssel rein oder am Ende hast du datenquark
Hallo guten Abend,
was meinst du damit?
Danke für deine Hilfe
145033
145033 30.08.2020 um 23:18:12 Uhr
Goto Top
Zitat von @3rikaa:

Zitat von @145033:

Oder nen sqldump via ssh auf die Zieldb.
https://serverfault.com/questions/356070/how-to-sync-two-mysql-tables-on ...
Hallo wie weit ist der Dump einstellbar? Oder wird hier immer alles kopiert?
RTFM
https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html#mysqldump-filter- ...
wiesi200
wiesi200 31.08.2020 um 05:17:57 Uhr
Goto Top
Zitat von @3rikaa:

Würdest du das mit PHP machen? Und alles zu Fuß programmieren?

Ich persönlich würde es mit PHP machen, zumindest den Webservice.
ASP.NET würd auch gehen.
Besonders Hipp ist glaub ich für sowas JS.Node

Aber ist ja Geschmackssache hat alles seine Vor und Nachteile.

Im Endeffekt ist das aber nicht anderes als der angesproche "Cache Controller" nur das ich die Daten auf dem Client lasse. Je nachdem wie du das benötigst.
wiesi200
wiesi200 31.08.2020 um 05:21:06 Uhr
Goto Top
Zitat von @3rikaa:

Zitat von @certifiedit.net:

Solide Idee, damit wirfst du dann im Zweifel doppelte Schlüssel rein oder am Ende hast du datenquark
Hallo guten Abend,
was meinst du damit?
Danke für deine Hilfe

Das der Vorschlag von @145033 die eine oder andere Schwäche hat.
maretz
maretz 31.08.2020 um 08:11:03 Uhr
Goto Top
Das hab ich selbst gebaut ... ist jetzt aber nicht die ganz grosse Anforderung... Im Endeffekt hast du lokal eine Tabelle die genauso aussieht wie die auf dem "richtigen" Server in die deine lokale Software reinschreibt...

Der Cache-Controller geht jetzt halt ganz simpel Zeile für Zeile bei, nimmt die Daten, packt die an nen Webservice auf dem richtigen Server und wartet auf die Antwort. Wenn die Antwort ist "alles ok" dann geht der bei und haut die Zeile aus der lokalen DB raus - fertig is...

Da ich mir eine GUID aus bestimmten Werten errechne kann ich auch keine doppelten Daten haben - in dem Fall würde mein richtiger Server ein Update auf die Zeile machen und fertig. Da die GUID aber u.a. aus dem Zeitstempel errechnet wird kann es da nicht zu Problemen kommen -> zu einem Zeitpunkt habe ich ja immer nur genau einen Wert gehabt -> im dümmsten fall würde ich also nen Update auf ne DB-Zeile machen die einfach nur dieselben Daten nochmal reinpackt.

Es gibt sowas auch "von der Stange" - das ist dann nur keine DB sondern da würdest du die Daten in nen Enterprise-Service Bus (z.B. FuseESB,...) packen. Hier hast du dann 2 Queues - eine aufm Server, eine auf dem Client. Und soweit die eine Verbindung haben gleichen die sich entsprechend ab. Das ganze Verfahren hat einige Vorteile (da man die Queues gut definieren kann), wäre für meinen Fall aber einfach Overkill gewesen...
mbehrens
mbehrens 31.08.2020 um 12:41:46 Uhr
Goto Top
Zitat von @3rikaa:

Ich soll auf verschiedenen Linux Geräten Sensordaten in eine MySql Datenbank Sammeln. Diese Geräte haben aber nicht immer eine Verbindung zum Internet.
Wenn das Internet vorhanden ist soll die Lokale Datenbanktabelle in eine Server MySqldatenbank gespiegelt werden. bzw Die neuen Daten an den Server übertragen werden.
Mein erster Gedanken war MySQL Replikation.
Nach dem lesen der Doku scheint mir aber dieses Werkzeug nicht als das richtige. Oder kann man von verschieden Clients auf einen Server synkronisieren? Mit welchen Werkzeug löst man diese Aufgabe?

Dann implementiere ein briefcase/disconnected model für den DAL.