MariaDB Tabellen Abgleichen

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

MariaDB Tabellen Abgleichen

Beitrag von pluto »

Hallo

Ich habe in den letzten Monaten ein kleinen Webserver geschrieben, der Zugriff auf eine MariaDB hat. Die Anwendung verwaltet Notizen.

Das Szenario:
Ich habe ein PC und ein Laptop. Auf beiden soll diese Anwendung laufen. Auf beiden läuft bereits ein MariaDB Server.
Ich möchte das ganze ohne Internet-Server lösen. Einfach aus zwei gründen:
1. Da wo ich mich zwischendurch aufhalte, gibt es zwar Internet, aber nicht unbedingt 100% zuverlässig.
2. Ich habe noch kein V oder Root Server gemietet.

Meine Idee:
Ich habe jetzt eine History Tabelle erstellt, wo jede Änderung an der Haupttabelle eingefügt werden, über Trigger. Das ganze klappt recht gut.
Ich habe also nun eine Tabelle die alle Änderungen der Haupttabelle enthält.

Ich gehe im Moment davon aus, dass die beiden Datenbanken(Die eine auf dem PC und die andere auf dem Laptop) nie immer 100% gleich sind.
Über die History Tabelle jedoch, kann ich sie wieder "vereinen". Kann sein, dass einige Entscheidungen der Benutzer treffen muss(Da bin ich mir noch nicht 100% sicher).

Dazu einige Frage:
In der History Tabelle gibt es ein Feld: Action(unter anderem), da steht drin, was genau passiert ist, ob gelöscht, hinzugefügt oder verändert wurde.
Genau darum geht es, wie kann ich am besten die History Tabelle Exportieren und dann abgleichen mit der Datenbank auf mein Laptop zum Beispiel.

Meine Idee dazu:
Eine Anwendung schreiben, den kompletten Inhalt der History Tabelle in einer JSON Datei zum Beispiel exportiert und auf dem Ziel System auch wieder Importieren kann. Im Ziel Verzeichnis sollte dann noch ein "Datum" und eine Uhrzeit vom letzten Abgleich abgelegt werden.

Oder wären Server Proceudren besser geeignet?
Wie würde ihr dieses Problem lösen?

Mein Ziel ist es am ende "nur" noch eine Datei zu haben, die ich auf mein Speicherstick oder auf mein WebSpace laden kann.
Da die Datenbank mit der Zeit wachsen wird, möchte ich auch nicht immer alles in die JSON Datei schreiben, sondern legendlich die Änderungen.

Entweder habe ich falsch im Internet gesucht, oder es wurde einfach noch kein weg beschrieben, wie das gehen könnte mit einer MariaDB. ich habe auch unter den begriff mySQL gesucht. Die meisten Tutorials höheren leider immer dann auf, wenn es Anfängt Spannend zu werden.

Die meisten gehen davon, aus das es ein Zentralen Internet Server gibt oder das man das Master/Slave Modell verwendet(was vielleicht auch noch ein Versuch Wert wäre, dazu müsste ich aber den Laptop zwischendurch "Zuhause" anmachen damit die Daten abgeglichen werden können).
MFG
Michael Springwald

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: MariaDB Tabellen Abgleichen

Beitrag von mse »

Hast du schon an git gedacht?

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: MariaDB Tabellen Abgleichen

Beitrag von Socke »

mse hat geschrieben:Hast du schon an git gedacht?

Das wäre ein Weg, den man mit DokuWiki verwenden kann. DokuWiki speichert alles als Datei ab und verwendet keine Datenbank.

pluto hat geschrieben:Meine Idee:
Ich habe jetzt eine History Tabelle erstellt, wo jede Änderung an der Haupttabelle eingefügt werden, über Trigger. Das ganze klappt recht gut.
Ich habe also nun eine Tabelle die alle Änderungen der Haupttabelle enthält.

