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.