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.

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

Clientes para conexión remota (PuTTy, SecureCRT…)

En mis comienzos con el Telnet y SSH y las conexiones con máquinas remotas utilizaba PuTTy, una herramienta que me enseñó mi querido colega Roberto Andradas en alguna clase de EDI o MTP… jeje, qué tiempos.

Investigando en su momento descubrí PuTTy Tray, un interesante proyecto que ofrecía ciertas mejoras al tradicional cliente de PuTTy. Entre otras, transparencias, poder minimizar directamente al System Tray, mejorar la portabilidad, linkar desde PuTTy a un navegador las URLs…

En la actualidad, debido al inmenso número de máquinas que administro en el trabajo, tuve que hacer un cambio obligado de cliente SSH. Con PuTTy lo intenté, a través del PuTTy Session Manager, que proporciona una nueva ventana en la que se pueden visualizar de forma ordenada las sesiones guardadas, para acceder directamente a ellas.

Pero debido a que para acceder a ciertas máquinas tengo que saltar pasando por otras…. y PuTTy no ofrece generar scripts que automaticen esta tarea, al final tuve que recurrir al cliente SecureCRT, que aunque es de pago, ofrece bastantes mejoras para poder trabajar con varias terminales a la vez. Entre otras cosas, permite ejecutar scripts y comandos en varias ventanas a la vez… bastante útil cuando administras muchas máquinas.

En definitiva, cada cliente tiene sus ventajas e inconvenientes, dependiendo del uso que se le va a dar… por eso, es mejor ir probando cada uno, hasta encontrar el que realmente se ajuste a tus necesidades. A pesar de todo, yo sigo abriendo de vez en cuando mi querido PuTTy 🙂 .

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

Abrir varios perfiles simultáneos de Firefox

Por defecto Firefox no permite tener más de un perfil abierto a la vez, pero existen métodos para evitar este impedimento.

  • En Windows, damos clic con botón derecho del mouse en ‘Mi PC‘ y luego clic en ‘Propiedades‘. Luego vamos a ‘Opciones avanzadas‘ y damos clic en ‘Variables de entorno‘. Debemos crear una variable de entorno ‘MOZ_NO_REMOTE‘ y darle al valor 1.

A partir de ahora ejecutando firefox -p se podrá elegir el perfil con el que queremos abrir Firefox.

  • La otra opción consiste en ejecutar firefox –no-remote. Ésta funciona cualquier sistema operativo.

Fuente: ZonaFirefox.

Tunea foto en Photoshop

Dando una vuelta por Menéame apareció un foro en el que un usuario pedía que le retocaran su foto, quitando los desperfectos…etc

Alguien se quiso echar unas risas con el tema… e hizo una obra magistral…xD

Foto ORIGINAL:

retoquea

Foto RETOCADA:

retoqueb

Link del foro: http://www.elotrolado.net/hilo_alguien-que-sepa-un-poco-photoshop-me-tunea-una-foto_1247397

Desde luego hay que tener cuidado con lo que pides en los foros… hay gente con mucha chispa.