Postfix/BerkeleyDB

Aus Foxwiki

Berkeley DB-Dateien sicher aktualisieren

Postfix verwendet Dateisperren, um Zugriffskonflikte zu vermeiden Aktualisieren von Berkeley DB oder anderen lokalen Datenbankdateien.

  • Früher war das so sicher sein, aber wie Berkeley DB entwickelt hat, um aggressiver zu verwenden Caching, Dateisperrung möglicherweise nicht mehr ausreichend.

Darüber hinaus würde das Sperren von Dateien keine Probleme verhindern, wenn die Update schlägt fehl, weil die Festplatte voll ist oder etwas anderes verursacht a Datenbankaktualisierung fehlschlägt.

  • Insbesondere Befehle wie postmap(1) oder postalias(1) vorhandene Dateien überschreiben.
  • Wenn das überschreiben Scheitert mittendrin dann hast du keine brauchbare Datenbank und Postfix wird aufhören zu arbeiten.
  • Dies ist kein Problem mit dem CDB-Datenbanktyp ab Postfix 2.2 verfügbar: CDB erstellt eine neue Datei und benennt die Datei nach erfolgreichem Abschluss um.

Bei Berkeley DB und anderen "Ein-Datei"-Datenbanken ist es das Es ist möglich, zusätzliche Robustheit hinzuzufügen, indem Sie "mv" für REPLACE an verwenden vorhandene Datenbankdatei, anstatt sie zu überschreiben:

# postmap access.in && mv access.in.db access.db  

Dadurch wird die Eingabedatei „access.in“ in die Ausgabedatei umgewandelt „access.in.db“ und ersetzt die Datei „access.db“ nur dann, wenn die postmap(1) -Befehl war erfolgreich.

  • Natürlich solche Befehle eingeben wird schnell langweilig, und deshalb verwenden die Leute stattdessen "make", Wie nachfolgend dargestellt.
  • Benutzereingaben werden fett dargestellt.
# cat Makefile  
all: aliases.db access.db virtual.db ...usw.... 
 # Hinweis 1: Befehle werden nach einem TAB-Zeichen angegeben.  
 # Anmerkung 2: Verwenden  Sie postalias(1) für lokale Aliase, postmap(1) für den Rest. 
aliases.db: aliases.in 
        Postalias aliases.in 
        mv aliases.in.db aliases.db 
access.db: access.in 
        postmap-Zugriff.in 
        mv access.in.db access.db 
virtual.db: virtual.in 
        postmap virtual.in 
        mv virtual.in.db virtual.db 
...und so weiter... 
 # vi access.in  
...Bearbeitungssitzung nicht angezeigt... 
 # machen  
postmap-Zugriff.in 
mv access.in.db access.db 
 #  

Der Befehl „make“ aktualisiert nur die Dateien, die sich geändert haben.

  • Im Falle eines Fehlers stoppt der Befehl "make" und wird nicht aufgerufen den "mv"-Befehl, damit Postfix die vorhandene weiterhin verwendet Datenbankdatei, als ob nichts passiert wäre.