Die Idee mit Triggern und einer Protokolltabelle ist nicht neu und wird auch in kommerziellen Produkten verwendet. Hier habe ich bisher nur eine Replikation in eine Richtung gesehen, d.h. auf der Zielseite sind keine Änderungen zugelassen. Das spart natürlich den Abgleich von konkurrierenden Änderungen. Im CalDAV-Protokoll ist für ähnliche Situationen festgelegt: der Server hat immer Recht.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: MariaDB Tabellen Abgleichen

Beitrag von pluto »

Hast du schon an git gedacht?

Wie soll mir das hier weiter helfen?
Klar, kann ich meine Dokumente über ein Lokales GIT abgleichen.... dann wär es keine Datenbank mehr.

Das spart natürlich den Abgleich von konkurrierenden Änderungen. Im CalDAV-Protokoll ist für ähnliche Situationen festgelegt: der Server hat immer Recht.

Man kann es sich auch einfach machen.... stimmt....
Ist aber nicht mein Ziel...
MFG
Michael Springwald

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: MariaDB Tabellen Abgleichen

Beitrag von pluto »

Bevor ich Missverstanden werden, mir geht es bei diesem Projekt Primär um zwei Dinge:
1. Erfahrungen mit Datenbanken Sammeln:
Was ist Möglich?
Was ist Sinnvoll?
Gibt es ein Standardweg für mein Anliegen? Es müssen ja nicht immer Notizen sein, es können auch andere Dinge sein.

Im Internet gibt es immer nur die gleichen Konzepte zu finden, dass ist auf dauer einfach zu langweilig.
Diese Konzepte sind Bausätze: Foren, Wikis, und soweiter.

2. Das ganze ist natürlich nur ein Test Projekt. Entweder, es ist ein möglicher Weg um Notizen zu sammeln oder nicht.

Mir ist im Prinzip klar, dass Datenbanken, wie MariaDB und CO, eigentlich dafür ausgelegt sind im Netzt(ob Lokal oder Global) zu Funktionieren bzw, da es dort am Sinnvollsten ist. Es stellt sich natürlich auch die Frage, wie Sinnvoll es ist, für eine Person gleich eine DB anzulegen, aber was spricht da gegen?

Ich würde gerne mal "andere" Wege ausprobieren. Heut zu Tage wird alles immer sofort in einer "Claud" gelegt. Warum? Weil es einfacher ist.

Da ich im Internet bisher kaum Sinnvoll Informationen zum Thema gefunden habe, denke ich, ich gehe hier kein "Standard" weg.
MFG
Michael Springwald

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: MariaDB Tabellen Abgleichen

Beitrag von mse »

pluto hat geschrieben:
Hast du schon an git gedacht?

Wie soll mir das hier weiter helfen?

git kann sehr gut Texte aus verschiedenen Versionen kombinieren, übliche relationale Datenbanken können das nicht. Zudem ist git ebenfalls eine Art Datenbank.
Falls du eine relationale Datenbank mit Replikationsfunktion suchst ist vielleicht PostgreSQL mit z.B. Bucardo das richtige für dich.
https://wiki.postgresql.org/wiki/Bucardo
AFAIK hat auch MariaDB Replikationsfunktionen.

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: MariaDB Tabellen Abgleichen

Beitrag von pluto »

Falls du eine relationale Datenbank mit Replikationsfunktion suchst ist vielleicht PostgreSQL mit z.B. Bucardo das richtige für dich.

Ich suche keine Datenbank mit "Replikationsfunktion" Funktion. Was ich suche ist, eine einfache Möglichkeit, die Histroy Tabelle die ich erstellt habe bzw. erstellt wird, wenn die Haupt Tabelle verändert wird wieder einzulesen bzw. auszulesen(Exportieren).

Der Einzigste Weg der mir bisher eingefallen ist: Ein weiteren DB Client zu erstellen, der die Histroy Table komplett einlist und exportieren kann, damit ich sie später mit dem gleichen Programm wieder importieren kann.

