Cum pot face Backup-ul depozitelor SVN pas cu pas (Administrarea sistemului, Linux, Ubuntu, Backup, Svn, Interfață De Linie De Comandă)

Mohammad AL-Rawababdeh a intrebat.
a intrebat.

Cum pot face backupul depozitelor SVN pas cu pas…. vreau să fac backup-ul depozitelor în sine …. nu vreau să fac backup-ul ca dosar ….

Comentarii

  • De ce nu ca fișier de descărcare? –  > Por Oskar Duveborn.
  • possible duplicate of Cel mai bun mod de a face copii de rezervă pentru Subversion? –  > Por EEAA.
4 răspunsuri
Adam Butler

pasul 1Creați un script sau un fișier batch care execută comanda

svnadmin dump REPOS_PATH > backupfile

svnadmin este un program care vine cu svn va fi în folderul bin

backupfile este fișierul în care va fi descărcat depozitul

REPOS_PATH este locația depozitului

a se vedea http://svnbook.red-bean.com/en/1.1/re31.html pentru mai multe detalii

pasul 2.Rulați scriptul/fișierul batch pentru a testa copia de rezervă.

pasul 3.Testați dacă backup-ul funcționează prin rularea comenzii

svnadmin load test_path < backupfile

Acum încercați depozitul creat în test_path pentru a vă asigura că funcționează bine – ar trebui să funcționeze și, ca bonus, ar trebui să funcționeze cu versiuni mai noi de svn.

Comentarii

  • vă rog dacă cunoașteți o altă metodă pentru că este greu de înțeles …. și pentru că nu am cunoștințe vaste despre acest sistem de operare.  > Por Mohammad AL-Rawabdeh.
  • editat astfel încât să nu poată fi mai ușor de înțeles HTH –  > Por Adam Butler.
  • vă rog dacă mă puteți ajuta …. când am făcut backup în „root” /home … dimensiunea spațiului root nu este suficientă așa că am încercat să fac backup în alt loc „/backup” dar apare următorul mesaj : (-bash: file_name : Prmission denied) – – (-bash: file_name : Prmission denied) –  > Por Mohammad AL-Rawabdeh.
  • Câteva întrebări – comenzi pentru a găsi răspunsuri în paranteze. Ce sistem de operare (uname -a)? cu ce utilizator rulează acest lucru (whoami)? există folderul /backup și aveți permisiuni (ls -l /)? Se află pe un disc care este montat în citire/scriere (mount)? –  > Por Adam Butler.
  • -1 pentru că nu ați menționat fișierele care svnadmin dump nu include (cârlige și altele asemenea). Utilizați svnadmin hotcopy în schimb. –  > Por Mike S.
gbjbaanb
  1. Opriți serverul care rulează
  2. Copiați întregul director care conține repo-ul și fișierele hooks și config.
  3. Copiați și configurația Apache, dacă o folosiți și oricum nu este stocată în directorul de mai sus.

asta e tot.

Puteți restaura pe aceeași mașină sau pe una similară (de exemplu, windows -> windows). dacă doriți să restaurați de pe Windows pe Linux (să zicem), atunci veți dori să descărcați și să încărcați în schimb depozitul. Tot va trebui să copiați și restul directorului.

Sugestia de a folosi rsync pentru a copia totul este una bună (dar va trebui să opriți serverul pentru a obține întotdeauna o copie de rezervă bună), sau să folosiți svnsync, care este un utilitar excelent de backup incremental pentru SVN. (totuși, va trebui să copiați și cârligele și configurația – eu le copiez cu rsync și svnsync repo-ul).

Comentarii

  • Bună observație – oprirea serverului ajută dacă repo-ul este în uz. Salvarea configurațiilor ssh ar fi și ea un punct. –  > Por Andreas Rehm.
aleroot

Urmează un script pe care îl puteți salva ca : svnbackup.sh

    #!/bin/bash

appname=`basename $0`

#
# Set some defaults
#
increment=100
start=""
default_history_file="last_saved"
history_file=""
dumpfilepath="."
dumpfilename="dumpfile"
verbose=false
sshopts=""
identity=""

#
# Function to explain how to use the program
#
function usage () {
    echo
    echo "$appname [-h]"
    echo "$appname [-v] [-i increment] [-s start_rev] [--scp remote] [--identity ssh-key] [--ssh-opts ssh options] [--history-file file] [--out-dir directory name] [--compress (gzip|bzip2)] [--file-name dumpfile-base-name] svn_repository_path"
    cat - <<EOF

This script dumps a subversion repository to a series of compressed
files.  It uses a local file to remember the last changeset dumped so
the script can be used to generate files for backups.

Using the --scp option, the backup files can be generated on one
machine and copied to a backup server once dumped.

  -v             -- Verbose mode
  -i increment   -- How many revisions to include in each dump file.
  --file-name base -- Base name for dump files, defaults to "dumpfile".
  -s start_rev   -- First revision to dump.
  --scp remote   -- Location for remote backups.  Files are transfered via scp,
                    then removed from the local directory.
  --identity     -- Identity file for scp transfer
  --ssh-opts      -- options to use for scp
  --history-file -- path and filename of historyfile to use
  --out-dir      -- path where svn dump files should be written, defaults to "."
  --compress     -- compression method (gzip or bzip2, defaults to bzip2)
EOF
    echo
    echo "Example:"
    echo "  $appname -v -i 100 --scp [email protected]:/backups/svn /svn/Project"
    echo
    exit $1
}

