miércoles, marzo 12, 2008

error: 'Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)'


Recientemente he migrado un MySQL 4.0 a un MySQL 5.0 desde un servidor con CentOS a uno con Debian y trasteando las bases de datos y con la empanada que tengo encima la lié. phpMyadmin me decía que la tabla de usuarios era de una versión inferior a la versión del servidor y que ejecutará el comando
'mysql_fix_privilege_tables' que se solventaría el problema. Pues esto no hizo si no que cargarse la tabla users y con ello borrar el usuario de mysql 'debian-sys-maint'. Con esto no podía ni reiniciar MySQL, ni desinstalarlo y acceder a la página de privilegios de phpMyadmin, pero si loggearme como root a MySQL. Leyendo montones de foros todos daban la misma solución pero ninguna me servía. Tras un ratito de meditación y unos cuantos cigarros dí con la respuesta.

Si también recibes este mensaje y no sabes que hacer te muestro varias soluciones posibles:

1ª Solución (ver original):

Consiste en ejecutar los siguientes comandos dentro de MySQL:

GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY '' WITH GRANT OPTION;
El password que tienes que poner es el que aparece en el fichero /etc/mysql/debian.cnf que tendrá una estructura de este tipo:

# Automatically generated for Debian scripts. DO NOT TOUCH!
[client]
host = localhost
user = debian-sys-maint
password = XXXXXXXXXXXXXXX
socket = /var/run/mysqld/mysqld.sock
[mysql_upgrade]
user = debian-sys-maint
password = XXXXXXXXXXXXXXX
socket = /var/run/mysqld/mysqld.sock
basedir = /usr

Si con esto no te funciona prueba la siguiente solución:

2ª solución:

Dentro de mysql ejecuta:

mysql> use mysql;

mysql> SELECT Host,User,Password FROM user WHERE User = 'debian-sys-maint';

Empty set (0.00 sec)

Que quiere decir que el usuario no existe. Si es así tenemos que crear el usuario:
CREATE USER 'debian-sys-maint'@'localhost' IDENTIFIED BY 'CLAVE_QUE_SALE_EN_DEBIAN_CNF';
GRANT ALL PRIVILEGES ON * . * TO 'debian-sys-maint'@'localhost'
IDENTIFIED BY 'CLAVE_QUE_SALE_EN_DEBIAN_CNF' WITH GRANT OPTION
MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR
0 MAX_USER_CONNECTIONS 0 ;

mysql> use mysql;

mysql> SELECT Host,User,Password FROM user WHERE User = 'debian-sys-maint';
+-----------+------------------+---------+

| Host | User | Password|

+-----------+------------------+---------+

| localhost | debian-sys-maint | XXXXXXXX|

+-----------+------------------+-------------+

1 row in set (0.00 sec)
Si aún así no te sale el mensaje de arriba y sigues teniendo el problema prueba con lo siguiente.

3ª solución (la que a mi me funcionó):

Ejecuta lo siguiente desde la shell como root:

#mysql_install_db
Installing all prepared tables
Fill help tables

To start mysqld at boot time you have to copy support-files/mysql.server
to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:
/usr/bin/mysqladmin -u root password 'new-password'
/usr/bin/mysqladmin -u root -h promowebs.net password 'new-password'
See the manual for more instructions.

NOTE: If you are upgrading from a MySQL <= 3.22.10 you should run the /usr/bin/mysql_fix_privilege_tables. Otherwise you will not be able to use the new GRANT command! You can start the MySQL daemon with: cd /usr ; /usr/bin/mysqld_safe & You can test the MySQL daemon with the benchmarks in the 'sql-bench' directory: cd sql-bench ; perl run-all-tests Please report any problems with the /usr/bin/mysqlbug script! The latest information about MySQL is available on the web at http://www.mysql.com Support MySQL by buying support/licenses at http://shop.mysql.com

Una vez hecho esto intenta reiniciar MySQL y seguirás recibiendo un error:

Stopping MySQL database server: mysqld.

Starting MySQL database server: mysqld.

Checking for corrupt, not cleanly closed and upgrade needing tables..

/usr/bin/mysqladmin: connect to server at 'localhost' failed

error: 'Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)'
Entonces accederemos a phpMyadmin y entraremos en privilegios. Editamos el usuario debian-sys-maint y establecemos una contraseña ya que al ejecutar mysql_install_db crea el usuario pero por defecto no le pone password. La contraseña que le pondremos será la que aparece en el fichero /etc/mysql/debian.cnf (como hemos visto antes). Este password está en texto plano no intentes encontrar un algoritmo de desencriptación porque no está encriptado.

Una vez hecho esto prueba reiniciar MySQL y verás que alegría te da al ver que se reinicia.

Si aún así no funciona puedes dejarme un comentario e intentaré ayudarte.

Saludos.

7 comentarios:

pabloh dijo...

Gracias, es justo lo que buscaba. De hecho, es la segunda vez que consulto este post tuyo.

The root dijo...

No había visto tu comentario, me alegro de que te sirviera. Y si es la segunda vez que los consultas es porque te ha pasado dos veces supongo, jejejeje.

Saludos

Belén dijo...

Buenas, yo he seguido estos pasos, porque me he cargué el usuario y no me ha funcionado, me da este error:

radiusgenerico:~# /etc/init.d/mysql restart
Stopping MySQL database server: mysqld failed!
Starting MySQL database server: mysqld already running.
/usr/bin/mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)'

Belén dijo...

nada, ya está solucionado...se me había puesto un poquito cabezón (y yo también) pero ya funciona todo correctamente......muchas gracias por el post, ha sido de mucha utilidad, de verdad! :-D

The root dijo...

Hola Belén, me alegro de que te haya funcionado. Justo estaba escribiendote unos pasos que podías probar, pero si ya te va enhorabuena.

Saludos

JEisOn REstRePo VaNegAs dijo...

HOLA como estas tu blog esta muy interesante, pero lo que pasa es que despues de hacer lo que dice. me corrigio el preimer error pero ahora el que me sale es este

error: 'Access denied for user 'debian-sys-maint'@'localhost' (using password: YES

como soy nuevo en esto, si compartieras tus conociemientos conmigo seria de gran ayuda...jajaja

gracias

Sephiroth dijo...

Gracias Cupido!!

La solución 3 fue la que me sirvió.

Saludos!,
Isaías