Beitrags-Archiv für die Kategory 'Linux'

Extraer tabla de un dump en MySQL

Friday, 22. May 2009 13:46

Una pequeña receta que nos ha tocado hoy hacer en el curro. A veces necesitamos recuperar de un dump de mysql, los datos de una tabla. En este caso, el script que nos ocupa, recupera de un full dump, una tabla completa, con su definición, aunque sería relativamente sencillo recuperar solo los datos (INSERT):

#!/bin/sh
if [ $# -lt 1 ]; then
echo "Use: $0 table_name [filename]"
exit 1
fi

sed -n "/structure for table \`$1\`/,/UNLOCK TABLES/p" $2

Se puede invocar de dos formas:

extract_table.sh nombre_de_tabla fichero_con_el_dump

o

cat fichero_con_el_dump | extract_table.sh nombre_de_tabla
zcat fichero_con_el_dump.gz | extract_table.sh nombre_de_tabla

Un saludo

Thema: Linux, MySql, Receta | Kommentare (0) | Autor: Iñaki

Mi correo no es un ftp

Friday, 22. May 2009 13:23

Existe una creciente oleada de personas dispuestas a quejarse porque cuando mandan ficheros de tropecientos megas, el servidor de correo no va bien. Señores, señoras, el correo no es un ftp. Uno al final se cansa de recibir mensajes enormes y muchos de ellos, inútiles. Así que os dejo una pequeñ receta de procmail para evitar saturaros la cuenta con ppt y demás familia:

# MAXMSG = bytes del mail
MAXMSG=14680064
NL="
"
:0
* $ > $MAXMSG
{
LOG="Mi correo no es un ftp${NL}"
EXITCODE=69
HOST
}

Saludos

Thema: Linux, Receta | Kommentare (0) | Autor: Iñaki

MySQL CMDBA – Certificándose

Wednesday, 15. April 2009 16:20

Hace tiempo comenté que estaba detrás de la certificación y por fin le pude dedicar tiempo. El resultado, por fin tengo mi certificación y va en camino la de clustering (CMCDBA). Y cómo no, el honor de aparecer en la web de MySQL

Para no repetir contenido, os dejo un enlace comentando un poco el examen (el DBA I, porque el DBA II fue igual). Os animo a sacaros la certificación, la verdad es que aprendí bastante cosas que no sabía. No sé cómo serán los cursos, en mi caso, dado que necesitaba esta certificación para acceder a la de clustering, lo hice por libre, pero si podéis permitíroslo (que lo paga la empresa, hombre) seguro que os podrán ayudar a pasarlo sin problemas.

Ahora, unas semanas de “relax” y a por la de clustering. Y si alguno va a ir al curso de alta disponibilidad que organiza Warp, allí nos veremos.

Saludos

Thema: Linux, MySql | Kommentare (0) | Autor: Iñaki

Restaurar password de root en MySQL

Thursday, 13. November 2008 9:58

Leo vía http://code.openark.org/blog/?p=102 un par de formas de restaurar la contraseña de MySQL. Normalmente siempre se suele usar con la opción –skip-grant-tables y se recomienda usar --init-file con la instrucción que cambie la contraeña.

En debian tenemos otra forma de hacerlo que no requiere reinicio. Por defecto, en la instalación de MySQL se añade el usuario debian-sys-maint para la reparación de las tablas en background en el inicio. La contraseña varía de instalación en instalación y podemos verla en el fichero /etc/mysql/debian.cnf.


[client]
host = localhost
user = debian-sys-maint
password = xxxxxxxxxxxxxxxxxx
socket = /var/run/mysqld/mysqld.sock

Para acceder de forma rápida, podemos escribir en la consola:


mysql -u debian-sys-maint -p$(grep -m 1 "^password" /etc/mysql/debian.cnf | cut -d' ' -f3)

Y ya puestos, meterlo en nuestro .bashrc como un alias:


alias mysql-debian="mysql -u debian-sys-maint -p$(grep -m 1 "^password" /etc/mysql/debian.cnf | cut -d' ' -f3)"

Como contrapartida, el fichero debian.cnf solo puede leerlo el root por lo que no sería mala idea tener una copia o modificar el alias para que se ejecute con sudo.

Thema: Linux, MySql | Kommentare (0) | Autor: Iñaki

Limitar descarga de apt-get

Thursday, 3. July 2008 2:27

Mis compañeros se quejan a veces de que no pueden ver videos de youtube porque algún desaprensivo está usando la adsl de la oficina para actualizarse su Debian. Que falta de respeto. Buscando enmendar tal afrenta, encontré la manera de limitar el ancho de banda que usa apt-get para descargarse los paquetes:


# apt-get install trickle
# dpkg-divert --local --rename /usr/lib/apt/methods/http
# echo '#!/bin/sh' > /usr/lib/apt/methods/http
# echo 'RATE=100' >> /usr/lib/apt/methods/http
# echo '/usr/bin/trickle -s -d $RATE /usr/lib/apt/methods/http.distrib' >> /usr/lib/apt/methods/http
# chmod 755 /usr/lib/apt/methods/http

Esto es posible gracias a trickle, una aplicación que nos permite gestionar el ancho de banda tanto de subida como de descarga. La aplicación funciona en espacio de usuario, por lo que no es necesario tener privilegios de root para usarla en otras aplicaciones. Por lo que se puede leer en su man, parece funcionar "suplantando" las funciones de gestión de sockets del sistema.

Referencia:

http://ubuntuforums.org/showthread.php?t=20342

Thema: Debian, Linux, Receta | Kommentare (0) | Autor: Iñaki

Registrando robots de búsqueda en Apache

Wednesday, 3. October 2007 12:56

Hace unos días, un cliente me comentó su necesidad de loguear las entradas de los robots de búsqueda en un fichero aparte, para después procesarlas. Como me resultó novedoso el tema (en tanto que nunca he hecho algo parecido) me decidí a escribir un post. También han ayudado factores como recordarme que si me pagan el dominio, lo podría ir usando. Melón.

Vamos a ponernos en faena. Apache tiene una directiva para definir variables de entorno en función de una serie de condiciones. Me refiero a la directiva SetEnvIf. Para nuestro ejemplo también nos valdría BrowserMatch pero opté por la primera por ser más genérica. Simplificaré un poco el montaje (mi cliente tenía varios dominios virtuales). En nuestro caso lo vamos a hacer con mi dominio, por ejemplo.

Lo primero que tenemos que hacer es abrir el fichero donde definimos nuestro virtualhost. Sobre la línea que define el CustomLog escribimos:

SetEnvIf User-Agent bot is_a_robot
CustomLog /var/log/apache2/robots_access.log combined env=is_a_robot

Estas dos líneas sirven para definir la variable is_a_robot y activar el log en caso de que esa variable de entorno exista (con el tipo de log combined)

Fácil ¿no? Ya para terminar y rizar el rizo, hice un pequeño script en perl para separar cada bot en un fichero. Os lo pego aquí mismo (y os incluyo un enlace de paso aquí)

#!/usr/bin/perl

#
# Iñaki Rodriguez (2007)
#
# Split robots in separate files (using md5 as filename)
#
# License: GPL

use Digest::MD5 'md5_hex';

my $robot_log = '/var/log/apache2/robots_access.log';
my $output_dir = '/var/log/apache2/robots/';
my %bots;

open BOTLOG, "<$robot_log" or die ("$robot_log: I can't open it");
open INDEX, "<".$output_dir."index.txt";

while() {
    chomp();
    my ($md5,$ua) = split(/\t/);
    $bots{$md5} = $ua;
}
close(INDEX);

while() {

    chomp();
    m/^(.+?) (.+?) (.+?) (\[.+?\]) (".+?") (\d\d\d) (.+?) (".+?") (".*")$/;
    my $md5 = md5_hex($9);
    my $tmpf = $output_dir.$md5.".log";
    open LOG,">> $tmpf" or die ("$tmpf: I can't write it");
    print "Adding entry to $tmpf ($9)\n" if ($ARGV[0] ne '-q');
    $bots{$md5} = $9 if (!$bots{$md5});
    print LOG $_."\n";
    close(LOG);
}

close(BOTLOG);

open INDEX, ">".$output_dir."index.txt" or die($output_dir."index.txt: I can't create it");
foreach $md5 (keys %bots) {
    print INDEX $md5."\t".$bots{$md5}."\n";
}
close(INDEX);

Solo comentar un par de cosas del script. La variable $output_dir especifica el directorio donde va a guardar los logs por separado. En este mismo directorio se creará un fichero index.txt que guarda la correspondencia de cada log con su user agent. El nombre del fichero es la suma md5 del campo User Agent del log. Por último la variable $robot_log es la que establece el fichero donde se almacenan los registros de todos los robots.

Se podría mejorar. Invito al lector a añadir:

  • Registro de la última entrada para no duplicarlas
  • Exclusiones

Y hasta aquí el post del día.

Nota Mental: Arreglar el css que se descuadra (el theme no es mío)

Thema: Linux, Perl, Receta, apache | Kommentare (0) | Autor: Iñaki