22 Punkte von baeba 2025-05-02 | 2 Kommentare | Auf WhatsApp teilen

Einleitung

  • Wenn man eine SQLite-Datenbank direkt mit rsync kopiert, wird sie durch Indizes usw. groß, langsam und unzuverlässig.
  • Deshalb wird vorgeschlagen, mit .dump einen textbasierten Ansatz zum Komprimieren und Wiederherstellen zu verwenden.

Hauptteil

  • Der Befehl .dump gibt die gesamte Datenbank als SQL-Text aus; Indizes werden dabei durch eine einzelne Befehlszeile ersetzt, wodurch die Dateigröße kleiner wird.

    sqlite3 my_database.db .dump > my_database.db.txt  
    
  • Die Textdatei lässt sich mit gzip zusätzlich weiter verkleinern:

    sqlite3 my_database.db .dump | gzip -c > my_database.db.txt.gz  
    
  • Stattdessen wird auf ein Verfahren umgestellt, bei dem auf dem Server ein komprimierter Dump erzeugt, lokal kopiert und dann wiederhergestellt wird:

    ssh username@server "sqlite3 db.db .dump | gzip -c > db.txt.gz"  
    rsync --progress username@server:db.txt.gz .  
    gunzip db.txt.gz  
    cat db.txt | sqlite3 restored.db  
    
  • Die ursprüngliche DB-Datei schrumpft von 3,4 GB auf 1,3 GB als Dump-Text und auf 240 MB als gzip-komprimierte Datei — also auf etwa ein Vierzehntel.

  • Beim bisherigen rsync-Verfahren kann, wenn sich die DB während der Übertragung ändert, der Fehler database disk image is malformed auftreten.

  • Beim Text-Dump-Verfahren besteht nach Beginn des Kopiervorgangs kein Risiko mehr, dass sich der Inhalt ändert, sodass konsistente Backups möglich sind.

Fazit

  • Die Methode aus .dump + Komprimierung + Wiederherstellung verbessert bei großen SQLite-Übertragungen sowohl Geschwindigkeit als auch Stabilität.
  • Sie ist besonders wirksam bei Datenbanken mit vielen Indizes und kann das Risiko von Übertragungsfehlern oder Beschädigungen verringern.
  • Wer regelmäßig mit großen SQLite-Datenbanken arbeitet, kann diese praktische Optimierung gut einsetzen.

2 Kommentare

 
ng0301 2025-05-02

Ich frage mich, welchen Hintergrund es gibt, warum so eine Aufgabe nötig ist.

 
winterjung 2025-05-02

Im Original heißt es, dass es für Backup und Analyse gedacht ist. Vermutlich wollte man die Daten lokal mit etwas wie DuckDB analysieren.