Resetear password de root en MySQL

Esto a mí me ha venido bien en algún momento, y es que no siempre recordamos o sabemos la password de root la BBDD.

En MySQL se puede resetear así:

1. Reiniciar la base de datos con la opción –skip-grant-tables:

# /etc/init.d/mysqld restart --skip-grant-tables

2. Conectarte a la BBDD con usuario root:

# mysql -u root

3. Establecer la nueva password:

mysql> UPDATE mysql.user SET Password=PASSWORD('newpwd') WHERE User='root';
mysql> FLUSH PRIVILEGES;

4. Volver a arrancar la BBDD sin –skip-grant-tables:

# /etc/init.d/mysqld restart

Heartbeats de VRRP

Post técnico de la semana.

Me he encontrado con una duda sobre cómo averiguar qué VRRPs IDs están anunciándose en una red. Esto es relativamente importante controlarlo porque si en un momento dado añades un nuevo equipo que anuncie un VRRP ya usado, se puede liar gorda.

Si tienes acceso root a una máquina que esté pinchada en esa red, puedes utilizar tcpdump para descubrir los anuncios de VRRP.

Existen 3 formas que nos devuelven el mismo resultado:

tcpdump -i <interface> host 224.0.0.18
tcpdump -i <interface> proto 112
tcpdump -i <interface> ether dst 01:00:5e:00:00:12

Donde «<>» es la interfaz de red en la que quieres chequear, «host 224.0.0.18» es el host destino del tráfico VRRP, «proto 112» es el protocolo VRRP y la MAC «01:00:5e:00:00:12» en la dirección MAC de broadcast de VRRP.

Ejemplo:

[root@host53n01:~]# tcpdump -i eth4 -i eth5 proto 112
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth5, link-type EN10MB (Ethernet), capture size 96 bytes
10:42:21.099775 IP 10.203.12.132 > 224.0.0.18: VRRPv2, Advertisement, vrid 70, prio 150, authtype none, intvl 1s, length 20
10:42:21.114600 IP 10.203.12.130 > 224.0.0.18: VRRPv2, Advertisement, vrid 202, prio 150, authtype none, intvl 1s, length 20
10:42:21.514168 IP 10.203.12.137 > 224.0.0.18: VRRPv3, Advertisement
10:42:21.514169 IP 10.203.12.137 > 224.0.0.18: VRRPv2, Advertisement, vrid 50, prio 255, authtype none, intvl 1s, length 20
10:42:21.891698 IP 10.203.12.132 > 224.0.0.18: VRRPv2, Advertisement, vrid 70, prio 150, authtype none, intvl 1s, length 20
10:42:22.114708 IP 10.203.12.130 > 224.0.0.18: VRRPv2, Advertisement, vrid 202, prio 150, authtype none, intvl 1s, length 20
10:42:22.526551 IP 10.203.12.137 > 224.0.0.18: VRRPv3, Advertisement
10:42:22.526769 IP 10.203.12.137 > 224.0.0.18: VRRPv2, Advertisement, vrid 50, prio 255, authtype none, intvl 1s, length 20
10:42:22.820480 IP 10.203.12.132 > 224.0.0.18: VRRPv2, Advertisement, vrid 70, prio 150, authtype none, intvl 1s, length 20
10:42:23.114625 IP 10.203.12.130 > 224.0.0.18: VRRPv2, Advertisement, vrid 202, prio 150, authtype none, intvl 1s, length 20
10:42:23.513211 IP 10.203.12.137 > 224.0.0.18: VRRPv3, Advertisement
10:42:23.513213 IP 10.203.12.137 > 224.0.0.18: VRRPv2, Advertisement, vrid 50, prio 255, authtype none, intvl 1s, length 20
10:42:23.577365 IP 10.203.12.132 > 224.0.0.18: VRRPv2, Advertisement, vrid 70, prio 150, authtype none, intvl 1s, length 20
10:42:24.114488 IP 10.203.12.130 > 224.0.0.18: VRRPv2, Advertisement, vrid 202, prio 150, authtype none, intvl 1s, length 20
10:42:24.387004 IP 10.203.12.132 > 224.0.0.18: VRRPv2, Advertisement, vrid 70, prio 150, authtype none, intvl 1s, length 20

Filtrar por VRRP ID específico

Cada grupo de máquinas que participan en un VRRP tienen un VRRP ID asignado. Éste debe ser único por grupo de máquinas y por interfaz. Si quieres escuchar los heartbeats específicos de un VRRP ID, tienes que ejecutar:

