Backup BD Postgres Automatizado

Viernes, 10 de Abril 2009

Esta vez, trataré de explicar como realizar respaldos de sus BD de forma automática, por medio de crontab en linux.

La forma de obtener un respaldo de una BD en postgres es:

pg_dump -U usuario -d basededatos > archivo.sql

más sobre pg_dump

Creamos un script bash para respaldar nuestra BD postgres, llamado backup.sh, ubicado en /home/pgallegos/

#!/bin/bash

FECHA=`date +'%Y%m%d'`
DIR_BACKUP="/home/pgallegos/backup_bd"
pg_dump -U pgallegos -d bdatos > $DIR_BACKUP/BACKUP_$FECHA.sql

Se podría también guardar los respaldos comprimidos, para que no ocupen mucho espacio en disco.
agregando un par de líneas al final del script:

cd $DIR_BACKUP
gzip BACKUP_$FECHA.sql

Y finalmente debemos crear una tarea en el crontab.

Si desean editar el crontan con vi, deben realizar lo siguiente:

export EDITOR=vi

Para ver las tareas del crontab, se debe ejecutar:

crontab -l

Para agregar o editar una tarea, se debe ejecutar:

crontab -e

El ejemplo siguiente, ejecuta el script todos los días a la 1:00 am.

0 1 * * * /home/pgallegos/backup.sh

Para ejecutar el script por ejemplo todos los días lunes a las 00:00 hrs, se debe agregar la siguiente línea al crontab.

0 0 * * 1 /home/pgallegos/backup.sh

más sobre crontab

El ejemplo anterior, debería funcionar para cualquier BD, como mysql u oracle.
En algunos casos (en oracle por ej) se deberán setear las variables de ambiente de la BD dentro del script bash con el comando export.

Eso sería por ahora.

sql> exit;

Bases de Datos, Linux, MySQL, Oracle, PostgreSQL | 2 Comentarios | Trackback

Bug en comando date Linux

Jueves, 19 de Marzo 2009

Esta vez contaré como descubrí un bug en el comando date de linux :D

Bueno, primero que todo (o primero que nada? , da lo mismo, es mi blog y escribo como quiero xD)
explicaré brevemente el uso del comando date de linux.

El comando date nos sirve para desplegar la hora y fecha actual, además como usuario root o sudo se puede modificar la fecha del sistema. También se puede sumar o restar dias a una fecha determinada.

Algunos ejemplos de uso del comando date:

Despliega la fecha y hora actual:

$ date
jue mar 19 01:11:58 CLT 2009

Despliega la fecha y hora actual con un formato determinado:

$ date +'%d/%m/%Y %H:%M:%S'
19/03/2009 01:11:58

Resta dos dias a la fecha actual y despliega con un formato determinado:

$ date --date='-2 day' +'%d/%m/%Y %H:%M:%S'
17/03/2009 01:11:58

Suma un mes a una fecha dada (13/01/2009 a las 14:00:00 para el ejemplo) y la despliega con un formato determinado:

$ date --date='+1 month 2009-01-13 14:00:00' +'%d/%m/%Y %H:%M:%S'
13/02/2009 14:00:00

Con el comando date, se pueden sumar o restar segundos, minutos, dias, semanas, meses, años.

Ahora que ya conocemos un poco más el uso del comando date, voy a contar de que se trata el bug que encontré para este comando.

Intentemos sumar una hora a la fecha 01/01/2009 a las 20 horas. Esto nos deberia dar las 21 horas del dia 01/01/2009.
Seria de la siguiente forma:

$ date --date='+1 hour 2009-01-01 20' +'%d/%m/%Y %H:%M:%S'
01/01/2009 21:00:00

Todo bien.
Ahora intenten sumar una hora a la fecha 14/03/2009 a las 23 horas, nos deberia dar las 00 horas del dia 15/03/2009.
Seria de la siguiente forma:

$ date --date='+1 hour 2009-03-14 23' +'%d/%m/%Y %H:%M:%S'
14/03/2009 23:00:00

