Postfix/BerkeleyDB: Unterschied zwischen den Versionen
K Textersetzung - „usw.“ durch „und weitere“ |
K Textersetzung - „ “ durch „ “ |
||
| Zeile 1: | Zeile 1: | ||
== Berkeley DB-Dateien sicher aktualisieren | == Berkeley DB-Dateien sicher aktualisieren == | ||
Postfix verwendet Dateisperren, um Zugriffskonflikte zu vermeiden Aktualisieren von Berkeley DB oder anderen lokalen Datenbankdateien. | 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. | * Früher war das so sicher sein, aber wie Berkeley DB entwickelt hat, um aggressiver zu verwenden Caching, Dateisperrung möglicherweise nicht mehr ausreichend. | ||
| Zeile 10: | Zeile 10: | ||
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: | 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 | # 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 [https://www.postfix.org/postmap.1.html postmap(1)] -Befehl war erfolgreich. | Dadurch wird die Eingabedatei "access.in" in die Ausgabedatei umgewandelt "access.in.db" und ersetzt die Datei "access.db" nur dann, wenn die [https://www.postfix.org/postmap.1.html postmap(1)] -Befehl war erfolgreich. | ||
| Zeile 16: | Zeile 16: | ||
* Benutzereingaben werden fett dargestellt. | * Benutzereingaben werden fett dargestellt. | ||
# cat Makefile | # cat Makefile | ||
all: aliases.db access.db virtual.db ...und weitere... | all: aliases.db access.db virtual.db ...und weitere... | ||
# Hinweis 1: Befehle werden nach einem TAB-Zeichen angegeben. | |||
# Anmerkung 2: Verwenden [https://www.postfix.org/postalias.1.html Sie postalias(1)] für lokale Aliase, [https://www.postfix.org/postmap.1.html postmap(1)] für den Rest. | |||
aliases.db: aliases.in | aliases.db: aliases.in | ||
Postalias aliases.in | |||
mv aliases.in.db aliases.db | |||
access.db: access.in | access.db: access.in | ||
postmap-Zugriff.in | |||
mv access.in.db access.db | |||
virtual.db: virtual.in | virtual.db: virtual.in | ||
postmap virtual.in | |||
mv virtual.in.db virtual.db | |||
...und so weiter... | ...und so weiter... | ||
# vi access.in | |||
...Bearbeitungssitzung nicht angezeigt... | ...Bearbeitungssitzung nicht angezeigt... | ||
# machen | |||
postmap-Zugriff.in | postmap-Zugriff.in | ||
mv access.in.db access.db | mv access.in.db access.db | ||
# | |||
Der Befehl "make" aktualisiert nur die Dateien, die sich geändert haben. | Der Befehl "make" aktualisiert nur die Dateien, die sich geändert haben. | ||
Version vom 14. Juni 2026, 00:49 Uhr
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 ...und weitere...
# 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.