Simplificar el acceso a MySQL CLI

¿No les ha dado pereza escribir, en la linea de comando, todo lo necesario para conectarse a un servidor MySQL?

Puede que tome menos de un minuto, pero algunas veces un minuto es vital (sobre todo si estamos cerca del fin del mundo).

ubuntu@ubuntu$ mysql -u root -p -h mysqlhost [base_datos]

 

Cuando uno esta apurado, estos comandos suelen fallar varias veces por minuto.

La solución: podemos ayudarnos creando atajos con alias en el archivo ~/.bashrc:

#archivo ~/.bashrc

#comando "my" para conectarse a un servidor local
alias my="mysql -u root -p"

#comando "my2" para conectarse a un servidor remoto
alias my2="mysql -u root -p  -h 192.168.1.56"

 

La proxima vez que queramos acceder al servidor local solo tendremos que escribir en la linea de comando my [base_datos], solamente nos pedirá el password del servidor.

Podemos ser mas osados y dejar el password en el mismo comando alias:

#archivo ~/.bashrc

#comando "my" para conectarse a un servidor local
alias my="mysql -u root --password=tupwd"

#comando "my2" para conectarse a un servidor remoto
alias my2="mysql -u root --password=tuotropwd  -h 192.168.1.56"

 

Pueden usar los acronimos que prefieran, para mi my y my2 son cortos y útiles.

Cada vez que quiero una linea de comando MySQL sólo tengo que cargar una nueva terminal (Super + T), escribir «my mi_base» y [enter]!

Ahora se presenta otro problema, como saber en que servidor me encuentro?

El acceso puede ser super veloz con los accesos directos via alias, pero todas las terminales tienen el mismo prompt por defecto: mysql> y no hay muchas luces a primera vista para saber en que conexión estamos. Para evitar desastres (por ejemplo ejecutar DROP en el lugar equivocado) podemos cambiar el prompt de la linea de comando de MySQL con la opcion --prompt, entonces, nuestra configuración finalmente quedará así:

#archivo ~/.bashrc mejorado

#comando 'my' para conectarse a un servidor local
alias my='mysql -u root --password=tupwd --prompt="local> "'

#comando "my2" para conectarse a un servidor remoto
alias my2='mysql -u root --password=tuotropwd  -h 192.168.1.56 --prompt="server 1> "'

 

Espero les sirva!

Como hacer ping desde PHP

Cuando queremos «hacer algo» con algún equipo de nuestra red y éste no responde es por que probablemente este apagado/desconectado/colgado/etc, ping es lo primero que ejecutamos para confirmar nuestras sospechas.

Pero, y si hemos preparado un script para «hacer algo» (como sacar un backup) periódicamente debemos asegurarnos que el equipo esta conectado y encendido antes de meter la pata.

Muchos de los scripts que he desarrollado usan php-cli, me parece mas amigable que bash por que además puedo leer y escribir en bases de datos y también usar ncurses, es una maravilla!

Intentando con varios métodos, finalmente tengo algo que es de utilidad para determinar si un host esta «vivo» mediante un ping desde PHP:

getMessage();
}
else
{
    $ping->setArgs(array('count' => 1)); //Envios = 1
    $result = $ping->ping($host);

    if($result->getReceived() == 1 )  //Si recibimos lo 
    {
          echo "El equipo esta encendido!";
    }
    else
    {
          echo "El equipo esta apagado!";
    }
}
?>

Antes necesitamos tener instalado php-pear y Net_Ping:

ivancp@ubuntu~$ sudo apt-get install php-pear
ivancp@ubuntu~$ sudo pear install Net_Ping

Espero les sirva!

Ubuntu: Montar un directorio compartido automaticamente

Los usuarios Windows conocemos a la perfección como montar una unidad de red, pero en Linux la cosa es un tanto mas complicada, pero no difícil.

La primera opción que tenemos es abrir directamente la dirección: Presionamos Ctrl+L en Nautilus (o algún otro explorador de archivos) y escribimos:

smb://[ip_del_host]/carpeta/

Seguramente nos pedirá un usuario, contraseña y listo. Prefiero esta forma, a menos que no sepa el nombre/IP del host y esperar unos segundos mas a que descubra todos los hosts disponibles si es que llega a descubrirlos todos.

En el caso que queramos tener esa carpeta disponible cada vez que inicie Ubuntu tenemos que agregar una linea en el archivo /etc/fstab:

//192.168.1.45/ruta /media/carpeta_win  cifs  username=win_user,password=win_pass,rw,iocharset=utf8  0 0