AFAIK hat auch MariaDB Replikationsfunktionen.

ja, dass habe ich gelesen, ist aber in meinem Fall sehr Unpraktisch, so wie ich es verstanden habe. Weil es ein Master und ein Slave braucht bzw. Es geht wohl auch Master/Master, aber genau das möchte ich nicht.

Weil dann müsste ich mein Laptop aufbauen und eine Verbindung zum PC herstellen. Dann würde das natürlich gehen.
MFG
Michael Springwald

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: MariaDB Tabellen Abgleichen

Beitrag von mse »

pluto hat geschrieben:Ich suche keine Datenbank mit "Replikationsfunktion" Funktion. Was ich suche ist, eine einfache Möglichkeit, die Histroy Tabelle die ich erstellt habe bzw. erstellt wird, wenn die Haupt Tabelle verändert wird wieder einzulesen bzw. auszulesen(Exportieren).

Das ist doch asynchrone Master-Master Replikation?

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: MariaDB Tabellen Abgleichen

Beitrag von pluto »

Das ist doch asynchrone Master-Master Replikation?

ja, aber ich müsste immer noch den Laptop einmal anmachen, damit sich die Datenbanken abgleichen oder?...
MFG
Michael Springwald

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: MariaDB Tabellen Abgleichen

Beitrag von mse »

Oder die Daten auf den PC kopieren und von dort auf den primary master replizieren. Ob das mit Bucardo geht weiss ich nicht. Eine DB Replikation selbst zu programmieren ist vermutlich nicht ganz einfach. Ich fürchte, ich verstehe dein Vorhaben immer noch nicht.
Du möchtest deine Notizen auf einem Memory Stick haben den du auf alle deine Arbeitsumgebungen mitnimmst. Warum brauchst du dann noch Replikation?

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: MariaDB Tabellen Abgleichen

Beitrag von pluto »

Du möchtest deine Notizen auf einem Memory Stick haben den du auf alle deine Arbeitsumgebungen mitnimmst. Warum brauchst du dann noch Replikation?

Der Punkt ist: Ich Erstelle Zuhause neue Notizen oder bearbeite alte.
Dann habe ich mein Laptop. da tue ich das gleiche, aber nicht Zuhause sondern woanders.

D.H. Es ist schwer finde ich diese Notizen auf dem gleichen Stand zu halten. Weil ich immer Manuell die geänderten Dateien auf dem Laptop zurzeit auf mein WebSpace oder Speicherstick kopiere, damit ich sie Zuhause einfach nur runterladen brauche ohne den Laptop extra aufzubauen.

Darum die Idee mit der Datenbank. Ich merke aber schon, dass es vielleicht etwas übertrieben ist... Mir geht es darum wenn Möglich unter Internet die Notizen auf den gleichen Stand zu halten.

Notizen ist vielleicht auch der Falsche begriff, es sind Informationen die ich sammel Beschreibungen, Ideen, Gedanken.... Die Fasse ich kurz als Notizen zusammen.
Die Text Dateien können schon länger werden mit der Zeit.

Die Web Oberfläche ist bereits dafür ausgelegt. Die Daten kommen auch schon in die Datenbank. Die Histroy Table wird wie schon geschrieben auch angelegt und mit Werten gefüllt(Automatisch, dank Trigger).

Vielleicht habe ich die Frage auch unklar gestellt: Im Internet gibt es sehr viele Beispiele/Tutorials wie man trigger nutzt. Meine Anwendung kann nun eine neue Datenbank anlegen und ebenfalls die Trigger hinzufügen. Was ich bisher nicht gefunden habe ist: Was mache ich nun mit der Histroy Table?

Ich möchte die Einträge aus dieser Tabelle Exportieren am besten in eine Austausch Datei um sie wieder zu Importieren....
D.H. ich muss die Datei einlesen und schritt für schritt Abarbeiten. Zum Beispiel, da ist jetzt ein Insert passiert, also wurde was eingefügt und hier wurde was gelöscht, und hier was geändert und soweiter.
MFG
Michael Springwald

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1423
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: MariaDB Tabellen Abgleichen

