Displaying posts with tag: DBA (reset)
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]
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]
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]
Tamaño mínimo para la indexación con FULLTEXT

Las tablas MyISAM tienen la ventaja sobre las InnoDB que pueden ser indexadas con FULLTEXT. Uno de los parámetros para indexar estas tablas es el tamaño mínimo de la palabra a indexar.

No podemos indicar esta parámetro por tabla, por lo que debemos hacer el cambio global. La variable es ft_min_word_len:

mysql> SHOW VARIABLES LIKE 'ft_min_word_len';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| ft_min_word_len | 4     |
+-----------------+-------+
1 row in set (0.00 sec)

Para cambiar dicha variable deberemos modificar el my.cnf con el nuevo valor y a continuación reiniciar el MySQL.

Una vez reiniciado podemos comprobar el nuevo valor:

mysql> SHOW VARIABLES LIKE 'ft_min_word_len';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| …
[Lea más]
Host ‘ejemplo’ is blocked because of many connection errors; unblock with ‘mysqladmin flush-hosts’

Es posible que al conectar a un MySQL recibamos el siguiente error: Host 'ejemplo' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts' La solución la tenemos en el mismo error, hacer un FLUSH HOSTS. Vamos a ver que es y que variable controla este comportamiento. La variable que controla el número máximo [...]

Recuperación de una tabla InnoDB sin borrar la actual

Anteriormente ya vimos que podemos recuperar los datos de una tabla InnoDB mediante DISCARD TABLESPACE / IMPORT TABLESPACE. El problema viene cuando queremos recuperar la tabla manteniendo la tabla anterior. Para el el caso de MyISAM es tan simple como copiar del backup los ficheros frm, MYD y MYI con otro nombre, pero esto no [...]

JOIN y STRAIGHT_JOIN en MySQL

No es muy común ver que el optimizador del MySQL se equivoque estrepitosamente de plan de ejecución, pero cuando lo hace los resultados pueden ser desastrosos. Por ejemplo, para una JOIN como la siguiente: SELECT ul.id, ul.name, s.body FROM mails as s JOIN users as ul ON s.u_id=ul.id WHERE s.domain_id = 25 ORDER BY mail_id [...]

Almacenar la salida de un comando SQL en formato CSV

El formato CSV resulta muy cómo tanto de generar como leer, por eso muchos programas lo aceptan. Se trata simplemente de valores separados por comas (Comma-Separated Values). Vamos a ver como generar un fichero desde MySQL para almacenar datos. Para generar el fichero desde un comando SQL en MySQL deberemos indicar INTO OUTFILE con el [...]

Ficheros master.info y relay-log.info de MySQL

Cuando habilitamos un slave se generan en el datadir dos ficheros con datos: master.info y relay-log.info con información relativa a la replicación: Para el caso del relay log se trata de un fichero que almacena la posición leída respecto al master y a que punto ha llegado el slave. Mediante un strings podemos ver el [...]