Explico punto por punto:

  • //192.168.1.45/ruta Es la ruta de la carpeta remota, en caso de que se trate de una unidad de disco podemos poner //192.168.1.45/d$ , en general si es una carpeta oculta es necesario poner el signo de dolar al final.
  • /media/carpeta_win Es la carpeta local sonde va a montarse la carpeta remota, esta carpeta debe existir, pueden elegir otra ubicación para esta carpeta, eso queda a gusto de ustedes.
  • cifs Es el parametro que indica el sistema de archivos que vamos a montar, en este caso: Common Internet File System que tiene estos parámetros: (separados por comas)
    • username=win_user Nombre de usuario de la carpeta compartida (si lo requiere)
    • password=win_pass Password del usuario de la carpeta compartida
    • rw Indica que vamos a montar en lectura y escritura, para solo lectura es:  ro
    • iocharset=utf8 Indica que vamos a utilizar nombres con UTF8, con el que podremos ver los archivos con caracteres especiales como Imágenes, Mi Música

Es todo, para poder comprobarlo solo tienen que reiniciar el sistema y ver que pasa.

Si quieren montar la carpeta remota manualmente pueden ejecutar:

ivancp@ubuntu$ sudo mount -t cifs\ 
     -o username=win_user,password=win_pass,rw,iocharset=utf8 \
     //192.168.1.45/ruta /media/carpeta_win

Si hay algún problema deben ver los últimos mensajes de error con:

dmesg | tail

Nota: anteriormente se utilizaba smbfs como sistema de archivos, ese sistema de archivos se ha dejado de utilizar.

Espero les sirva!

Mi archivo .vimrc

Ha sido duro aprender a usar vim, sinceramente no es facil, pero cuando uno se acostumbra a la forma de trabajo de éste poderoso editor no puedes dejar de usarlo. No uso otro editor de texto a menos que sea completamente necesario, los archivos que son mas frecuentes para mi son archivos fuente de C/C++, PHP, Python, Texto plano, HTML, Bash, y archivos de configuración de Ubuntu.

Existen muchos editores para programar como Netbeans, Codeblocks, etc, etc… pero por alguna razón prefiero usar vim.

Quiero compartir con ustedes parte de mi archivo .vimrc que es cargado cuando el editor es invocado. Puede contener todo lo que necesiten, podría considerarse como un archivo de configuración, aquí les dejo mi archivo comentado.

"Habilitar el resaltado de la sintaxis
syntax enable

"Para que los tabs no ocupen mucho espacio
set shiftwidth=4
set tabstop=4

"Si estamos usando gVIM entonces cambiamos el
"esquema de colores (no me agrada el fondo blanco)
if has("gui_running")
	colorscheme torte
endif

"Muestra los comandos que estamos por ejecutar (para evitar desastres)
set showcmd

"Habilita la sangría automática para archivos fuente
autocmd BufRead,BufNewFile *.c,*.cpp,*.h,*.php,*.htm,*.html set cindent

"Plantillas de archivos: podemos tener archivos fuente como plantillas
"de tal modo que nos ahorramos en escribir unas cuentas lineas de codigo
"por ejemplo si creamos un nuevo archivo .cpp cargamos un Hola mundo

autocmd BufNewFile *.cpp 0read ~/apps/confs/template.cpp
autocmd BufNewFile *.php 0read ~/apps/confs/template.php

"Para ver los números de linea
set number

El archivo no esta completo, por que tengo varias funciones implementadas que amerita otro post.

MySQL: show table status mejorado

Desde la línea de comando ciertamente tenemos el control absoluto (siempre y cuando tengamos los privilegios) pero no siempre tenemos una visión general. En este caso cuando estamos logueados a una base de datos MySQL lo primero que solemos intentar averiguar es la lista de tablas y talvez la lista de funciones y procedimientos almacenados de una base de datos.

Este proceso suele ser doloroso por que en cuanto ejecutamos show table status; nos devuelve unas lineas que hasta da pereza interpretar. Lo que devuelve ese comando contiene varias columnas que vistas desde una herramienta visual como MySQL Workbench tienen mucho sentido, sin embargo desde la linea de comando no tanto. Pueden ver en la siguiente imagen como se ve un resultado en una ventana estándar de 80×25:

Para ver el detalle completo podemos agrandar la ventana y disminuir la fuente, pero suele tomar un poco de tiempo hacer eso, realmente es fastidioso.

Es por eso que hace mucho desarrollé un script para mostrar solo lo que necesito incluyendo a los procedimientos almacenados y funciones, recién esta semana que tengo  varias horas de ocio y puedo compartirla con ustedes.

