Script Simples de Backup do Servidor Trac e Subversion

July 23rd, 2008 by André Felipe Dias Leave a reply »

Existem várias estratégias possíveis de backup do servidor do Trac e do Subversion, mas executar o backup diretamente sobre os repositórios não é a melhor alternativa. Para os repositórios do Subversion usando o formato FSFS, um backup direto até funciona, mas para o Trac, que usa um banco de dados internamente, o backup pode acabar pegando o banco de dados em um estado intermediário e depois haverá problemas para restaurá-lo.

A estratégia usada no script mostrado neste artigo é criar uma cópia dos repositórios em um lugar específico e aí sim, esse lugar específico deverá usado para fazer o backup total dos repositórios.

Tanto o Trac quanto o Subversion possuem comandos administrativos para criar uma hotcopy, isto é, uma cópia do repositório enquanto o original ainda está em uso. Este comando executa automaticamente todo o procedimento para eliminar quaisquer inconsistências que poderiam ser produzidas durante a cópia de um repositório em uso.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/usr/bin/python
# -*- coding: utf-8 -*-

import os
import shutil

def limpa_diretorio_backup(diretorio):
    if os.path.exists(diretorio):
        print 'rm -rf %s' % diretorio
        shutil.rmtree(diretorio)
    print 'mkdir %s' % diretorio
    os.mkdir(diretorio)

def hotcopy(diretorio_origem, diretorio_destino, comando_hotcopy):
    limpa_diretorio_backup(diretorio_destino)
    for nome_repos in os.listdir(diretorio_origem):
        caminho_repos = os.path.join(diretorio_origem, nome_repos)
        if not os.path.isdir(caminho_repos):
            continue
        destino_repos = os.path.join(diretorio_destino, nome_repos)
        print comando_hotcopy % (caminho_repos, destino_repos)
        os.system(comando_hotcopy % (caminho_repos, destino_repos))

diretorio_repos_svn   = '/srv/svn'
diretorio_backup_svn  = '/srv/backup/svn'
svnadmin_hotcopy      = 'svnadmin hotcopy %s %s'

diretorio_env_trac    = '/srv/trac'
diretorio_backup_trac = '/srv/backup/trac'
trac_admin_hotcopy    = 'trac-admin %s hotcopy %s'

hotcopy(diretorio_repos_svn, diretorio_backup_svn, svnadmin_hotcopy)
hotcopy(diretorio_env_trac, diretorio_backup_trac, trac_admin_hotcopy)
Advertisement

4 comments

  1. Angelo M. Rodrigues says:

    Como fazer o Backup entre servidores pela rede??

    É possível??

  2. André Felipe Dias says:

    É possível sim, Ângelo. Sugiro que você dê uma olhada nesses links:

    Open Source Backup Software
    Amanda
    Bacula

    Se precisar de alguma ajuda mais específica, entre em contato através do nosso formulário de fale conosco ou através do telefone (19) 3306 9609.

Leave a Reply