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)

Re: MariaDB Tabellen Abgleichen

Beitrag von pluto »

Das mit dem git remote add origin hat jetzt geklappt, die URL war nur falsch. habe das .de vergessen. Ich sehe die Dateien nur noch nicht im Ziel verzeichnis auf dem Internet PC
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:So nun bin ich mir nicht sicher wo ich "git init --bare" ausführen soll?
Soll ich das Zuhause ausführen oder auf dem Internet Server?

Dort wo dein primäres Archiv sein soll -> auf dem Server.
Ich sehe die Dateien nur noch nicht im Ziel verzeichnis auf dem Internet PC

Auf dem Server hast du --bare angegeben -> dort gibt es keine ausgecheckten Dateien, die git Datenbank befindet sich im ".git" Verzeichnis.

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 »

Vielen Dank für eure Hilfe, es war ein tipp Fehler in der URL. Ich habe das ".de" vergessen.
Nun kann ich Problemlos Daten vom PC auf dem Internet-server schieben und auch wieder Runterholen.

Mir kommt es aber etwas "aufwendig" vor... Die nächste frage wäre natürlich noch, wie man das ganze Automatisieren könnte.

Ich habe jetzt zum Beispiel Änderungen bei den PC-Git gemacht und die sollen nun z.b. mit dem Internet-Server abgeglichen werden.
Beim PC Runterfahren wäre es wohl keine gute Idee, vielleicht per Cron-Job?

Ich werde das Konzept Testen, vielleicht ist es ja das was ich gesucht habe.
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 »

Ja sorry, da habe ich ein paar Scenarien zeitgleich aufgezeigt.

automatisch commiten ist meiner Meinung nach nicht so arg sinnvoll. Woher soll ein Script wissen, wann Du einen Entwicklungsvorgang soweit abgeschlossen hast, daß er es wert wäre wieder hergestellt zu werden.

und auch wenn es sich nur um Notizen handelt, hat man ja doch irgendwo einen "in Vorgang" und einen "speicher und wiederherstellbar wertigen" Status.

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:Die nächste frage wäre natürlich noch, wie man das ganze Automatisieren könnte.

Eine Komponente zur Überwachung von Verzeichnissen und Dateien ist hier:
https://gitlab.com/mseide-msegui/mseide ... change.pas

Mit MSEgit hat man einen schönen Überblick über die geänderten Dateien vor dem committen und pushen.

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 »

automatisch commiten ist meiner Meinung nach nicht so arg sinnvoll. Woher soll ein Script wissen, wann Du einen Entwicklungsvorgang soweit abgeschlossen hast, daß er es wert wäre wieder hergestellt zu werden.

und auch wenn es sich nur um Notizen handelt, hat man ja doch irgendwo einen "in Vorgang" und einen "speicher und wiederherstellbar wertigen" Status.

Meine Datenbank Anwendung wüsste es... Gut, ich könnte mir ein kleines Script schreiben um den Vorgang zu vereinfachen....

Ich werde es mir ein paar Wochen ansehen, ich glaube aber, dass ist nichts für mich...

Eine Komponente zur Überwachung von Verzeichnissen und Dateien ist hier:
https://gitlab.com/mseide-msegui/mseide ... change.pas

Ich habe mir den Soruce-Code angeschaut: Nutzt du hier eine Kernel-Schnittstelle für das Überwachen?
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 habe mir den Soruce-Code angeschaut: Nutzt du hier eine Kernel-Schnittstelle für das Überwachen?

Ja.

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 »

Ja.

Interessant. Muss ich mir dann wohl noch mal genauer ansehen.

Erst mal vielen dank für eure Hilfe. Das ist zwar nicht das was ich gesucht habe, damit bleibt die Urspungsfrage leider ungeklärt.

Ich werde wohl hier wohl was eigenes anfangen. Da es hier offenbar nichts Fertiges gibt um die angelegte Histroy-Table zu exportieren und wieder zu Importieren.
Das mag zwar nicht unbedingt der Normale weg einer DB sein, ich finde ihn aber sehr Kreativ. In der WebOberfläche müsste ich dann nur noch ein Button einbauen: "DB Uploaden" oder so ähnlich.

Fazit: Nun kenne ich GIT ganz grob.... ich denke, für einen Soruce-Code ist das nicht schlecht, aber für Notizen ich weiß nicht. Gibt es eigentlich in GIT eine Funktion um ganz alte Dateien komplett zu Entfernen?
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:Das mag zwar nicht unbedingt der Normale weg einer DB sein, ich finde ihn aber sehr Kreativ.

Wie gesagt, das nennt sich Replikation.
Fazit: Nun kenne ich GIT ganz grob.... ich denke, für einen Soruce-Code ist das nicht schlecht, aber für Notizen ich weiß nicht.

Ich befürchte, dass du mit deinem Vorhaben auf dem Holzweg bist.
Gibt es eigentlich in GIT eine Funktion um ganz alte Dateien komplett zu Entfernen?

Nicht einzelne Dateien, aber die History kann begrenzt werden:
https://git-scm.com/docs/git-clone
Stichwort "shallow".

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 »

Wie gesagt, das nennt sich Replikation.

Es ist eine Form davon.....
Weil ich möchte ja es so machen, dass der Laptop nicht an sein muss....

Ich befürchte, dass du mit deinem Vorhaben auf dem Holzweg bist.

Was genau meinst du? GIT zu verwenden oder die Datenbank Anwendung?

Nicht einzelne Dateien, aber die History kann begrenzt werden:

Aha.... das ist schon mal nicht schlecht.....
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:Was genau meinst du? GIT zu verwenden oder die Datenbank Anwendung?

Eine Datenbank mit Replikation als Notizenspeicher zu verwenden. Den Aufwand um eine zuverlässige Replikation vor allem im Multiuser-Umfeld zu programmieren darf man auch nicht unterschätzen, siehe fliegermichls Kommentar dazu.

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 »

