19 septiembre 2008

Recuperación dump repositorio subversion

Bueno, pues finalmente he hecho un pequeño script en python para recuperar los dump incrementales cada día en otro servidor de backup. De este modo si se cayera la máquina principal, lo único que se podría perder serían los commit de ese día, y se podría seguir trabajando sobre la otra máquina.

#!/usr/bin/env python
"""Script para recuperar los backups incrementales de subversion.
Intenta seguir por donde lo ha dejado el dia anterior. Se tiene que hacer
todos los dias, si nos saltamos un dia ya hay que hacer la importacion a mano """

import os
import glob
import subprocess
import sys
# import pdb


# Directorio donde ubicamos los repositorios y los backups
REPOS="/usr/local/repos/"
BACK="/media/backups/"

# Fichero de LOG
LOG="/root/scripts/logsubversion.log"

# Listamos los repositorios

lista=os.listdir(REPOS)

# Realizamos un loop en la lista y navegamos hacia el que sea un repositorio

for elemento in lista:
if os.path.isdir(REPOS+elemento):
# Capturamos en numero de version actual
filerev=subprocess.Popen(["svnlook", "youngest", "/usr/local/repos/"+elemento], stdout=subprocess.PIPE).communicate()[0]
# Incrementamos el numero de version porque es el que tenemos que buscar
a=int(filerev)+1
# pdb.set_trace()
# Realizamos una captura de los errores (fallo nfs, etc, etc)
try:
for elem in os.listdir(BACK+elemento):
#print elem
nuevoa=str(a)
nuevoelem=elemento+".incr."+nuevoa+"_"
#print nuevoelem
if (elem.find(nuevoelem)!=-1):
try:
os.system("svnadmin load /usr/local/repos/"+elemento+" < /media/backups/"+elemento+"/"+elem)
fich=open(LOG,"a")
fich.write("actualizado "+elemento+" desde revision "+nuevoa+"\n")
fich.close()
except:
fich=open(LOG,"a")
fich.write("error actualizando "+elemento+"\n")
fich.close()
except:
pass






Seguro que se puede hacer más sencillo, más rápido, etc, etc..., pero esto es lo que se me ha ocurrido. Los dump los guardo con un formato fichero.incr.45_56 donde 45_56 son los números de las versiones que se han guardado.

No hay comentarios: