문제

Plone.app.blob을 사용하여 대형 ZODB 객체를 BlobStorage 디렉토리에 저장하고 있습니다. 이것은 data.fs의 크기 압력을 줄이지만이 데이터를 백업하는 것에 대한 조언을 찾을 수 없었습니다.

Repozo 백업 디렉토리에서 네트워크 백업 도구를 지적하여 이미 Data.fs를 백업하고 있습니다. Blobstorage 디렉토리에서 해당 도구를 지적하여 Blobs를 백업해야합니까?

사본이 발생하는 동안 데이터베이스가 재 포장되거나 블로브가 추가되고 삭제되는 경우 어떻게해야합니까? BlobStorage 디렉토리에 특정 순서로 복사 해야하는 파일이 있습니까?

도움이 되었습니까?

해결책

"blobstorage"를 백업하면 그렇게 할 것입니다. 특별 주문이나 다른 항목이 필요하지 않으며 매우 간단합니다.

Plone의 모든 운영은 완전히 거래 적이므로 거래 중간에 백업을 치면 제대로 작동해야합니다. 이것이 당신이 ZODB의 백업을 할 수있는 이유입니다. 어떤 파일 시스템에 있는지 모르면 의도 한대로 작동해야한다고 생각합니다.

다른 팁

데이터베이스가 포장되지 않는 한 두 개의 작업이 발생하는 동안 Data.fs의 repozo 백업과 BlobStorage 디렉토리의 rsync를 수행하는 것이 안전해야합니다.

적어도 Filestorage와 함께 Blob을 사용할 때 Blob에 대한 수정은 항상 객체 ID 및 Transaction ID를 기반으로 이름이 지정된 새 파일을 생성하기 때문입니다. 따라서 Data.fs가 백업 된 후 신규 또는 업데이트 된 멍청이가 작성되면 Data.fs가 참조하는 파일이 여전히 주변에 있어야하므로 문제가되지 않아야합니다. 블로브 삭제로 인해 데이터베이스가 포장 될 때까지 파일이 제거되지 않으므로 괜찮습니다.

백업 중에 다른 순서로 백업을 수행하거나 백업 중에 패킹을하면 백업에 포함되지 않은 블로브를 참조하는 백업 데이터가 발생할 수 있습니다.

하드 링크를 사용하여 한 달 동안 블로브를 복사하는 스크립트가 있습니다 (따라서 Data.fs로서 Blobs의 역사를 가지고 있습니다) :

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)

Filestorage에 대한 백업 전략은 괜찮습니다. 그러나 여러 파일에 데이터를 저장하는 데이터베이스의 백업은 다양한 파일에 대한 글을 쓰지 않아서 사본이 발생하지 않기 때문에 쉽지 않습니다. Filestorage의 경우 맹목적인 멍청한 사본은 단일 파일이기 때문에 괜찮습니다. (레조를 사용하는 것이 더 좋습니다.)

이 경우 (Filestorage와 결합 된 Blobstorage와 함께) 일반 백업 조언을 지적해야합니다.

  • 파일 시스템 사본을 작성하는 동안 DB를 오프라인으로 사용하십시오
  • LVM과 같은 스냅 샷 도구를 사용하여 주어진 지점에서 디스크를 동결하십시오.
  • 트랜잭션 내보내기 (실제로는 가능하지 않음)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top