Buenas
Realice un script que hace un backup de mi base de datos, y cuando lo ejecuto manualmente funciona todo exelente, hace la copia y luego lo comprime.
Entonces lo coloque en el crontab para que se ejecute a cierta hora, y alli esta el problema no hace la copia, solo encuentro el nombre que le asigne a la copia y no pesa nada me dice 4.0 k, no creo que sea por la contraseña por que como root no me la pide.
backup automatico
Vie, 05/03/2010 - 15:22 — cce77Hice un HOW TO justamente de este tema, escrito en BASH...no he tenido ningun problema. Revisa bien el tema de la contraseña y los permisos y si se conecta bien a la base de datos. Te recomiendo que para hacer estas pruebas, vayas haciendo que se ejecute tu script automaticamente pero de a tramos, primero de conexion, verificas si te conectas, y asi vayas probando..te paso el script que hice y me funciona bien:
Aclaracion, lei varios HOW TO antes de hacer este, lo fui adaptando a mis necesidades.
HOW TO Automatizar.....
realiza una copia de las bases seleccionadas, las comprime y las almacena en dos
directorios, uno en /home/RESPALDO y el otro en un dispositivo que se haya montado en /media/DISPOSITIVO. Para cada caso particular, se deberían cambiar las rutas de almacenamiento de "DIR" y "DIR_DISPOSITIVO_MONTADO", según el requerimiento. Pudiendo utilizar el script para realizar el backup en dos lugares ( DIR , DIR_DISPOSITIVO_MONTADO), o en uno solo eliminando la que no se necesite, junto con la parte del script que realiza el respaldo en la dirección que hemos eliminado.
Además, se puede seleccionar a gusto los parámetros de la secuencia de búsqueda y borrado de
archivos anteriores ( find $DIR/base_dsa* -mtime +15 -exec rm -r -f {} \; 2>> $DIR/base_datos[$FECHA].log); pudiendo cambiar -mtime que nos esta indicando la cantidad de días que han de tener los archivos almacenados anteriormente para ser eliminados (en este caso -mtime +15, nos indica que busca y borra los archivos con mas de 15 días de antigüedad).
De no ser necesario eliminar los respaldos anteriores, se debería eliminar la parte del script que
realiza dicha tarea.
Por último, se debe tener en cuenta que el script incluye el montado de un DISPOSITIVO, por lo que si no es necesario se debería eliminar las lineas del script que correspondan.
III. SCRIPT.
#!/bin/bash
#Automatización de Backup
#PASO 1: Inicializamos las variables según cada requerimiento, pudiendo agregar más bases de datos.
USER="root"
PASS="contraseña"
BASE_1="nombre_1"
BASE_2="nombre_2"
DIR="/home/RESPALDO" #ruta de la pc original.
DIR_DISPOSITIVO_MONTADO="/media/DISPOSITIVO" #ruta del Dispositivo de
Almacenamiento secundario
FECHA=`date +%d-%m-%Y` #fecha en la que se realiza el backup.
#los archivos generados tendrán un formato como el siguiente: #base_datos_1[11-11-2009].sql.tar.gz
#se puede modificar los nombres según cada requerimiento particular.
#Cuerpo del script
#PASO 2: #Indicamos la hora de inicio del backup
echo "Hora de inicio del backup: `date +%H:%M:%S`" >> $DIR/base_datos[$FECHA].log
#Obtenemos el espacio total utilizado de la partición donde almacenamos el backup, expresado en #porcentaje del total ( por ejemplo : ESPACIO_OCUPADO=18%).
ESPACIO_OCUPADO=`df /$DIR | awk '{print $5}' | grep -a %`
#Verificamos que el porcentaje utilizado no supere un valor dado. Este valor de referencia es #seleccionable dependiendo de cada caso en particular.
#Quitamos el símbolo “%”, para poder trabajar solo con números.
ESPACIO_OCUPADO=`expr match “$ESPACIO_OCUPADO” '\([0-9]*[0-9]\)'`
if [ $ESPACIO_OCUPADO -le 85 ];
then #si el espacio ocupado es igual o menor al 85%, realizamos el backup.
#PASO 3: Realizamos el backup de las bases de datos seleccionadas.
for BASE in $BASE_1 $BASE_2
do
mysqldump -u $USER -p$PASS $BASE --opt > $DIR/base_datos_$indice[$FECHA].sql
((indice++))
done
#PASO 4: Comprimimos el archivo generado y lo almacenamos en el directorio correspondiente.
# Además generamos, de no existir, o agregamos información al archivo de log.
indice=1
for indice in 1 2
do
tar -czvf $DIR/base_datos_$indice[$FECHA].sql.tar.gz $DIR/base_datos_$indice[$FECHA].sql >> $DIR/base_datos[$FECHA].log
done
#PASO 5: Eliminamos el backup anterior y el archivo base_datos*.sql generado con mysqldump si #es que se generaron los archivos anteriores, según el periodo de tiempo que hayamos elegido.
for indice in 1 2
do
if [ -f $DIR/base_datos_$indice[$FECHA].sql ]; #comprobamos si se efectuó el backup
then
if [ -f $DIR/base_datos_$indice[$FECHA].sql.tar.gz ]; #comprobamos si se comprimió.
then
# busca y borra todos los archivos base_datos* que se hayan guardado hace + de 15 días.
find $DIR/base_datos* -mtime +15 -exec rm -r -f {} \;
else
echo "La compresión del backup realizado el $FECHA no se ha podido llevar a cabo, por algún problema. Se mantiene almacenado la compresión del backup anterior" >> $DIR/base_datos[$FECHA].log
fi
else
echo "El backup del día $FECHA no se ha podido llevar a cabo, por algún problema. Se
mantiene almacenado el backup anterior" >> $DIR/base_datos[$FECHA].log
fi
done
#Indicamos la hora de finalizado del backup, además el porcentaje de espacio utilizado.
echo "Hora de finalización del backup: `date +%H:%M:%S`" >> $DIR/base_datos[$FECHA].log
ESPACIO_OCUPADO=`df /$DIR | awk '{print $5}' | grep -a %`
echo "El espacio utilizado hasta el momento es del $ESPACIO_OCUPADO" >> $DIR/base_datos[$FECHA].log
# Una vez realizado el backup en la misma pc, almacenamos el archivo comprimido en otro #dispositivo de respaldo.
else
#Espacio en disco insuficiente. El espacio utilizado es igual o superior al 86% del total.
#Dejamos un mensaje de error, por falta de espacio en la partición
echo "El backup no puede llevarse a cabo porque no hay espacio suficiente en la partición del disco. Hora de finalización del backup: `date +%H:%M:%S`" >> $DIR/base_datos[$FECHA]-error.log
fi
# PASO 6: Montando medio de Backup
mount $DIR_DISPOSITIVO_MONTADO >/dev/null
# Comprobamos si se tiene permiso de escritura en el directorio de respaldo.
if [ -w $DIR_DISPOSITIVO_MONTADO ];
then
echo "Hora de inicio del backup: `date +%H:%M:%S`" >> $DIR_DISPOSITIVO_MONTADO/base_datos[$FECHA].log
#Obtenemos el espacio total utilizado de la partición donde almacenamos el backup, expresado en #porcentaje del total ( por ejemplo : ESPACIO_OCUPADO_II=18%).
ESPACIO_OCUPADO_II=`df /$DIR_DISPOSITIVO_MONTADO | awk '{print $5}' | grep -a %`
#Verificamos que el porcentaje utilizado no supere un valor dado. Este valor de referencia es #seleccionable dependiendo de cada caso en particular.
#Quitamos el símbolo “%”, para poder trabajar solo con números.
ESPACIO_OCUPADO_II=`expr match “$ESPACIO_OCUPADO_II” '\([0-9]*[0-9]\)'`
if [ $ESPACIO_OCUPADO_II -le 85 ];
then #si el espacio ocupado es igual o menor al 85%, realizamos el backup.
for indice in 1 2
do #si existe, lo copiamos en el DISPOSITIVO
if [ -f $DIR/base_dsa_$indice[$FECHA].sql.tar.gz ];
then
cp $DIR/base_datos_$indice[$FECHA].sql.tar.gz $DIR_DISPOSITIVO_MONTADO/backup >> $DIR/base_datos[$FECHA].log
if [ -f $DIR_DISPOSITIVO_MONTADO/base_datos_$indice[$FECHA].sql.tar.gz ];
then
# busca y borra todos los archivos base_datos* que se hayan guardado hace + de 15 días.
find $DIR_2/base_dsa* -mtime +15 -exec rm -r -f {} \;
else
echo "No se encuentra el backup realizado el $FECHA, la copia no ha sido satisfactoria por algún problema. Se mantiene almacenado la compresión del backup anterior" >> $DIR_DISPOSITIVO_MONTADO/base_datos[$FECHA].log
fi
else
echo "El backup realizado el $FECHA no se ha podido almacenar en el DISPOSITIVO, por
algún porblema. Se mantiene almacenado el backup anterior" >> $DIR/base_datos[$FECHA].log
fi
done
echo "Hora de termino del backup: `date +%H:%M:%S`" >> $DIR_DISPOSITIVO_MONTADO/base_datos[$FECHA].log
ESPACIO_OCUPADO_II=`df /$DIR_DISPOSITIVO_MONTADO | awk '{print $5}' | grep -a %`
echo "El espacio utilizado hasta el momento es del $ESPACIO_OCUPADO_II" >> $DIR_DISPOSITIVO_MONTADO/base_datos[$FECHA].log
else
#En caso de espacio insuficiente en el dispositivo. El espacio utilizado supera el 85% del total.
#Dejamos un mensaje de error, por falta de espacio en la partición
echo "El backup no puede llevarse a cabo porque no hay espacio suficiente en la partición del disco. Hora de finalización del backup: `date +%H:%M:%S`" >> $DIR_DISPOSITIVO_MONTADO/base_datos[$FECHA]-error.log
fi
else
echo "Backup en Dispositivo secundario ABORTADO. Permiso de escritura denegado o no se ha podido montar correctamente el dispositivo" >> $DIR/base_datos[$FECHA].log
fi
# PASO 7: Desmontando medio de Backup
umount $DIR_DISPOSITIVO_MONTADO >/dev/null
#FIN DEL SCRIPT
IV. PERMISO DE EJECUCION.
Ahora desde la consola de linux, nos logeamos como root y le damos permiso de ejecución al script. Para ello, accedemos al directorio donde se encuentra nuestro script:
mi-pc:~# chmod +x /directorio_particular/respaldo_automatizado.sh
V. PROGRAMANDO EL CRON.
Para finalizar, programamos la tarea de backup de forma que el mismo se ejecute una vez por semana. Para lo cual utilizamos el demonio “CRON” que posen linux, seleccionando el directorio donde se encuentra la opción del CRON para ejecutar semanalmente una tarea , /etc/cron.weekly/. Copiamos el script en dicho directorio:
mi-pc:~# cp /directorio_particular/respaldo_automatizado.sh /etc/cron.weekly
De esta forma, nuestro script se encuentra dentro del directorio /etc/cron.weekly, lo que hace que el mismo se ejecute semanalmente y de esta manera obtenemos la automatización del backup buscada.-
backup automatico
Vie, 05/03/2010 - 15:25 — cce77Me van a matar los de postgresql, el HOW TO lo hice pero para la base de datos de mysql, hace poco estoy trabando con mysql y cuando hice el HOW TO no sabia utilizar postgresql, ahora lo manejo poco y nada pero voy en camino..
Espero lo puedas adaptar a tus necesidades.
Saludos.-
DESHN .CO.CC
Mié, 02/03/2011 - 13:13 — Anónimo[[Categoría:Administración de Servidores]] [[Categoría:Linux]] [[Categoría:postgres]]
#!/bin/bash
######## Bash script para hacer mantenimiento y backup de bases de datos especificas ########
dbcxn="-h localhost -p 5432 -U postgres"; # Datos de conexion
rtdir="/var/lib/pgsql/backups"; # Directorio de backups
# Base de datos a resguardar (nombres_de_dbs_en_ascii_sin_espacios separados_por_espacios)
#dblst=( ARANCELDB100 SICADB100 actividades_production sistemas_mec_demo sistemas_mec_development sistemas_mec_production );
dblst=( template1 );
# Directorio de backup
dirdt=`eval date +%Y%m%d`; # Fecha para el directorio
bkdir=$rtdir"/backup-"$dirdt; # Direccion absoluta directorio
if [ ! -d $bkdir ]; then
echo "Creando directorio: "$bkdir" ";
/bin/mkdir $bkdir
fi
# Boocle para vacum, reparacion, y backup
dbsc=0;
dbst=${#dblst[@]};
while [ "$dbsc" -lt "$dbst" ]; do
dbsp=${dblst[$dbsc]};
dbspf=""$bkdir"/"$dbsp""; # Prefijo (dir+nom+fecha) nombre de archivo
echo "";
echo "######################################################";
echo "Procesando base de datos '"$dbsp"'";
echo " * Realizando reindexado de: '"$dbsp"'";
ridt=`eval date +%Y%m%d_%H%M%S`;
/usr/bin/reindexdb $dbcxn -d $dbsp -e > $dbspf"-"$ridt"-reindexdb.log" 2>&1
echo " * Realizando vacuum de: '"$dbsp"'";
vadt=`eval date +%Y%m%d_%H%M%S`;
/usr/bin/vacuumdb $dbcxn -f -v -d $dbsp > $dbspf"-"$vadt"-vacuumdb.log" 2>&1
echo " * Realizando copia de seguridad de: '"$dbsp"'";
bkdt=`eval date +%Y%m%d_%H%M%S`;
/usr/bin/pg_dump -i $dbcxn -F c -b -v -f $dbspf"-"$bkdt".backup" $dbsp > $dbspf"-"$bkdt"-backup.log" 2>&1
echo "######################################################";
echo "";
dbsc=`expr $dbsc + 1`;
done
exit 0;
== ==
OBS: para evitar que el postgresql pida contraseña debe modificarde se esta manera el //pg_hba.conf
local all all ident
# IPv4 local connections:
host all all 127.0.0.1/32 trust
FUENTE http://deshn.wikidot.com/postgresql-remote-backup
Enviar nuevo comentario