07-01-2023, 10:21
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:
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.
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.
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:
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:
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.