compress_app="bzip2"
compress_ext="bzip2"

#
# Process arguments
#
while [ $# -gt 0 ]
do
    opt="$1"
    case "$opt" in
        -h) usage 0;;
        -i) increment=$2;
            shift;;
        -s) start=$2;
            shift;;
        --scp) dest="$2"; 
            shift;;
        --identity) identity="$2";
            shift;;
        --ssh-opts)  sshopts="$2";
            shift;;
        --history-file) history_file="$2";
            shift;;
        --out-dir) dumpfilepath="$2";
            shift;;
        --file-name) dumpfilename="$2";
            shift;;
        -v) verbose=true;;
        --compress)
            case "$2" in
                bzip2|bz|bzip) 
                    compress_app="bzip2"; 
                    compress_ext="bzip2";;
                gzip|gz)
                    compress_app="gzip";
                    compress_ext="gz";;
            esac;
            shift;;
        *) break;;
    esac
    shift
done

repository="$1"
if [ -z "$repository" ]
then
    echo "Failed: Repository argument required"
    usage 1
fi

if [ -z "$history_file" ]
then
    history_file="$dumpfilepath/$default_history_file"
fi

if [ "x${start}" = "x" ]
then
    # if [ -s $history_file ]              #Blocco Rinominato per NON Tenere Conto Last_saved
    # then
        # loop_first=`cat $history_file`
    # else
        # loop_first=0
    # fi
     loop_first=0
else
    loop_first=$start
fi
youngest=`svnlook youngest "$repository"`

$verbose && echo "Backing up: $repository"
$verbose && echo "      From: $loop_first"
$verbose && echo "        To: $youngest"
if [ "$dest" != "" ]
then
    $verbose && echo "      Dest: $dest"
fi
if [ "$identity" != "" ] ; then
    $verbose && echo "  Identity: $identity"
fi
if [ "$sshopts" != "" ] ; then
    $verbose && echo "  ssh opts: $sshopts"
fi
$verbose && echo "Hist. file: $history_file"
$verbose && echo "Chunk size: $increment"

#
# Function to do the backup for one set of revisions
#
function backup_revs () {
    typeset first=$1
    typeset last=$2
    typeset repo=$3

    if [ "$first" != "0" ]
    then
        incremental="--incremental"
    fi

    repo_name=`basename "$repo"`
    dumpfile="$dumpfilepath/${dumpfilename}-${repo_name}-${first}-${last}.${compress_ext}"

    $verbose && echo -n "Dumping ${first}:${last} ..."

    svnadmin dump -q "$repo" $incremental --revision ${first}:${last} 
        | "$compress_app" > "$dumpfile"
    RC=$?

    $verbose && echo

    if [ $RC -ne 0 ]
    then
        rm -f "$dumpfile"
        return $RC
    fi

    $verbose && echo "Created $dumpfile"

    if [ "$dest" != "" ]
    then
        if [ -z "$identity" ] ; then
            scp $sshopts "$dumpfile" "$dest"
        else
            scp $sshopts -i $identity "$dumpfile" "$dest"
        fi
        RC=$?
        rm -f "$dumpfile"
    fi

    return $RC
}

#
# Do the incremental dumps
#

if [[ $youngest -eq $loop_first ]]
then
    $verbose && echo "No new changesets to dump"
    exit 0
fi

let loop_last=($loop_first + $increment)

if [[ $loop_first -ne 0 ]]
then
    let loop_first=($loop_first + 1)
fi

while [[ $loop_first -le $youngest ]]
do

    if [ $loop_last -lt $youngest ]
    then
        # A full "increment"
        backup_revs $loop_first $loop_last "$repository" || exit 1
        #echo $loop_last > $history_file
    else
        # In case the last few revs do not make up a full "increment"
        backup_revs $loop_first $youngest "$repository" || exit 1
        #echo $youngest > $history_file
    fi

    let loop_first=($loop_last + 1)
    let loop_last=($loop_last + $increment)
done

exit 0

Andreas Rehm

Doar creați o copie a directorului svn.

Editați:

După cum s-a menționat deja – trebuie să opriți mai întâi serverul svn.

Trebuie să opriți și apache și ssh, dacă le folosiți pentru a accesa repo-ul dumneavoastră.

Comentarii

  • poate că vă referiți la următoarea comandă :- svnadmin hotcopy path/to/repository path/to/backup –clean-logs ….. dacă vă referiți la aceasta am citit în unele referințe această metodă nu este recomandată –  > Por Mohammad AL-Rawabdeh.
  • Nu – doar copiați folderul. Repo-ul dvs. rezidă într-un dosar. Puteți doar să copiați sau, mai bine zis, să faceți rsync cu dosarul. –  > Por Andreas Rehm.
  • Copierea simplă a directorului fără a opri mai întâi orice acces SVN este o idee foarte proastă, s-ar putea să vă treziți cu o copie de rezervă inconsistentă. Folosiți întotdeauna svnadmin hotcopy sau opriți complet tot accesul SVN, așa cum se menționează în răspunsul lui @gbjbaanb –  > Por rmyates.
  • Este adevărat – dacă mi-am editat postarea pentru a reflecta aceste probleme. –  > Por Andreas Rehm.