MariaDB [NoteManager_28813391]> select id,Action, NoteID, title, CreateDateTime from ContentList_Histroy;
+----+--------+--------+----------------------------------------------------------+---------------------+
| id | Action | NoteID | title | CreateDateTime |
+----+--------+--------+----------------------------------------------------------+---------------------+
| 1 | INSERT | NULL | Gemüse | 2018-10-22 21:51:33 |
| 2 | INSERT | 2 | Vermarktung | 2018-10-22 21:51:33 |
| 3 | INSERT | 3 | Einteilung | 2018-10-22 21:51:33 |
| 4 | INSERT | 4 | Vermarktungs- und Qualitätsnormen | 2018-10-22 21:51:33 |
| 5 | INSERT | 5 | Kohl | 2018-10-22 21:51:33 |
| 6 | INSERT | 6 | Namensgebung | 2018-10-22 21:51:33 |
| 7 | INSERT | 7 | Systematik und Verbreitung | 2018-10-22 21:51:33 |
| 8 | INSERT | 8 | Gartensalat | 2018-10-22 21:51:33 |
| 9 | INSERT | 9 | Kultur | 2018-10-22 21:51:33 |
| 10 | INSERT | 10 | Geschichte | 2018-10-22 21:51:33 |
| 11 | INSERT | 11 | Sonstiges | 2018-10-22 21:51:33 |
| 12 | INSERT | 12 | Gartensalat | 2018-10-22 21:51:33 |
| 13 | INSERT | 13 | Beschreibung | 2018-10-22 21:51:33 |
| 14 | INSERT | 14 | Inhaltsstoffe | 2018-10-22 21:51:33 |
| 15 | INSERT | 15 | Kulturformen | 2018-10-22 21:51:33 |
| 16 | INSERT | 16 | STM32 | 2018-10-22 21:51:33 |
| 17 | INSERT | 17 | 2_Eintrag | 2018-10-22 21:51:33 |
| 18 | INSERT | 18 | 3_Eintrag | 2018-10-22 21:51:33 |
| 19 | INSERT | 19 | 1_Eintrag | 2018-10-22 21:51:33 |
| 20 | INSERT | 20 | BallonFahrt | 2018-10-22 21:51:33 |
| 21 | INSERT | 21 | 18650_battery_shild_v3 | 2018-10-22 21:51:33 |
| 22 | INSERT | 22 | Amazon-Wenger-Schweizer-Offiziersmesser-Messer-Schatulle | 2018-10-22 21:51:33 |
| 23 | INSERT | 23 | DA GEHT NOCH WAS | 2018-10-22 21:51:33 |
| 24 | INSERT | 24 | Schweizer Ingenieur im Wenger gefunden | 2018-10-22 21:51:33 |
| 25 | INSERT | 25 | Praktisch für unterwegs | 2018-10-22 21:51:33 |
| 26 | INSERT | 26 | Jeden Tag eine neue Welt | 2018-10-22 21:51:33 |
| 27 | INSERT | 27 | SternenPerfekt in allen Lebenslagen | 2018-10-22 21:51:33 |
| 28 | INSERT | 28 | Zahnstocher fehlt | 2018-10-22 21:51:33 |
| 29 | INSERT | 29 | zwischenablage | 2018-10-22 21:51:33 |
| 30 | INSERT | 30 | Begriffe_Arduino | 2018-10-22 21:51:33 |
| 31 | INSERT | 31 | Entwickler Boards | 2018-10-22 21:51:33 |
| 32 | INSERT | 32 | Stromversorgung | 2018-10-22 21:51:33 |
| 33 | INSERT | 33 | Sound | 2018-10-22 21:51:33 |
| 34 | INSERT | 34 | LED | 2018-10-22 21:51:33 |
| 35 | INSERT | 35 | Sonstiges | 2018-10-22 21:51:33 |
| 36 | INSERT | 36 | RTC | 2018-10-22 21:51:33 |
| 37 | INSERT | 37 | Drahtlos_Wireless | 2018-10-22 21:51:33 |
| 38 | INSERT | 38 | LCD | 2018-10-22 21:51:33 |
| 39 | INSERT | 39 | MCU | 2018-10-22 21:51:33 |
| 40 | INSERT | 40 | Sensoren | 2018-10-22 21:51:33 |
| 41 | INSERT | 41 | Zwischenablage_Arduino | 2018-10-22 21:51:33 |
| 42 | INSERT | 42 | KTT | 2018-10-22 21:51:33 |
| 43 | INSERT | 43 | 2_Eintrag | 2018-10-22 21:51:33 |
| 44 | INSERT | 44 | 6_Eintrag | 2018-10-22 21:51:33 |
| 45 | INSERT | 45 | 4_Eintrag | 2018-10-22 21:51:33 |
| 46 | INSERT | 46 | 3_Eintrag | 2018-10-22 21:51:33 |
| 47 | INSERT | 47 | 8_Eintrag | 2018-10-22 21:51:33 |
| 48 | INSERT | 48 | 7_Eintrag | 2018-10-22 21:51:33 |
| 49 | INSERT | 49 | 5_Eintrag | 2018-10-22 21:51:33 |
| 50 | INSERT | 50 | 1_Eintrag | 2018-10-22 21:51:33 |
| 51 | INSERT | 51 | Rübsen | 2018-10-22 21:51:33 |
| 52 | INSERT | 52 | Verbreitung | 2018-10-22 21:51:33 |
| 53 | INSERT | 53 | Merkmale | 2018-10-22 21:51:33 |
| 54 | INSERT | 54 | Rübsen | 2018-10-22 21:51:33 |
| 55 | INSERT | 55 | Systematik | 2018-10-22 21:51:33 |
| 56 | UPDATE | 42 | KTT | 2018-10-22 21:51:33 |
| 57 | UPDATE | 42 | KTT | 2018-10-22 21:51:33 |
| 58 | UPDATE | 42 | KTT | 2018-10-22 21:51:33 |
| 59 | UPDATE | 47 | 8_Eintrag | 2018-10-22 21:51:33 |
| 60 | UPDATE | 45 | 4_Eintrag | 2018-10-22 21:51:33 |
| 61 | UPDATE | 44 | 6_Eintrag | 2018-10-22 21:51:33 |
| 62 | UPDATE | 43 | 2_Eintrag | 2018-10-22 21:51:33 |
+----+--------+--------+----------------------------------------------------------+---------------------+
62 rows in set (0.00 sec)
[/quote]
So sieht die Table Histroy bisher aus... Mein nächster Schritt wäre jetzt: Diese Tabelle komplett zu Exportieren in einer "Austausch" Datei. Der nächste wäre dann, diese Datei einzulesen. Später soll es im Ziel Verzeichnis noch eine Info Datei geben, wann der letzte Export statt fand.... damit nicht immer alles exportiert werden muss.

So werden z.b. die Trigger aus meiner Anwendung heraus erstellt:

Code: Alles auswählen

 
procedure TPLNoteManager.CreateTrigger();
var
  s:String;
