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.

[Lea más]
Simulando secuencias en MySQL

Quienes hemos usado PostgresSQL solemos fastidiarnos con el código que hay que escribir para tener un campo auto-numérico, pero también hemos llegado a extrañar esa característica cuando usamos MySQL.

Como sabemos MySQL, usa la propiedad AUTO_INCREMENT para campos numéricos que usamos en claves primarias.

Pero en que situaciones podemos necesitar una secuencia? pues les doy algunas ideas:

  • Cuando queremos tener mas de un campo auto-numérico en una tabla.
  • Cuando necesitamos un contador general que podemos utilizar en mas de una tabla.
  • No se me ocurren mas, pero estoy seguro que en algún momento podemos darle un uso.

Manos a la obra:

Necesitaremos una tabla para guardar el valor actual de la secuencia:

create table _sequence
(
        seq_name varchar(50) not null primary key,
        seq_val int unsigned not null …
[Lea más]
¿Cuando es necesario comprar una licencia MySQL?

Como seguramente saben, MySQL provee licenciamiento dual, puedes obtener el código fuente bajo la licencia GPL v2 o puedes comprar una licencia comercial.

Hace algunos meses he oído algunos comentarios fuera de lugar sobre el licenciamiento o sobre en que situación es necesario comprar una licencia comercial de MySQL. Escuché por ejemplo que puedes usar MySQL en todo lo que te sea útil excepto para ganar dinero, en nuestro entorno (latinoamericano) es natural llegar a una conclusión pero no es correcta.

Entonces, ¿cuando es necesario comprar una licencia comercial de MySQL? En realidad es muy simple: cuando quieres hacer algo con MySQL que la licencia GPL v2 no lo permita.

Si bien el asunto de las licencias y demás documentos legales los debería interpretar un abogado, (y debería considerar hacer una investigación legal por su propia cuenta) la mala interpretación de la licencia GPL es …

[Lea más]
SHOW PROFILE de MySQL

El EXPLAIN a primera vista puede resultar algo confuso y en joins con muchas tablas tampoco nos indica en que esta perdiendo más tiempo el MySQL. Mediante SHOW PROFILE tendremos un detalle de los tiempos de ejecución.

Para poder ver los tiempos de ejecución deberemos dejar a 1 la variable de sesión profiling:

mysql> set profiling=1;
Query OK, 0 rows affected (0.00 sec)

A continuación deberemos ejecutar las queries que queramos, pudiendo ver el resultado con SHOW PROFILE:

mysql> select id, object_id, concat(section,tag) , unix_timestamp(log_date) as thing_date from log where thing_timestamp >=  DATE_FORMAT(date_sub(CURRENT_TIMESTAMP(), interval 7 day),'%Y%m%d070000');
(...)
244606 rows in set (1.06 sec)

mysql> show profile;
+----------------------+----------+
| Status …
[Lea más]
Ver el estado de un MySQL

Para ver las queries que se están ejecutando en un MySQL se usa SHOW PROCESSLIST;, pero muchas veces no nos interesa tanto que queries se ejecutan sino la cantidad que hay para ello podemos recurrir a otra variable.

mysql> show processlist;
(...)
6 rows in set (0.00 sec)

Mediante SHOW STATUS podemos ver la cantidad de queries en ejecución con las variables Threads_%:

mysql> show status like 'Threads%';
+-------------------+--------+
| Variable_name     | Value  |
+-------------------+--------+
| Threads_cached    | 25     |
| Threads_connected | 6      |
| Threads_created   | 378847 |
| Threads_running   | 1      |
+-------------------+--------+
4 rows in set (0.00 sec)

Su significado es:

  • Threads_cached: Número de threads en la thread cache, no tiene porque coincidir con …
[Lea más]
Cambiar la contraseña de un usuario en MySQL

Existen varias formas de cambiar la contraseña a un usuario en MySQL. Podemos tanto manipular la tabla user de MySQL o usar el GRANT o SET PASSWORD.

Una opción puede ser es obtener los privilegios del usuario y repetir el GRANT con la nueva contraseña. Con el SHOW GRANTS FOR podremos verlos:

mysql> show grants for jordi@'1.1.1.1';
+------------------------------------------------------------------------------------------------------------+
| Grants for jordi@1.1.1.1                                                                                   |
+------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'jordi'@'1.1.1.1' IDENTIFIED BY PASSWORD …
[Lea más]
Percona Live London

La próxima semana comienza la Percona Live y esta vez podremos disfrutarla sin salir de Europa. Durará dos días, 24 y 25 de Octubre.

Durante el primer dia se impartirán tutoriales de diversos tema, como por ejemplo NDB o Sphinx.

http://www.percona.com/live/london-2011/schedule-tutorial/

Y el segundo día se reserva para las conferencias:

http://www.percona.com/live/london-2011/schedule-conference/

Las conferencias serán impartidas no solo por compañeros de Percona, si no también por trabajadores de empresas como Paypal, Facebook, Nokia, Couchbase o Monty Program.

Como se puede comprobar, posibilidades de aprender hay miles. Aún estás a tiempo de apuntarte

Incorrect usage of DB GRANT and GLOBAL PRIVILEGES

Al dar o revocar ciertos privilegios nos podemos encontrar con el siguiente error:

mysql > revoke super on database.* from 'luser';
ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES

Los privilegios de MySQL que no afectan a las tablas sino que son globales como PROCESS, FILE, SUPER, entre otros, no pueden ser aplicados a una base de datos o tabla mediante el modificador ON (por ejemplo ON basededatos.tabla o ON basededatos.*).

Para dar o revocar estos privilegios deberemos indicarlo para todas las bases de datos y tablas con ON *.*, por ejemplo:

mysql > revoke super on *.* from 'luser';
Query OK, 0 rows affected (0.00 sec)

Tags: …

[Lea más]
Recopilar información del SO en el momento preciso

Muchas veces los problemas que tenemos con nuestra base de datos no son continuos, si no puntuales, y ocurren generalmente cuando no estamos mirando la pantalla. Las herramientas que hoy voy a mostraron os permitirán cazar el momento exacto de un problema y recabar todos los datos posibles en ese preciso instante de tiempo.

Las dos herramientas pertenecen al Percona Toolkit. Estas toolkit incluyen lo que antes era Aspersa y Maatkit. Por lo tanto, comenzamos descargando:

Percona Toolkit Download

Dentro de el las utilidades que hoy usaremos serán:

pt-collector: es la herramienta que se lanzará cuando una condición específica se de. Entre otras cosas se encargará de recargar información sobre IO, procesos, memoria, processlist, estado de las variables en MySQL y salidas de comandos como iostat, mpstat, df, lsof. También …

[Lea más]
MySQL: Sort aborted

Cuando nos encontramos en el log del MySQL con “Sort aborted” puede significar varias cosas, deberemos ver en que caso estamos para actuar convenientemente o simplemente ignorar el error.

110930 19:12:30 [ERROR] /usr/local/mysql/libexec/mysqld: Sort aborted

El error puede aparecer en varios situaciones:

  • Si nos quedamos sin espacio en el directorio de tmp que usa el MySQL. Lo podemos ver mediante show variables:
    mysql> show variables like 'tmpdir';
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | tmpdir        | /tmp  |
    +---------------+-------+
    1 row in set (0.00 sec)
    

    Si nos hemos quedado sin espacio al hacer un sort en disco podemos ampliar la partición, crear una dedicada o bien cambiar el path del tmpdir:

    tmpdir = /var/tmp/mysql
    

    Debemos …

[Lea más]