Komprimieren einer Zope-Datenbank
Die Zope-Datenbank, in der alle Daten des Zope-Servers gespeichert werden, wird täglich größer. Jede Änderung wird an die Datei angehängt. Das hat den Vorteil, dass man in Zope einzelne Arbeitsschritte rückgängig machen kann. Der große Nachteil ist, dass die Datei immer größer wird. Man sollte also in regelmäßigen Abständen, sagen wir mal wöchentlich oder monatlich, die Zope-Datenbank komprimieren.
Die alte Datenbank-Datei wird nach erfolgreichem Komprimieren in Data.fs.old umbenannt und stellt damit eine einfache Datensicherung dar. Eine gut durchdachte, geprüfte und überwachte Datensicherung wird dadurch aber nicht ersetzt.
Manuell:
Man kann die Datenbank im ZMI (Zope Management Interface) komprimieren:
Zu finden unter "Control_Panel/Database Management".
(Url: /Control_Panel/Database/manage_main)
Eine andere Möglichkeit:
Man gibt im Browser folgende URL ein, meldet sich an und wartet bis die Datenbank komprimiert wurde.
http://
Automatisch mit "wget":
Dieser Ansatz baut auf der Erkenntnis auf, dass man mit dem Eingeben einer Url in einen Browser, die Datenbank komprimieren kann. Hier mein Vorschlag mit dem Befehl "wget".
wget -O /dev/null --timeout=3600 --proxy=off \ --http-user=--http-passwd= \ http:// :8080/Control_Panel/manage_pack?days:float=
wget ist bei den meisten Linux-Distributionen mit dabei. Und unter Windows kann man wget auch über Cygwin verwenden.
Und jetzt kommt noch das "Automatisch" aus der Überschrift zum Zug --> Einfach per Cron-Job, oder unter Windows per geplantem Task, ein Skript ausführen lassen, welches zuerst die Datenbank sichert und dann mit wget die Datenbank komprimiert.
Andere Lösungen werden hier erklärt:
https://dzug.org/dokumentation/faqs/AdministrationKonfiguration/datenbank_packen
http://www.zope.org/Members/fritz/howto_compress_datafs_using_cron
http://www.zope.org/Members/fritz/compress_datafs/
Zusatz:
Hier das Script von Markus Schopen:
#!/usr/bin/python -O import sys, urllib, os, shutil from time import * username="MANAGER" password="PASSWORD" zope="http://localhost:8080/" zope_path = "/home/zope/Zope/" backup_path = "/backup/" datafs = zope_path + str("var/Data.fs") backup = backup_path + "Data.fs." + strftime("%Y%m%d%H%M%S", localtime(time())) class NoGUI_URLopener(urllib.FancyURLopener): def __init__(self, username, password, *args): apply(urllib.FancyURLopener.__init__, (self,) + args) self.username = username self.password = password self.asked = 0 def prompt_user_passwd(self, host, realm): if self.asked: raise "Unauthorised" else: self.asked = 1 return self.username, self.password try: days = sys.argv[1] except: days = 0 try: shutil.copy(datafs, backup) except: print "Can't copy Data.fs" exit urllib._urlopener = NoGUI_URLopener(username, password) urllib.urlretrieve("%s/Control_Panel/Database/manage_pack?days:float=%s" % (zope, days)) print "###" + zope_path + "/var ###" os.system("ls -l " + zope_path + "var/") print "\n###" + backup_path + " ###" os.system("ls -l " + backup_path)
Informationen zu Wget:
http://www.gnu.org/software/wget/wget.html
http://www.gnu.org/directory/wget.html
http://www.interlog.com/~tcharron/wgetwin.html
(Gerold Penz; Email: ; Web: http://gerold.bcom.at)