Normales Thema MySQLDump - nur neue Daten abfragen (Gelesen: 61 mal)
Jopii
Forum Administrator
*****
Offline


I love YaBB 2.6.12!

Beiträge: 167
Standort: Land Of Confusion
Mitglied seit: 01.04.2024
Geschlecht: männlich
MySQLDump - nur neue Daten abfragen
30.01.2026 um 13:29:51
Beitrag drucken  
Ich stand vor dem Problem, dass ich eine relativ große Datenbank habe und diese vom lokalen Rechner regelmäßig auf einen externen Webspace transportiert und dort in die Datenbank eingespielt werden muss.

Realisiert habe ich bislang dieses Aufgabe mit mysqldump. Das bedeutet aber, wenn man keine Optionen mitgibt, dass mit der Dumpdatei zunächst alle Tabellen gelöscht werden (drop table), um sie anschließend wieder zu erstellen (create table). Danach werden alle Daten in die Tabelle bzw. Tabellen eingefügt (insert).

Und irgendwann kommt man an einem Punkt, an dem die Datei, auch wenn sie gezippt ist, sehr groß wird und der Import mehr als 30 Minuten dauert.

Also musste eine Lösung her, dass aus der Quelldatenbank des lokalen Rechners nur die ab einem bestimmt Zeitpunkt neu hinzugekommenen Datensätze abfragt werden sowie das Löschen und Erstellen der betroffenen Tabelle unterlassen wird. Es dürfen einfach nur die neuen Datensätze ab Zeitpunkt X in die bestehenden Tabellen eingefügt werden.

Und es gibt eine Lösung dazu. Ich habe mich dazu entschieden, diese Lösung mittels Erfassungsdatum, dass in allen Tabellen ein Standardfeld ist, zu versuchen.
Nach einigen Versuchen hatte ich dann die richtige Syntax gefunden, die wie folgt aussieht:

Code
Alles auswählen
mysqldump --no-create-info --user=user --password="password" datenbank tabelle --where="erfasst>='2022-02-11 19:19:48'" > test.sql 



Mit der Option --no-create-info wird sowohl das Löschen als auch das Erstellen von Tabellen verhindert. Ansonsten ist der Befehl zum normalen Befehl von mysqldump nur noch dahingehend abweichend, dass hinter dem Tabellennamen angegeben werden muss, welches Feld und welcher Wert abgefragt werden sollen - --where="erfasst>='2022-02-11 19:19:48'".

Dieser Befehl funktioniert auch mit mehreren Tabellen, die natürlich alle das entsprechend Feld erfasst haben müssen.

Code
Alles auswählen
mysqldump --no-create-info --user=user --password="password" datenbank tabelle1 tabelle2 tabelle3  --where="erfasst>='2022-02-11 19:19:48'" > test.sql 



Und nun geht das Updaten der Datenbank auf dem externen Webspace in Sekundenschnelle. Über diese Lösung habe ich mich riesig gefreut, denn sie bietet mir für andere Sachverhalte viel mehr Spielraum.
  

The Administrator - Cheffe von Ganzes
Zum Seitenanfang
IP gespeichert