Sorpresa! No le sumó la hora a la fecha, ¿que sucede?
Después de estar harto rato probando y probando como loco, sumando horas, minutos, dias, etc, ya casi seguro de que el linux me estaba agarrando para el webeo :p, pudimos detectar el porque (con algunos compañeros de trabajo).

Esto ocurre ya que justo ese día es el cambio de hora de verano (solo para algunos paises), donde linux tiene programado restar una hora a las 00:00:00, entonces el sistema se vuelve loco.
Este comando lo ejecuté en las siguientes distribuciones linux: centos, redhat, ubuntu, debian, y en todas ellas ocurrió lo mismo. Por otro lado lo ejecuté en 2 maquinas Solaris y ahí si suma la hora y me devuelve la fecha del 15/03/2009 a las 00:00:00.

$ date --date='+1 hour 2009-03-14 23' +'%d/%m/%Y %H:%M:%S'
15/03/2009 00:00:00

Pero después pensando un poco (a veces lo hago :p).

Apliqué su famoso:

$ man date

Me fijé que existe el parámetro -u para el comando date, que significa tiempo universal, el cual no toma en cuenta la fecha y hora local del pais, sino que la universal.

Conclusión:
Cuando usen el comando date, sobretodo cuando vayan a sumar y/o restar tiempo a fechas, usen el parámetro -u.

Ese sería mi aporte por ahora.

Agradezco a los que cooperaron con este tema, ya que no me puedo quedar con todo el crédito yo solo, ya que para detectar el porque y las soluciones del bug (no se si sea un bug en realidad, pero suena importante y además NERD llamarlo así xD) me ayudaron algunos compañeros de trabajo, para que no se sientan si es que leen esto jeje.

Adiós =)

Á

Linux | 2 Comentarios | Trackback

Pausa en Prison Break

Martes, 30 de Diciembre 2008