begin
  {    ' DECLARE myRandomNumber INT;' + LineEnding +
      ' DECLARE TempNoteID INT;' + LineEnding +
      ' SET myRandomNumber=CAST(rand()*40000 as UNSIGNED);' + LineEnding +
      ' SET TempNoteID=new.id+myRandomNumber;' + LineEnding +}

 
  s:='CREATE TRIGGER `ContentList_BEFORE_INSERT` BEFORE INSERT ON ContentList FOR EACH ROW' +LineEnding+
  ' BEGIN ' + LineEnding +
      ' DECLARE TempNoteID INT;' + LineEnding +
      ' SELECT IFNULL(MAX(id),0)' + LineEnding +
      '   FROM ContentList' + LineEnding +
      '   INTO TempNoteID;' + LineEnding +
      ' set new.NoteID=TempNoteID+1; ' + LineEnding+
  ' END';
  MariaDB2.AConnection.ExecuteDirect(s);
 
 
  s:='CREATE TRIGGER `ContentList_AFTER_INSERT` AFTER INSERT ON ContentList FOR EACH ROW' +LineEnding+
  ' BEGIN ' + LineEnding +
    ' INSERT INTO ContentList_Histroy(Action, NoteID, ParentID, CreateDateTime, LastReadDataTime, LastWriteDataTime, CountRead, CountWrite, Title, Text) values ( ''INSERT'', new.NoteID, new.ParentID, new.CreateDateTime, new.LastReadDataTime, new.LastWriteDataTime, new.CountRead, new.CountWrite, new.Title, new.Text); ' + LineEnding +
  ' END';
  MariaDB2.AConnection.ExecuteDirect(s);
 
  s:='CREATE TRIGGER ContentList_AFTER_UPDATE AFTER UPDATE ON ContentList FOR EACH ROW '+
     'INSERT INTO ContentList_His[code=laz][/code]troy(Action, NoteID, ParentID, CreateDateTime, LastReadDataTime, LastWriteDataTime, CountRead, CountWrite, Title, Text) values ( ''UPDATE'', new.NoteID, new.ParentID, new.CreateDateTime, new.LastReadDataTime, new.LastWriteDataTime, new.CountRead, new.CountWrite, new.Title, new.Text);'+LineEnding;
  MariaDB2.AConnection.ExecuteDirect(s);
 
  s:='CREATE TRIGGER ContentList_AFTER_DELETE AFTER DELETE ON ContentList FOR EACH ROW '+
     'INSERT INTO ContentList_Histroy(Action, NoteID, ParentID, CreateDateTime, LastReadDataTime, LastWriteDataTime, CountRead, CountWrite, Title, Text) values ( ''DELETE'', old.NoteID, old.ParentID, old.CreateDateTime, old.LastReadDataTime, old.LastWriteDataTime, old.CountRead, old.CountWrite, old.Title, old.Text);' +LineEnding;
  MariaDB2.AConnection.ExecuteDirect(s);
end; // TPLNoteManager.CreateTrigger     
 

Dieser Weg klappt recht gut. Was ich bisher selten bis gar nicht beobachtet habe bei anderen Projekten: Meine Anwendung kann "sogar" eine Datenbank komplett neu Anlegen mit den Nötigen Tabellen und soweiter.... Hier verwende ich ein "Trick".... den ich irgendwo im Internet gefunden habe....

Code: Alles auswählen

 
procedure TPLNoteManager.CreateDB;
var
  str:string;
begin
  MariaDB2.AConnection.DatabaseName:='mysql';
  MariaDB2.AConnection.ExecuteDirect('use mysql');
  MariaDB2.AConnection.Open;
 
  str:='SHOW DATABASES LIKE '''+DBName+''';';
  MariaDB2.Query.SQL.Text:=str;
  MariaDB2.Query.ExecSQL;
  MariaDB2.Query.Open;
 
  if MariaDB2.Query.RecordCount = 0 then begin
    str:='CREATE DATABASE IF NOT EXISTS '+DBName;
    MariaDB2.AConnection.ExecuteDirect(str);
    MariaDB2.AConnection.ExecuteDirect('use ' + DBName);
    MariaDB2.AConnection.DatabaseName:=DBName;
    MariaDB2.ATransaction.Commit;
 
    CreateTable();
    CreateHistroyTable();
    CreateTrigger();
  end;
 
  MariaDB2.AConnection.Close();
  MariaDB2.AConnection.DatabaseName:=DBName;
  MariaDB2.AConnection.Open;
end; // TPLNoteManager.CreateDB                               
 

Vielleicht wird jetzt mein Vorhaben "klarer" und ich konnte zeigen, dass es bereits einen Code gibt.
Im Anhang gibt es noch ein Bild wie die Web Oberfläche derzeit aussieht.
Dateianhänge
ScreenShot.png
MFG
Michael Springwald

Antworten