Archivo mensual de Febrero del 2008

Captura de pantalla

Screen Capture

Color #FABADA

Feo con dolor, pero “tan nuestro”…

#fabada

Visto en Microsiervos

Comodidad para el cliente de comandos de MySQL

Si conectamos a menudo con nuestro servidor de MySQL utilizando la utilidad del comando “mysql”, nos veremos compelidos a repetir, una y otra vez, los parámetros de conexión

mysql -u usuario -p contraseña

Podemos ahorrarnos un buen montón de tecleos si creamos un archivo ~/.my.cnf en nuestra carpeta de usuario, con el siguiente contenido:

user = usuario_mysql
password = contraseña_mysql
host = host_mysql

El cliente de mysql encontrará y utilizará de forma automática la información contenida en este fichero, ahorrándonos el tecleo constante o tener que hacernos un .sh para un proceso tan simple.

Si preferimos no indicar la contraseña en texto plano en este fichero, por seguridad, podemos dejar el contenido asi:

user = usuario_mysql
password
host = host_mysql

Y el cliente de mysql nos pedirá sólo la contraseña al conectar.

Localizar las tablas MySQL más grandes de nuestro servidor

Sólo apto para MySQL 5:

MySQL:
  1. SELECT
  2. CONCAT(table_schema,'.',table_name),
  3. CONCAT(ROUND(table_rows/1000000,2),'M') rows,
  4. CONCAT(ROUND(data_length/(1024*1024*1024),2),'G') DATA,
  5. CONCAT(ROUND(index_length/(1024*1024*1024),2),'G') idx,
  6. CONCAT(ROUND((data_length+index_length)/(1024*1024*1024),2),'G') total_size,
  7. ROUND(index_length/data_length,2) idxfrac FROM information_schema.TABLES
  8. ORDER BY data_length+index_length DESC LIMIT 10;

Lo que hace, vulgarmente, viene siendo recopilar información de la tabla TABLES de la BD INFORMATION_SCHEMA, una nueva BD por defecto en las distribuciones 5 y posteriores, que almacena información acerca de todas las tablas de todas las bds del servidor. Muy práctico para saber cual es ese cliente de nuestro servidor que se está comiendo el disco duro a golpe de almacenar basura :)

El ejemplo de resultado se explica sólo:

MySQL:
  1. +-------------------------------------+--------+--------+--------+------------+---------+
  2. | CONCAT(table_schema,'.',table_name) | rows   | DATA   | idx    | total_size | idxfrac |
  3. +-------------------------------------+--------+--------+--------+------------+---------+
  4. | art87.link_out87                    | 37.25M | 14.83G | 14.17G | 29.00G     |    0.96 |
  5. | art87.article87                     | 12.67M | 15.83G | 4.79G  | 20.62G     |    0.30 |
  6. | art116.article116                   | 10.49M | 12.52G | 3.65G  | 16.18G     |    0.29 |
  7. | art84.article84                     | 10.10M | 10.11G | 3.59G  | 13.70G     |    0.35 |
  8. | art104.link_out104                  | 23.66M | 6.63G  | 6.55G  | 13.18G     |    0.99 |
  9. | art118.article118                   | 7.06M  | 10.49G | 2.68G  | 13.17G     |    0.26 |
  10. | art106.article106                   | 9.86M  | 10.19G | 2.76G  | 12.95G     |    0.27 |
  11. | art85.article85                     | 6.20M  | 9.82G  | 2.51G  | 12.33G     |    0.26 |
  12. | art91.article91                     | 8.66M  | 9.17G  | 2.66G  | 11.83G     |    0.29 |
  13. | art94.article94                     | 5.21M  | 10.10G | 1.69G  | 11.79G     |    0.17 |
  14. +-------------------------------------+--------+--------+--------+------------+---------+
  15. 10 rows IN SET (2 min 29.19 sec)

El creador original de la función es Peter Zaitsev, de MySQL Performance Blog, antiguo Responsable de Rendimiento en MySQL Inc.

El CD de Windows que no debe faltarte

CD de Windows

Test rápidos de MySQL - Test 2

MySQL
Test 2

La tabla pruebas está definida en un servidor MySQL con modos sql no fijados:

MySQL:
  1. CREATE TABLE pruebas (
  2.    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT
  3.   );

Ahora hacemos…

MySQL:
  1. INSERT INTO pruebas (id) VALUES (NULL);
  2. SELECT * FROM pruebas WHERE id IS NULL

La pregunta es... ¿ Cual será el resultado del SELECT ?

Pulsa para Mostrar/Ocultar la solución

Traducido con permiso expreso de Mysql Test Quiz 2 Original

Creado por Carsten H. Pedersen

Otros Test anteriores:

JFGI

JFGI

Humor recursivo... :)

Nuevo motor de almacenamiento para MySQL, Maria

MySQLEn el blog de Michael Widenius podemos seguir el progreso de "Maria", el que será el sucesor del motor de almacenamiento para bases de datos más utilizado del mundo, MyISAM de MySQL. Monty, el creador de MySQL, dió el nombre a su empresa basándose en el nombre de su primera hija 'My' + SQL. Su segundo hijo, Max, dió su nombre a MaxDB y las distribuciones MySQL-Max. Su tercera hija se llama, obviamente, Maria...

Esta nueva opción viene a sumarse a Falcon, el motor en desarrollo que parece destinado a sustituir a InnoDB.

Las primeras previews están ya disponibles en:
http://dev.mysql.com/downloads/maria/index.html

Documentación y más información:
http://forge.mysql.com/wiki/Maria_Preview

Roadmap y Diseño:
http://forge.mysql.com/wiki/Maria_RoadMap_Design

Miscelánea de Tutoriales de Diseño y Desarrollo Web

CursorSin orden ni concierto:

Test rápidos de MySQL - Test 1

MySQL
He decidido incluir los MySQL Test Quizzes de Carsten H. Pedersen entre estas notas, como recordatorio y como fuente de inspiración para procesos de selección de personal a la hora de contratar gente que vaya a trabajar principalmente con MySQL. Simplemente traduciré los Test del inglés y publicaré la solución como comentario.

Test 1

- Dada la siguiente estructura MySQL

CREATE TABLE prueba (
id INT NOT NULL,
data CHAR(30) DEFAULT NULL,
UNIQUE (id, data)
);

- Y una vez ejecutado este INSERT

INSERT INTO prueba VALUES (1, NULL);

...que hace que se inserte un registro en la BD, y recordando que el ínidce UNIQUE afecta a ambas columnas, que pasa si repetimos el mismo comando INSERT de nuevo ?

¿ Cuantos registros se guardan en dicha tabla tras el segundo INSERT ? ¿ Con qué valores ?

Pulsa para Mostrar/Ocultar la solución

Traducido con permiso expreso de Mysql Test Quiz 1 Original