Bueno, estos gringos rqs, nos tienen acostumbrados a esas pausas en las series, cuando estan en lo mejor de lo mejor.
Esta vez, le toca a prison break, mi serie favorita.
El ultimo capitulo emitido fue el capitulo 16: The Sunshine State, donde pasaron cosas muy importantes e interesantes. El capitulo 17, se emitira en primavera de USA. Eso es mas o menos hasta marzo del 2009 :(

Aca dejo una promo para no quedar tan picado.

Fuente

bye

Series | No hay comentarios | Trackback

Matar proceso en linux Automatizado

Jueves, 11 de Diciembre 2008

Bueno, hace rato que no posteo algo productivo, así que esta vez daré algunos tips muy utiles, para finalmente mostrarles un script en perl, el cual sirve para matar procesos en linux.

Supongamos que queremos matar un proceso llamado proceso.pl, entonces deberíamos primero ejecutar el siguiente comando:

$ ps -fea | grep proceso.pl
501       2374  2333  0 22:57 pts/10   00:00:00 perl proceso.pl
501       2377  2297  0 22:57 pts/9    00:00:00 grep proceso.pl

Se pueden apreciar dos procesos, el que queremos matar y además la linea de comando que ejecutamos anteriormente.
Para mejorar un poco el comando, ejecutamos lo siguiente:

$ ps -fea | grep proceso.pl | grep -v grep
501       2374  2333  0 22:57 pts/10   00:00:00 perl proceso.pl

Con eso, ya tenemos el proceso que queremos matar, entonces lo normal que uno hace, es ejecutar un kill -9 y el id del proceso a matar (el nro de la segunda columna), como se muestra a continuacion:

$ kill -9 2374

Con eso ya hemos matado el proceso.

Pero existe un comando muy simpático, llamado awk, el cual nos puede facilitar bastante muchas tareas.
Mi idea no es profundizar en el uso de este comando, para eso está: man awk, o googlear xD

Vamos por pasos.

$ ps -fea | grep proceso.pl | grep -v grep | awk '{print $2}'
2374

Con lo anterior hemos imprimido el id del proceso que queremos matar, facil no?

Ahora lo arreglamos un poquito y tenemos justo el comando que mata el proceso en cuestión:

$ ps -fea | grep proceso.pl | grep -v grep | awk '{print "kill -9 "$2}'
kill -9 2374

Ahora que tenemos el comando, como lo ejecutamos?, pues de la siguiente manera:

$ ps -fea | grep proceso.pl | grep -v grep | awk '{print "kill -9 "$2}' | sh

Listo, eso es algo de lo que se puede hacer con nuestro comando awk

Finalmente, quize automatizar un poco mas esta manera de matar procesos, y se me ocurrió hacer un script en perl, el cual recibe como parámetro el nombre del script a matar, usando claro el comando awk. El script sirve para matar uno o más procesos.

Cabe destacar que también se podría hacer el script (incluso en otro lenguaje como bash, etc) sin el uso de awk, pero la idea era mostrar el uso de dicho comando.

Bueno, finalmente les muestro el script hecho en perl, el cual podría necesitar de muchas mejoras, así que estoy abierto a cualquier duda, comentario y/o sugerencia.


#!/usr/bin/perl

# Script que recibe como parametro el nombre de un proceso para matarlo (kill -9)
# El script le pedira una confirmacion antes de matar el proceso
# by: Paul Gallegos =)

use strict;

my $proceso=$ARGV[0];
if(defined($proceso)){
chomp($proceso);
}else{
print “Debe ingresar el nombre del proceso a Matar\n”;
exit;
}

my $path_awk = `which awk`;
chomp($path_awk);
my $encontro=0;
my $p;
my $proceso_matar;
my $id_script = “ps -fea | grep $0 | grep -v grep | $path_awk ‘{print \$2}’”;
chomp($id_script);
$id_script = `$id_script`;

my $comando = “ps -fea | grep $proceso | grep -v grep | $path_awk ‘{print \$0\”\t\”NF}’”;
chomp($comando);
open(KILL,”$comando |”);
while(< KILL >){
chomp($_);
my ($proc,$nro_param) = split(”\t”,$_);
my @arreglo = split(” “,$proc);
$proc=”";
my $id=$arreglo[1];
for(my $i=7;$i<$nro_param;$i++){
$proc .= "$arreglo[$i] ";
}
$proc=~s/\s$//;
$proceso_matar=$proc;
if($proc !~ /grep/ and $id != $id_script){
print "Desea terminar el proceso: \"$proceso_matar\" (si/no/salir)? ";
my $confirmar = < STDIN >;
chomp($confirmar);
if($confirmar eq “si”){
my $matar = “kill -9 $id”;
print `$matar`;
print “Proceso Terminado\n”;
}
if($confirmar eq “salir”){
print “Abortado\n”;
exit;
}
$encontro++;
}
$proc = “”;
}
close(KILL);
print “No se encontraron Procesos\n” if(!$encontro);

Dejo el script para descargar: killProcess.pl, ya que al copiar y pegar salen algunos caracteres raros.

Otro tip antes de irme.
Yo en mi linux, tengo en mi archivo .bashrc un alias para mi script perl =), de la siguiente manera:

alias kp='directorio_del_script/killProcess.pl'

Y después se invoca el script, de la siguiente manera:

kp proceso_a_matar

Bueno, eso sería todo.

print “bye =)”;
exit;

Linux, MySQL, Perl | No hay comentarios | Trackback

Baile Familiar xD

Sábado, 06 de Diciembre 2008

Encontre muy buena esta pagina, donde se puede hacer un video muy chistoso, con un maximo de 5 personas.

Pongan play si quieren ver el resultado =)

Send your own ElfYourself eCards

La pagina es:
http://www.elfyourself.com

Varios | No hay comentarios | Trackback

Mis 10 comandos mas utilizados en Linux

Domingo, 09 de Noviembre 2008

Estos son los comandos que mas uso en la pega


144 cd
98 ls
39 ssh
37 exit
33 ps
31 vi
27 sudo
21 mv
19 scp
14 grep


Para saber los 10 comandos mas utilizados en linux, se debe ejecutar la siguiente linea en la consola:

history|awk '{print $2}'|awk 'BEGIN {FS="|"} {print $1}'|sort|uniq -c|sort -rn|head -10



El comando anterior, lo que hace es extraer información del historial, filtrarlo y ordenarlo por medio del comando awk, el cual es muy potente y se pueden hacer cosas muy simpaticas :)


Fuente

Linux, PostgreSQL | No hay comentarios | Trackback

Luna =)

Miércoles, 06 de Agosto 2008

Esta es mi perra Luna.

Subo unas fotitos para que las vea mi familia =)

Además así pruebo el efecto lightbox, que está bastante decente XD

Luna, Varios | 1 Comentario | Trackback

Backup Bases de Datos

Viernes, 01 de Agosto 2008

Hoy en dia existen infinidad de herramientas gráficas para administrar nuestras bases de datos, como por ejemplo: MySQL Administrator, phpMyAdmin (MySQL), pgAdmin III, phpPgAdmin (PostgreSQL), SQL Developer, TOAD (Oracle).

Pero hay casos en los cuales dichas herramientas no nos sirven para respaldar y restaurar nuestras bases de datos, por ejemplo cuando administramos nuestras bases de datos remotamente y generalmente no contamos con un entorno gráfico, es entonces cuando debemos recurrir a la administración de la BD por linea de comandos.

A continuación muestro un pequeño resumen de los comandos para respaldar y restaurar las BD mas conocidas, o por lo menos las que yo mas uso :)


MySQL

Respaldar

mysqldump  -B basededatos -uusuario -ppassword > archivo.sql

Restaurar

mysql -u usuario -ppassword basededatos< archivo.sql

Para ver una descripción completa del uso de parámetros:

- man mysqldump
- man mysql


PostgreSQL

Respaldar

pg_dump -U usuario -d basededatos > archivo.sql

Restaurar

psql -U usuario -d basededatos -f archivo.sql

Para ver una descripción completa del uso de parámetros:

- man pg_dump
- man psql


Oracle

Respaldar

exp usuario/password@SID FILE=archivo.dmp log=archivo.log full=y

Restaurar

imp usuario/password@SID FILE=archivo.dmp log=archivo.log full=y

Para ver una descripción completa del uso de parámetros:

- man exp
- man imp
- exp help=y
- imp help=y

Ese sería mi humilde aporte :)

Bases de Datos, Linux, MySQL, Oracle, PostgreSQL | 3 Comentarios | Trackback

Prison Break

Sábado, 26 de Julio 2008

Bueno, los que me conocen, saben que esta es mi serie favorita y no me he perdido ningún capítulo.

Yo siempre bajo esta serie de una de mis páginas favoritas www.chilewarez.cl

Pronto, entre agosto y septiembre se viene la 4ta temporada de Prison Break, y según he leido, se viene una gran sorpresa, aunque no está confirmado, pero no pienso contársela para no embarrarles la serie XD.

La dra tancredi no está muerta. XD

Y aquí la promo de la 4ta temporada:

Ese sería mi aporte.

bye

Series | 3 Comentarios | Trackback

Algunos Comandos Utiles Linux

Jueves, 24 de Julio 2008

http://pgallegos.webcindario.com/fotos/Corporate_Linux.jpg

A continuación muestro algunos comandos útiles para linux:

muestra el número de lineas de un archivo

$ wc -l archivo

muestra tamaño de un directorio (incluyendo subdirectorios y archivos contenidos)

$ du -s -h directorio

muestra particiones linux, además de espacio utilizado y disponible

$ df -h

busca los archivos que contienen una cadena (string) en un directorio especificado

$ find directorio -type f | xargs grep "cadena"

Bueno, eso por ahora, ya que tengo sueño :P

Como conclusión puedo decir que: el nano es como el pico XD

Mejor usen el editor VI :)

mas adelante publicaré mas cosillas.

bye

Linux | No hay comentarios | Trackback

Calendario


Julio 2009
L M M J V S D
« Abr.    
 12345
6789101112
13141516171819
20212223242526
2728293031  

Buscar


Categorías

Archivos por Mes

Enlaces

Menú