MySQL Proxy 0.5.0

Hace una semana MySQL presentó una versión alpha de un nuevo producto relacionado con el sistema gestor open source más usado: MySQL Proxy 0.5.0 alpha.

MySQL Proxy es un sencillo programa que se sitúa entre tu cliente y el servidor o servidores MySQL, pudiendo monitorizar, analizar y transformar la comunicación entre ellos. Esta flexibilidad permite implementar un gran número de casos de uso, por ejemplo:

* balanceo de carga
* failover
* análisis de consultas
* filtrado y modificación de consultas
* … y mucho otros

Es posible encontrar documentación del producto en MySQL Forge .
La versión 0.5.0 alpha de MySQL Proxy está disponible en código fuente y binario para un gran número de plataformas aquí.

Cómo recuperar el password de admin en MySQL

Recientemente, instalando una aplicación para la gestión de reservas, me llevé la desagradable sorpresa de que en el script SQL de carga de datos, se eliminaban los permisos del usuario root y los dejaba con los mínimos posibles (visualizar tablas y editarlas, pero sin poder crear nuevas BBDD, ni usuarios, ni tablas, ni…) O sea, un desastre. Pero buscando en Internet, encontré la forma de recuperar todos los permisos del usuario root. Incluso se puede usar el método que describo a continuación para resetear el password de root en MySQL a otro que conozcamos (por si se nos olvida el original).

Lo primero, parar/matar los procesos de MySQL que ya estén en marcha:

 /etc/init.d/mysql stop

Relanzar el servidor MySQL, PERO indicándole que no tenga en cuenta ninguna gestión de permisos
(¡via libre!)

  /usr/bin/mysqld_safe --skip-grant-tables &

Conectar con MySQL, SIN password, a la BBDD principal de gestión (que lleva el nombre mysql)

mysql -h your_hostname mysql

Darle permisos al root para TODO. Indicar el nuevo password:

mysql

update user

set Select_priv='Y',

          Insert_priv='Y',

          Update_priv='Y',

          Delete_priv='Y',

          Create_priv='Y',

            Drop_priv='Y',

          Reload_priv='Y',

        Shutdown_priv='Y',

         Process_priv='Y',

            File_priv='Y',

           Grant_priv='Y',

      References_priv='Y',

           Index_priv='Y',

           Alter_priv='Y',

         Show_db_priv='Y',

           Super_priv='Y',

Create_tmp_table_priv='Y',

     Lock_tables_priv='Y',

         Execute_priv='Y',

      Repl_slave_priv='Y',

     Repl_client_priv='Y',

     Create_view_priv='Y',

       Show_view_priv='Y',

  Create_routine_priv='Y',

   Alter_routine_priv='Y',

     Create_user_priv='Y'
     Password = PASSWORD('contraseña')
WHERE User='root';

Recargar los nuevos privilegios:

 FLUSH PRIVILEGES;

Salir del cliente MySQL. Parar MySQL y volverlo a lanzar normal:

 /etc/init.d/mysql start

Bufff! menos mal que existe este método 🙂

10 consejos para optimizar las consultas en MySQL

Justin Silverton, en su blog When Penguins Attack nos muestra 10 puntos que podríamos seguir para optimizar el rendimiento de nuestras querys MySQL. En resumidas cuentas:

1. Usar el comando EXPLAIN

2. Usar estructuras de permisos menos complejas

3. Usar el comando benchmark para medir el rendimiento de algunas funciones mysql específicas

4. Optimizar las cláusulas where

5. Ejecutar el comando optimize para defragmentar las tablas

6. Evitar columnas con tipo de datos de longitud variable allá donde se pueda

7. Usar inserciones con retardo (insert delay, o escritura perezosa)

8. Usar sentencias de prioridad (ej: INSERT LOW_PRIORITY )

9. Usar inserts de múltiples filas en lugar de múltiples inserts individuales
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
10. Seguir estudiando a través de vídeos como éste 🙂

Actualización de MySQL 4 a MySQL 5

Acabo de actualizar mi sistema Linux de Fedora Core 4 a Fedora Core 6. Aparte de un problemilla con la actualización del GRUB que he resuelto en el primer arranque, todo parecía haber ido bien. Sin embargo, la actualización de MySQL 4.x a MySQL 5.x que se ha ejecutado durante el proceso de actualización de Fedora no ha ido todo lo fina que debería. En un principio, parece que todo es correcto, pues las aplicaciones web que tenía alojadas en mi pc local seguían funcionando (y todas ellas hacen uso de MySQL en la capa de datos). Sin embargo, probando MySQL Workbench (el modelador gráfico de bases de datos), no conseguía hacer funcionar la opción de Ingeniería Inversa (dada una base de datos ya construída, extraer el esquema E/R). El error con el que me encontraba era el siguiente:

Error log:

Fetching schemata...

Schemata fetched.

Reverse engineering schema...Error calling

ReverseEngineeringMysql.reverseEngineer: Could not get routines.The schema(ta)

could not be reverse engineered (error: 0)

Could not get routines. (SHOW PROCEDURE STATUS;MySQL Error 1146: Table 'mysql.proc' doesn't exist)

He seguido esa cadena de error (mysql.proc, tabla que se genera para la gestión de procedimientos almacenados) en el bugzilla de MySQL y he visto que al parecer no soy el único al que le ha ocurrido (ver último comentario). La tabla mysql.proc se genera al instalar mysql 5. Si simplemente actualizamos de la versión 4 a la 5, tendremos problemas si no seguimos el último paso que indica explícitamente el manual, y más en concreto aquí: http://dev.mysql.com/doc/refman/5.0/en/mysql-upgrade.html

$ mysqlcheck --check-upgrade --all-databases --auto-repair
$ mysql_fix_privilege_tables

Voilá! Ahora puedo trabajar sin problemas con MySQL Workbench.

MySQL Administrator en Ubuntu

MySQL Administrator es una aplicación de código abierto para gestionar el servidor de base de datos MySQL de forma gráfica. En general, tras instalarla con apt-get install mysql-admin, funciona bien, pero tiene una gran pega: al pinchar en Gestión de Usuarios la aplicación se queda colgada. Es un bug del que se está quejando mucha gente según el BugZilla de Ubuntu. Y por supuesto, alguien ha dado con un parche que permite usar esta funcionalidad de gestión de usuarios de forma gráfica (menos mal ! ) :

$ export DEBUG_DONT_SPAWN_FETCHES=1
$ mysql-admin