lunes, 6 de agosto de 2012

Cómo arreglar el problema de Amarok con la base de datos MySQL


Como sabemos, el fantástico reproductor musical de KDE, Amarok, es también un gestor de colecciones de audio, para lo que hace uso de una base de datos embebida, que desde su versión 2 es MySQL (antes era SQLite).

No he tenido constancia de que el problema haya aparecido en otras distribuciones, pero en OpenSUSE se dio que tras diversas actualizaciones del servidor de bases de datos MySQL, cuando se abría Amarok aparecía una ventana alertando de que había un problema con el acceso a la base de datos de MySQL, y nos sugería resolverlo antes de continuar utilizando Amarok. El mensaje de error decía concretamente lo siguiente:
GREPME MySQLe query failed! (2000) on init
El efecto inmediato que tenía este problema sobre Amarok es que desaparecía toda la colección de música que tuviésemos almacenada en la base de datos del reproductor.
Como efectos secundarios se podía constatar que aunque se cerrara el programa el proceso seguía estando activo, haciendo que KDE se quedara momentáneamente en estado de "shock", por lo que había que ir al gestor de procesos y matar el proceso de Amarok a la fuerza.

Investigando un poco comprobé que el paquete que al parecer originaba el conflicto era libmysqld18, que contiene las librerías de ejecución para las aplicaciones que hacen uso del servidor MySQL. El problema con el acceso de Amarok a la base de datos de MySQL surgió después de que el servidor de MySQL (incluyendo sus dependencias, entre ellas libmysqld18) se actualizaran a una versión superior a la 5.5.16.

En la actual versión de OpenSUSE, la 12.1, he comprobado con éxito dos formas de resolver el problema. La primera y más sencilla era desactualizar el paquete libmysqld18 a la versión 5.5.16 (sin necesidad de desactualizar las demás dependencias), que se puede hacer fácilmente desde YaST.

La segunda, un poco más compleja pero quizás más ortodoxa, es crear manualmente la base de datos de Amarok en MySQL, y otorgarle a éste plenos permisos sobre dicha base de datos.
¿Cómo hacerlo? Muy sencillo siguiendo los pasos que se describen a continuación:
  1. En primer lugar deberemos asegurarnos de tener instalados el servidor y el cliente MySQL, cuyos paquetes en los repositorios son mysql-community-server y mysql-community-server-client.

  2. Abrimos una sesión de consola y accedemos a MySQL con el usuario root (de MySQL, no del sistema):
    $ mysql -h localhost -u root
  3. Creamos el usuario 'amarokuser' en la máquina 'localhost' (es decir, nuestra máquina local):
    mysql> create user amarokuser@localhost identified by 'amarokpass';
    donde 'amarokpass' sería la contraseña del usuario 'amarokuser' utilizada en este caso, pero podemos ponerle la que queramos.

  4. Creamos la base de datos 'amarokdb' y le damos al usuario 'amarokuser' todos los permisos sobre ella:
    mysql> create database amarokdb;
    mysql> grant all privileges on amarokdb.* to amarokuser identified by 'amarokpass';
  5. A continuación entramos a MySQL como el usuario amarokuser e intentamos acceder a la base de datos 'amarokdb' para verificar que no haya problemas de acceso:
    $ mysql -h localhost -u amarokuser -p
    mysql> use amarokdb;
    Si no nos aparece ningún mensaje de error, significa que todo está correcto y podemos proseguir.

  6. Abrimos Amarok y nos vamos a Preferencias > Configurar Amarok... > Base de datos. Ahí seleccionamos la opción "Utilizar base de datos MySQL externa", y rellenamos los campos, que en nuestro caso deberían estar así:

    Servidor: localhost
    Puerto: 3306
    Usuario: amarokuser
    Contraseña: amarokpass
    Base de datos: amarokdb


Una vez hecho esto y aplicados los cambios, reniciamos Amarok y veremos cómo nuestra biblioteca musical vuelve a aparecer y a ser completamente accesible.

No obstante, en el bug reportado al respecto en el Bugzilla de OpenSUSE hay quien asegura haber resuelto el problema simplemente desinstalando el paquete mysql-community-server, lo que hace que el gestor de paquetes se encargue automáticamente de seleccionar e instalar los paquetes correspondientes al servidor MariaDB (fork de MySQL) como sustituto de mysql-community-server (https://bugzilla.novell.com/show_bug.cgi?id=712749#c40).

También se lee que a partir de la versión 12.2 de OpenSUSE, que será presumiblemente lanzada el próximo mes, este problema estará completamente resuelto. Pero si por cualquier razón nos topásemos de nuevo con el problema, ya tenemos aquí las posibles soluciones.

No hay comentarios:

Publicar un comentario