El resultado de mi script es mucho mas comprensible:

Éste es código fuente del procedimiento almacenado:

DELIMITER $$

CREATE PROCEDURE `tools`.`sp_status`(dbname varchar(50))
BEGIN 

-- Obteniendo informacion de las tablas
SELECT
 TABLE_NAME as `Table Name`, 
 ENGINE as `Engine`,
 TABLE_ROWS as `Rows`,
 CONCAT(
    (FORMAT((DATA_LENGTH + INDEX_LENGTH) / POWER(1024,2),2))
    , ' Mb')
   as `Size`,
 TABLE_COLLATION as `Collation`
FROM information_schema.TABLES
WHERE TABLES.TABLE_SCHEMA = dbname; 

-- Obteniendo las funciones y procedimientos
SELECT ROUTINE_NAME as `Routine Name`, 
 ROUTINE_TYPE as `Type`,
 DATABASE_COLLATION as `Collation`
FROM information_schema.ROUTINES
WHERE ROUTINE_SCHEMA = dbname
ORDER BY ROUTINES.ROUTINE_TYPE, ROUTINES.ROUTINE_NAME;
END$$

Para invocarlo pueden escribir:

mysql> call tools.sp_status(database());

Notarán que he creado el procedimiento dentro de la base de datos tools, esto para que puedan llamarlo desde cualquier parte. Lamentablemente dentro de los procedimientos almacenados no es posible determinar la base de datos actual, es por eso que necesita de un parámetro con el nombre de la base de datos.

He publicado el procedimento en MySQL custom show table status

Espero que les sea de mucha utilidad (como a mi).

`

Ubuntu: gnome-settings-daemon ocupa el 100% del procesador!

Ubuntu linux logoEstoy muy contento de haber cambiado a Ubuntu desde hace años (gracias a Waltico por ayudarme a tomar la desicion), lo que puedo resaltar (para éste post) es que mi modesta Laptop se mantiene fria con menos del 30% del procesador usándose casi todo el tiempo (salvo excepciones como algunos procesos por lotes o juegos). Tengo 3Gb de memoria y – tambien- casi siempre hay el  60-80% disponibles.

Hay decenas de ventajas (y algunas desventajas) que puedo mencionar, pero… en este momento quiero chancar a Ubuntu y decir: ¿por qué diablos el proceso gnome-settings-daemon ocupa el 100% del procesador? esto ocurre muy eventualmente pero hoy se pasó ocurrio 3 veces desde la madrugada de hoy. Me doy cuenta cuando empieza a calentar el lado izquierdo de mi maquina y el ventilador empieza a sonar haciendo su trabajo.

Solución: No recuerdo donde lo leí pero lo descubrí por mi mismo accidentalmente… no es una solución en sí es solamente un aliciente para que pare de sufrir nuestro procesador, por que si intentan matar ese proceso, perderán muchas características y tendrán que reiniciar, esta es la solución:

  1. Abrir Sistema -> Preferencias -> Teclado
    (yo prefiero gnome-do -> escribir T, E y listo)
  2. Restablecer los valores predeterminados, cerrar y esperar a que ocurra el milagro.
  3. Si esto no funciona, volver a añadir el idioma del teclado adicional que tienen configurado.

Molesta tener que hacer esto incluso si es muy eventualmente, pero no todo es perfecto… a todo esto… Ubuntu 11.04 esta cerca, solo faltan unos dias, veamos que nos espera con la nueva version lo unico molestoso es la migracion, la ultima vez me fue muy bien hice un script para mudar todo y no perdí casi nada, con Ubuntu 11.04 voy a hacer lo mismo.

Descomprimir archivos de un rpm

Seguramente muchos de ustedes han necesitado de algun archivo que esta contenido en un RPM y no han encontrado la manera de extraerlo.

Existe un programita llamado rpm2cpio. Por ejemplo lo que yo quise hacer es extraer los archivos del manual de MySQL en formato HTML de MySQL-server-4.1.12-1.i386.rpm

El comando para hacer esto es ubicar el archivo RPM y ejecutar:

rpm2cpio MySQL-server-4.1.12-1.i386.rpm | cpio -icduv *.htm

Y listo!

Esto extraera los archivos indicados en la carpeta actual incluyendo directorios.

Los argumentos de cpio:

i : Extrae los archivos
c : Formato portable
d : Crear directorios completos
u : Incondicional (reemplaza los archivos si existieran)
v : Muestra los archivos descomprimidos en pantalla