tcpdump -i <interface> ether src 00:00:5e:00:01:

Donde «<VRID>» es el VRRP ID en hexadecimal.

Montar un host FTP como partición de Linux

ftpHace un tiempo contraté un hosting web y a no ser que contrates algo que se va de precio, el acceso suele ser a través WEB o a través del protocolo FTP. Esto es bastante coñazo si cada vez que modificas un fichero, tienes que tener algún software cliente de FTP subiendo y bajando continuamente.

A este problema, le he encontrado 2 soluciones:

  • Usar un editor que soporte la edición vía FTP. Por ejemplo, ultraedit.
  • Crear una partición en Linux que sea montaje del servidor FTP.

En este post os voy a explicar el segundo caso. Para ello necesitamos el software curlftpfs. Si no lo tienes instalado, ejecuta:

# sudo aptitutde install curlftpfs

Esta aplicación se encarga de hacer transparente la gestión de ficheros por FTP, de modo que a nivel de usuario, es como si estuvieras manejando los ficheros en local. La única diferencia es que se nota que las acciones de abrir un fichero, o grabarlo tardan más de lo normal, ya que al realizar esa acción internamente curlftpfs está realizando un GET o un PUT vía FTP.

Al lío, para crear un punto de montaje, basta con crear un directorio donde vayamos a montar el FTP:

# mkdir /punto/de/montaje

y ahora ya podemos ejecutar:

# curlftpfs ftp://servidorftp.algo /punto/de/montaje

En caso de que el FTP tenga usuario y password:

# curlftpfs ftp://usuario:password@servidorftp.algo /punto/de/montaje

El puerto habitual de FTP es el 21, pero a veces es diferente. Esto se podría indicar así:

# curlftpfs ftp://servidorftp.algo:numeroDePuerto /punto/de/montaje

y podemos realizar una combinación de todas las opciones:

# curlftpfs ftp://usuario:password@servidorftp.algo:numeroDePuerto /punto/de/montaje

De este modo podemos visualizar, editar, borrar los ficheros de forma transparente a las transacciones FTP. Para desmontar, se ejecutaría el siguiente comando:

# sudo umount -l /punto/de/montaje

Si tenéis cualquier duda o comentario, sois bienvenidos!

Table is marked as crashed and should be repaired

Hace poco me encontré un error en una aplicación que tengo con Perl en la que realiza SELECTs, DELETEs y UPDATEs en una BBDD MySQL.

El error lo provocaba MySQL e indicaba lo siguiente:

Error    : Table './base_de_datos/nombre_de_tabla' is marked as crashed and should be repaired

Esto se puede solucionar de varias maneras. En esta entrada describiremos cómo solucionarlo utilizando las herramientas que proporciona MySQL.

Utilizando el comando «mysqlcheck» chequea y repara si está corrupta:

[root@host01]# ./mysql/bin/mysqlcheck --auto-repair base_de_datos nombre_de_tabla -u usuario -p
Enter password: 
base_de_datos.nombre_de_tabla
warning  : Table is marked as crashed
warning  : 4 clients are using or haven't closed the table properly
error    : Record-count is not ok; is 112323   Should be: 112803
warning  : Found 33620 deleted space.   Should be 0
warning  : Found 480 deleted blocks       Should be: 0
error    : Corrupt

Es conveniente hacer backup de la BBDD antes de hacer cualquier cambio.

Ya tenemos Dropbox para Android!

Después de tenernos a la espera… ya está disponible Dropbox en el Android Market. Se trata de una gran noticia de la que podrán disfrutar los usuarios de este magnífico disco duro virtual.

Y es que Dropbox, para los que no lo conozcan, es un servicio de alojamiento de archivos multiplataforma y gratuito. Este servicio permite a sus usuarios almacenar y sincronizar ficheros entre computadoras. Con instalar un cliente para Windows, Linux, MacOS, iPhoneOS y ahora Android puedes acceder a los ficheros que están en el servidor de Dropbox. Además, desde la interfaz web también es posible acceder a nuestros ficheros sin necesidad de tener que instalar el cliente. Gran utilidad, desde luego.

Dropbox ofrece un servicio gratuito con 2 GB, pero podemos llegar a tener 8 GB invitando a otros a usar este servicio. Se puede optar a tener más tamaño 50 GB ó 100 GB pagando una cuota al año. Os animo a utilizar este fantástico servicio.