Beitrag von fliegermichl »

Aber genau das ist ist doch "Replikation" und wie Martin schon geschrieben hat, ist git dafür bestens geeignet.
Wenn du an zwei Orten an der gleichen Notiz in der gleichen Zeile geändert hast, dann musst du selbst nochmal entscheiden, was richtig ist.

Ansonsten macht git das vollkommen automatisch (und auch sehr gut und schnell)

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: MariaDB Tabellen Abgleichen

Beitrag von pluto »

Aber genau das ist ist doch "Replikation" und wie Martin schon geschrieben hat, ist git dafür bestens geeignet.
Wenn du an zwei Orten an der gleichen Notiz in der gleichen Zeile geändert hast, dann musst du selbst nochmal entscheiden, was richtig ist.

Gut und wie verbinden sich die zwei Master/Master Datenbanken?
D.H. ich müsste dann den Laptop einmal kurz aufbauen, so das sich die Datenbank auf dem Laptop mit der auf dem PC verbinden kann richtig?
Wenn ich dann wieder komme, müsste ich es erneut mache. Genau das ist der Punkt.

Es gebe da noch die Idee, mit einem SSH Tunnel. So das die Datenbank Verbindung quasi über SSH getunneln werden kann. Das wäre eine weitere Idee.
hat das wer von euch schon mal gemacht? Dann könnte ich Praktisch so ein Master/Master Konzept aufbauen(vielleicht). Wäre bestimmt die Sinnvollste Variante, weil so landen die Daten nicht im "Internet", jedenfalls würden die Daten direkt vom (zum Beispiel) Banana PI auf mein Laptop gehen.

Vielleicht könnte die Datenbank dann sogar auf mein BananaPI laufen( Der sollte von der Leistung her denke ich vollkommen ausreichen).
Bevor ich den Laptop jedes mal aufbauen muss und anmachen muss, würde ich eher diesen Weg ausprobieren.
Weil dann bräuchte ich auch die Histroy Tabelle nicht, höchsten um Änderungen Rückgängig machen zu können.

Ansonsten macht git das vollkommen automatisch (und auch sehr gut und schnell)

Git hat aber nun mal nichts mit einer MariaDB gemeinsam. Das wäre ein komplett neues Konzept.
Die Idee hat aber einige weitere Vorteile.... Ich werde es mir überlegen... Vielleicht ist das sogar besser als rsync.
MFG
Michael Springwald

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1423
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: MariaDB Tabellen Abgleichen

Beitrag von fliegermichl »

Mit MariaDB hat git nichts zu tun. Aber Notizen lassen sich doch hervorragend in Textdateien verwalten und da ist git's Stärke.
Auf dem PC legst du mit

Code: Alles auswählen

 
git init
git add .
 

