2009-01-16 20 views
6

Tôi đang sử dụng plone.app.blob để lưu trữ các đối tượng ZODB lớn trong thư mục blobstorage. Điều này làm giảm áp lực kích thước trên Data.fs nhưng tôi đã không thể tìm thấy bất kỳ lời khuyên nào về việc sao lưu dữ liệu này.Cách chính xác để sao lưu các đốm màu ZODB là gì?

Tôi đã sao lưu Data.fs bằng cách trỏ công cụ sao lưu mạng vào thư mục sao lưu repozo. Tôi có nên chỉ cần trỏ công cụ đó vào thư mục blobstorage để sao lưu các đốm màu của tôi không?

Điều gì xảy ra nếu cơ sở dữ liệu đang được đóng gói lại hoặc các đốm màu đang được thêm vào và xóa khi bản sao đang diễn ra? Có các tệp trong thư mục blobstorage phải được sao chép theo một thứ tự nhất định không?

Trả lời

2

Sao lưu "blobstorage" sẽ thực hiện. Không cần một thứ tự đặc biệt hay bất cứ thứ gì khác, nó rất đơn giản.

Tất cả các thao tác trong Plone đều được giao dịch đầy đủ, vì vậy hãy nhấn sao lưu ở giữa giao dịch sẽ hoạt động tốt. Đây là lý do tại sao bạn có thể sao lưu trực tiếp ZODB. Nếu không biết bạn đang sử dụng hệ thống tệp nào, tôi đoán rằng nó sẽ hoạt động như dự định.

+2

Tôi có thể sao lưu thư mục blobstorage trước khi tôi sao lưu dữ liệu.fs và vào lúc tôi quay lại sao lưu dữ liệu.bạn đã thêm hoặc cập nhật blob khác chưa? Điều gì sẽ xảy ra nếu tôi đóng gói cơ sở dữ liệu trong khi tôi đang sao lưu? – joeforker

+4

Câu trả lời này là không chính xác - mối quan tâm gia tăng joeforker là hợp lệ. Xem câu trả lời riêng của tôi cho phương pháp được đề xuất. –

+2

Tin cậy Dr. Glick. :) – limi

1

Chiến lược sao lưu của bạn cho FileStorage là tốt. Tuy nhiên, việc sao lưu bất kỳ cơ sở dữ liệu nào lưu trữ dữ liệu trong nhiều tệp không bao giờ dễ dàng như bản sao của bạn phải xảy ra mà không ghi vào các tệp khác nhau. Đối với FileStorage một bản sao ngu ngốc mù là tốt vì nó chỉ là một tập tin duy nhất. (Sử dụng repozo thậm chí còn tốt hơn.)

Trong trường hợp này (với BlobStorage kết hợp với FileStorage) Tôi có để trỏ đến những lời khuyên sao lưu thường xuyên:

  • lấy db ẩn trong khi thực hiện một bản sao tập tin hệ thống
  • công cụ sử dụng ảnh chụp như LVM đóng băng đĩa tại một điểm nhất định
  • làm một xuất khẩu giao dịch (không khả thi trong thực tế)
12

Nó phải là an toàn để làm một bản sao lưu repozo của dữ liệu .fs theo sau là một rsync của thư mục blobstorage, miễn là cơ sở dữ liệu không được đóng gói trong khi hai hoạt động đó đang xảy ra.

Điều này là do, ít nhất là khi sử dụng blob với FileStorage, các sửa đổi đối với blob luôn dẫn đến việc tạo tệp mới có tên dựa trên id đối tượng và id giao dịch. Vì vậy, nếu các đốm màu mới hoặc cập nhật được viết sau khi Data.fs được sao lưu, nó không phải là một vấn đề, như các tập tin được tham chiếu bởi Data.fs vẫn nên được xung quanh. Việc xóa một đốm màu không dẫn đến việc tệp bị xóa cho đến khi cơ sở dữ liệu được đóng gói, do đó cũng không sao.

Thực hiện sao lưu theo thứ tự khác hoặc với đóng gói trong khi sao lưu, có thể dẫn đến Data.fs sao lưu tham chiếu các đốm màu không được bao gồm trong bản sao lưu.

2

Tôi có một kịch bản mà bản trong vòng một tháng các đốm màu sử dụng liên kết cứng (vì vậy bạn có và Historial của các đốm màu như 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 <[email protected]> 

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) 
+0

Lưu ý rằng gần đây tôi đã bắt đầu một nhánh của tập thể.recipe.backup để sao lưu blobstorage. Chưa hoàn thành, nhưng sẽ là tốt để thử nghiệm trên một cơ sở dữ liệu không sản xuất. – maurits

Các vấn đề liên quan