Commandlinefu

Hace un tiempo descubrí la web commandlinefu.com y resulta que ahora es una de las páginas que más visito.La idea de la web es, como todas las buenas ideas, muy simple: Se trata de un portal en el que los usuarios pueden añadir comandos de Unix/Linux y éstos son votados por el resto de usuarios. Entre otras, permite las siguientes opciones:

  • Mostrar el resultado de una ejecución del comando con Show sample output.
  • Añadir comentarios al comando.
  • Añadir el comando a la lista de favoritos que puede tener cada usuario.
  • Añadir un comando alternativo que realice la misma función.
  • Indicar que el comando el malicioso.

Permite ordenar los comandos de distintas formas. Según los votos recibidos en un período de tiempo, o según la antiguedad del comando en la web. Permite variar el período de tiempo de nuestra elección de orden.

Os recomiendo que visitéis directamente los comandos más votados, donde yo he encontrado joyas como:

# mtr, better than traceroute and ping combined
mtr google.com
# Serve current directory tree at http://$HOSTNAME:8000/
python -m SimpleHTTPServer
# Runs previous command replacing foo by bar every time that foo appears
!!:gs/foo/bar

Además cuenta con una fantástica API que aparte de ser sencilla, permite acceder a los contenidos desde la propia consola:

$ curl http://www.commandlinefu.com/commands/browse/sort-by-votes/plaintext

Cómo resetear un autoincremental en MySQL

En las BBDD es típico utilizar la función de autoincrementar las claves primarias de las tablas. De este modo se consigue que se vaya incrementando el campo en cada nueva tupla.

Si necesitamos borrar la tabla, y que además este valor se resetee, para volver a comenzar con 1, la opción más sencilla es ejecutar la siguiente sentencia:

TRUNCATE nombre_tabla;

Con esto conseguimos vaciar la tabla, como si hubieramos hecho de nuevo el CREATE TABLE.

Si lo que necesitamos es hacer que el valor autoincremental tome un valor determinado es posible utilizar la siguiente sentencia, que establece un valor para la siguiente tupla.

ALTER TABLE nombre_tabla AUTO_INCREMENT=1

Con esto conseguimos resetear el campo autoincrementable. Ojo, si existen registros con el valor que hemos asignado, continuará por el último…

Fuente.

Ver MAC de interfaz de red en Linux

Existe una forma interesante para poder sacar la MAC asociada a una interfaz de RED. Hay un fichero que tiene almacenada la MAC de la interfaz de Red, y existen tantos ficheros de este estilo, como interfaces de red tenga la máquina.

El fichero en cuestión es: /sys/class/net/eth0/address, donde eth0, identifica la interfaz de red.

Ejemplo:

[10:47:19 root@coloso01:~]# cat  /sys/class/net/eth0/address
00:14:5e:2a:55:c0

Setencias MySQL directamente desde la terminal

Hoy he descubierto un modo interesante, y sobretodo ágil para ejecutar sentencias de MySQL directamente en la terminal de comandos del SSOO, sin tener que estar dentro del propio sistemas de gestión de BBDD.

La sentencia en concreto sería:

[root@host01:~]# mysql -umiusuario -pmipassword -e 'select * from mi_tabla where fecha > "2009-09-17 17:00:00";' mi_base_de_datos

donde:

  • -u: indica el usuario de acceso a la BBDD.
  • -p: indica la password de acceso a la BBDD.

El único problema que le veo a esto, es que en el histórico se quedan almacenados tanto el usuario como la password de la BBDD, lo cuál puede ser un agujero de seguridad…

Para evitar que en el histórico se quede almacenada la password de la BBDD, es posible no indicar la password en el propio comando y que el propio MySQL la pida posteriormente de esta forma:

[root@host01:~]# mysql -umiusuario -p -e 'select * from mi_tabla where fecha > "2009-09-17 17:00:00";' mi_base_de_datos

El problema es que este comando no nos valdrá para usarlo en scripts.

Logear mensajes personales en el /var/log/messages

Para logear mensajes personales en el fichero /var/log/messages puedes usar la herramienta logger de unix.

Un ejemplo sencillo sería:

logger Esto es una prueba cutrecilla

y podrías observar el resultado así:

tail -20 /var/log/messages

Puedes incluso poner más información (Esto tiene que ser incluído en el código de un bash script):

logger -t `basename $0` i am still testing

Fuente