سؤال

أنا أستخدم plone.app.blob لتخزين كائنات ZodB الكبيرة في دليل blobstorage. هذا يقلل من ضغط الحجم على البيانات. FS لكنني لم أتمكن من العثور على أي نصيحة بشأن نسخة احتياطية من هذه البيانات.

أنا بالفعل أقوم بإجراء النسخ الاحتياطي للبيانات. FL من خلال توجيه أداة النسخ الاحتياطي للشبكة في دليل النسخ الاحتياطية Repozo. هل يجب أن أشرب هذه الأداة في دليل blobstorage إلى النسخ الاحتياطي الخاص بي؟

ماذا لو تم إعادة تعبئة قاعدة البيانات أو إضافة النقط وحذفها أثناء إجراء النسخة؟ هل هناك ملفات في دليل blobstorage يجب نسخها بترتيب معين؟

هل كانت مفيدة؟

المحلول

النسخ الاحتياطي "blobstorage" سيفعل ذلك. لا حاجة لطلب خاص أو أي شيء آخر ، إنه بسيط للغاية.

جميع العمليات في PLONE هي معاملات بالكامل ، لذا فإن ضرب النسخ الاحتياطي في منتصف المعاملة يجب أن يعمل بشكل جيد. هذا هو السبب في أنه يمكنك القيام بنسخ احتياطية حية من Zodb. دون معرفة نظام الملفات الذي أنت عليه ، أعتقد أنه ينبغي أن يعمل على النحو المقصود.

نصائح أخرى

يجب أن يكون من الآمن القيام بنسخة احتياطية من data.fs تليها RSYNC من دليل blobstorage ، طالما أن قاعدة البيانات لا يتم تعبئتها أثناء حدوث هاتين العمليتين.

هذا لأنه ، على الأقل عند استخدام blobs مع Filestorage ، يؤدي التعديلات على Blob دائمًا إلى إنشاء ملف جديد يسمى على معرف الكائن ومعرف المعاملة. لذا ، إذا تمت كتابة النقط الجديدة أو المحدثة بعد احتياطي البيانات. لا ينبغي أن تكون مشكلة ، لأن الملفات التي تتم الإشارة إليها من قبل البيانات. لا يؤدي حذف Blob إلى إزالة الملف حتى يتم تعبئة قاعدة البيانات ، بحيث يكون ذلك على ما يرام أيضًا.

قد يؤدي إجراء نسخة احتياطية بترتيب مختلف ، أو مع التعبئة أثناء النسخ الاحتياطي ، إلى بيانات النسخ الاحتياطي. FS التي تشير إلى النقط غير المدرجة في النسخ الاحتياطي.

لديّ برنامج نصي يقوم بنسخ لمدة شهر باستخدام الروابط الصلبة (حتى يكون لديك و Historial of the blobs مثل 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)

استراتيجية النسخ الاحتياطي الخاص بك لـ Filestorage على ما يرام. ومع ذلك ، فإن إنشاء نسخة احتياطية من أي قاعدة بيانات تخزن البيانات في ملفات متعددة لا يكون سهلاً أبدًا حيث يجب أن تحدث نسختك دون أي كتابة إلى الملفات المختلفة. بالنسبة إلى FileStorage ، فإن نسخة غبية أعمى جيدة لأنها مجرد ملف واحد. (باستخدام Repozo أفضل.)

في هذه الحالة (مع BlobStorage مع Filestorage) ، يجب أن أشير إلى نصيحة النسخ الاحتياطي العادي:

  • خذ DB في وضع عدم الاتصال أثناء عمل نسخة نظام الملفات
  • استخدم أدوات لقطة مثل LVM لتجميد القرص في نقطة معينة
  • قم بتصدير المعاملات (غير قابلة للاستغناء في الممارسة)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top