Frage

Ich bin mit plone.app.blob in einem BlobStorage Verzeichnis große ZODB Objekte zu speichern. Dies reduziert Größe Druck auf Data.fs aber ich habe keine Ratschläge zu finden in der Lage, diese Daten auf sichern.

Ich unterstütze bereits oben Data.fs durch ein Netzwerk-Backup-Tool in einem Verzeichnis von repozo Backups zeigt. Soll ich darauf einfach dieses Werkzeug am BlobStorage Verzeichnis meines Backup-Blobs?

Was passiert, wenn die Datenbank neu gepackt werden oder Blobs hinzugefügt und gelöscht werden, während die Kopie stattfindet? Gibt es in der BlobStorage Verzeichnis Dateien, die in einer bestimmten Reihenfolge kopiert werden müssen?

War es hilfreich?

Lösung

Sichern „BlobStorage“ wird es tun. Keine Notwendigkeit für eine Bestellung oder irgendetwas anderes, es ist sehr einfach.

Alle Operationen in Plone sind vollständig transaktionale, so die Sicherung in der Mitte einer Transaktion schlagen sollte gut funktionieren. Aus diesem Grunde Sie Live-Backups des ZODB tun können. Ohne zu wissen, was Dateisystem Sie sind, ich würde vermuten, dass es sollte wie vorgesehen.

Andere Tipps

Es sollte sicher sein, eine repozo Sicherung der Data.fs durch einen rsync des BlobStorage Verzeichnisses, solange die Datenbank gepackt nicht erhalten, gefolgt zu tun, während diese beiden Operationen geschehen.

Dies liegt daran, zumindest wenn Blobs mit Filestorage, Änderungen an einem Klecks führt immer in der Schaffung einer neuen Datei mit dem Namen auf der Basis des Objekt-ID und Transaktions-ID verwendet wird. Also, wenn neu oder aktualisierte Blobs nach der Data.fs geschrieben wird gesichert, es sollte kein Problem sein, da die Dateien, die von dem Data.fs referenziert werden noch um sein sollten. Das Löschen eines Blobs führt nicht in der Datei entfernt werden, bis die Datenbank gepackt wird, so dass auch in Ordnung sein sollte.

eine Sicherung in einer anderen Reihenfolge durchführt, oder während der Sicherung mit Verpackung, in einem Backup Data.fs führen kann, die Blobs verweist, die nicht in der Sicherung enthalten ist.

Ich habe ein Skript, das Kopie für einen Monat der Blobs harte Links verwenden (so dass Sie der Kleckse haben und historial wie die Data.fs):

backup.sh

#!/bin/sh

# per a fer un full : ./cron_nocturn.sh full

ZEO_FOLDER=/var/plone/ZEO

# Zeo port
ZEO_PORT = 8023

# Name of the DB
ZEO_DB = zodb1

BACKUP_FOLDER=/backup/plone

LOGBACKUP=/var/plone/ZEO/backup.log

BACKUPDIR=`date +%d`

echo "INICI BACKUP" >> $LOGBACKUP
echo `date` >> $LOGBACKUP

# Fem el packing

if [ "$1" = "full" ]; then
  $ZEO_FOLDER/bin/zeopack -S $ZEO_DB -p $ZEO_PORT -h 127.0.0.1


echo "   Comprovant folders"
#mirem si existeix el folder de backup
if ! [ -x $BACKUP_FOLDER/$ZEO_DB ]; then
   mkdir $BACKUP_FOLDER/$ZEO_DB
fi

#mirem si existeix el backup folder del dia
if ! [ -x $BACKUP_FOLDER/blobs/$BACKUPDIR/ ] ; then
   mkdir $BACKUP_FOLDER/blobs/$BACKUPDIR/
fi

echo "   Backup Data.fs"
# backup de Data.fs
if  [ "$1" = "full" ]; then
   echo "   Copiant Data.fs"
   $ZEO_FOLDER/bin/repozo -B -F -r $BACKUP_FOLDER/$ZEO_DB/ -f $ZEO_FOLDER/var/filestorage/Data_$ZEO_DB.fs
   echo "   Purgant backups antics"
   $ZEO_FOLDER/neteja.py -l $BACKUP_FOLDER/$ZEO_DB -k 2
else
   $ZEO_FOLDER/bin/repozo -B -r $BACKUP_FOLDER/$ZEO_DB/ -f $ZEO_FOLDER/var/filestorage/Data_$ZEO_DB.fs
fi

echo "   Copiant blobs"
# backup blobs
rm -rf $BACKUP_FOLDER/blobs/$BACKUPDIR
cd $BACKUP_FOLDER/current-blobs && find . -print | cpio -dplm $BACKUP_FOLDER/blobs/$BACKUPDIR
rsync --force --ignore-errors --delete --update -a $ZEO_FOLDER/var/blobs/ $BACKUP_FOLDER/current-blobs/


echo "FI BACKUP" >> $LOGBACKUP
echo `date` >> $LOGBACKUP

neteja.py

#!/usr/bin/python2.4

# neteja.py -l [directori_desti] -k [numero_fulls_a_mantenir]
# Script que neteja un directori amb backups i guarda nomes els ultims fulls que li especifiquis
# Es basa en la utilitzacio de collective.recipe.backup
# Author: Victor Fernandez de Alba <sneridagh@gmail.com>

import sys, getopt

sys.path[0:0] = [
  '/var/plone/genwebupcZEO/produccio/eggs/collective.recipe.backup-1.3-py2.4.egg',
  '/var/plone/genwebupcZEO/produccio/eggs/zc.buildout-1.4.2-py2.4.egg',
  '/var/plone/genwebupcZEO/produccio/eggs/zc.recipe.egg-1.2.2-py2.4.egg',
  '/var/plone/genwebupcZEO/produccio/eggs/setuptools-0.6c11-py2.4.egg',
  ]

import collective.recipe.backup.repozorunner

argv = sys.argv[1:]
try:
    opts, args = getopt.getopt(argv, "l:k:", ["location=", "keep="])
except getopt.GetoptError:
    print "neteja.py -l [directori_desti] -k [numero_fulls_a_mantenir]"
    sys.exit(2)

for opt, arg in opts:
    if opt in ("-l", "--location"):
        location = arg
    elif opt in ("-k", "--keep"):
        keep = arg

if len(opts)<2:
    print "neteja.py -l [directori_desti] -k [numero_fulls_a_mantenir]"
    sys.exit(2)

collective.recipe.backup.repozorunner.cleanup(location, keep)

Ihre Backup-Strategie für die Filestorage ist in Ordnung. Um jedoch eine Sicherung der Datenbanken zu machen, die Daten in mehreren Dateien nie speichert ist einfach wie Ihre Kopie ohne Schreiben in die verschiedenen Dateien geschehen hat. Für die Filestorage einer blinde dumme Kopie ist in Ordnung, da es nur eine einzelne Datei ist. (Repozo Verwendung ist noch besser.)

In diesem Fall (mit BlobStorage mit Filestorage kombiniert) I an die regelmäßige Sicherung Beratung Punkt haben:

  • Nehmen Sie die db offline, während ein Dateisystemkopie zu erstellen
  • Verwendung Snapshot-Tools wie LVM die Scheibe an einem bestimmten Punkt gefrieren
  • Sie einen Transaktions Export (in der Praxis nicht durchführbar)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top