ein lokales Respository an und fügst alle Dateien des aktuellen Verzeichnisses hinzu. (Falls bestimmte Dateien nicht mit versioniert werden sollen, kann man eine Datei .gitignore anlegen. Diese enthält Dateinamen und/oder Wildcards mit Dateien die nicht mit rein sollen.
mit

Code: Alles auswählen

 
git commit -a -s -m"Hier kommen deine Änderungskommentare rein"

wird ein sogenannter commit gemacht. Später kann man jeden commit komplett wieder so herstellen wie er zu diesem Zeitpunkt war.

Um von dem Laptop aus ein identisches Verzeichnis zu erhalten kannst du mit

Code: Alles auswählen

 
git checkout ssh://user@server/name_des_Verzeichnisses <optionaler lokaler Name>
 

dieses erstellen.
Der Laptop hat dann als Remote Repository den PC schon in der Liste.
Mittels

Code: Alles auswählen

 
git pull
 

kannst du nun alle zwischenzeitlich gemachten Änderungen vom PC auf den Laptop holen.
und mit

Code: Alles auswählen

 
git push
 

alle lokalen Änderungen vom Laptop auf den PC packen.

Wenn du zu.B. einen Raspberry als zentrales Repository haben wilsst, dann kannst du da mit

Code: Alles auswählen

 
git init --bare
 

ein leeres Repository anlegen. Um dieses dann sowohl auf dem PC als auch auf dem Laptop als Default Remote Repository zu haben musst du einmalig

Code: Alles auswählen

 
git remote add origin ssh://user@raspi/name_des_Verzeichnisses
git push --set-upstream origin master
 

Dieses als default Remote registrieren.

Und nur wenn an der gleichen Datei in der gleichen Zeile zur gleichen Zeit an unterschiedlichen Arbeitsplätzen etwas geändert wurde, meckert der git pull Befehl. Die entsprechenden Zeilen werden dann in der Datei markiert und müssen von Hand angepasst und dann erneut comittet werden. Das ist aber wirklich nur äußerst selten der Fall.

Ich verwalte alle Quellcodes mit mehreren Entwicklern auf diese Weise. Es ist schon saugeil, wenn du nach ein paar Jahren mal einen alten Stand brauchst. Dann suchst du dir mit

Code: Alles auswählen

 
git log
 

den Hash des betreffenden Commit raus (oder komfortabler mit git GUI) und mit

Code: Alles auswählen

 
git checkout aabbccdd
 

ist dein Verzeichnis exakt so, wie es zu dem damaligen Zeitpunkt war. Wie von Zauberhand sind alle seitdem gelöschten Dateien wieder da und alle seitdem neu hinzugekommenen wieder weg. Alle anderen haben exakt den Stand wie zu dem Zeitpunkt.

und mit

Code: Alles auswählen

 
git checkout master
 

ist der Spuk wieder vorbei

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: MariaDB Tabellen Abgleichen

Beitrag von pluto »

Mit MariaDB hat git nichts zu tun. Aber Notizen lassen sich doch hervorragend in Textdateien verwalten und da ist git's Stärke.

Ja, wie schon gesagt, es geht um Datenbanken und nicht um Textdateien.
Aber ich werde es mir überlegen....

Wenn du zu.B. einen Raspberry als zentrales Repository haben wilsst, dann kannst du da mit

Ich habe mir überlegt, sowas auf mein Webspace wo ich ein SSH Zugang habe, anzulegen.... Der PC kann die Änderungen dann dort "hochladen" und bei meinem Laptop wieder runterladen. Jedenfalls wäre es ein Versuch wert.

Danke für die Ausführliche Erklärung.... Werde ich mir speichern und mal ausprobieren. Ob das eine Lösung sein kann.

Das löst zwar das Datenbank Problem nicht, wäre aber für das eigentliche Problem eine Tolle Alternative....

Und nur wenn an der gleichen Datei in der gleichen Zeile zur gleichen Zeit an unterschiedlichen Arbeitsplätzen etwas geändert wurde, meckert der git pull Befehl.

Das wird wohl in meinem Fall nicht passieren, jedenfalls nicht zur gleichen Zeit...

Ich verwalte alle Quellcodes mit mehreren Entwicklern auf diese Weise. Es ist schon saugeil, wenn du nach ein paar Jahren mal einen alten Stand brauchst. Dann suchst du dir mit

Die Idee hat schon was... Letzten habe ich was geändert und es stellt sich heraus, war keine gute Idee, ich musste es wieder rückgängig machen, von Hand.
Bei Quellcodes würde ich aber versuchen, die *.ppu, *.obj und die Ausführbare Datei nicht mit zu "sichern".....
Ich würde mir hier nur sorgen, dass irgendwann die Platte voll ist, ich habe zwar eine 8 TB von den schon knapp 4 TB belegt sind, aber wer weiß....
MFG
Michael Springwald

Antworten