mysqldump nur für neue Datensätze

mysqldump nur für neue Datensätze

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 musste.

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, die aus der Quelldatenbank des lokalen Rechners nur die ab einem bestimmt Zeitpunkt neu hinzugekommenen Datensätze abfragt und das Löschen und Erstellen der betroffenen Tabelle unterlässt. 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 ist in allen Tabellen ein Standardfeld bei mir, zu versuchen.

Nach einigen Versuchen hatte ich dann die richtige Syntax gefunden, die wie folgt aussieht:

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.

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.

Joopi, 12.02.2022