terça-feira, 27 de janeiro de 2009

MySQL: “Access denied for user ‘debian-sys-maint’@'localhost’”

For all you Ubuntu/MySQL developers out there, have you ever seen the following?

    $ sudo /etc/init.d/mysql restart
    * Stopping MySQL database server mysqld [fail]
    * Starting MySQL database server mysqld [ OK ]
    /usr/bin/mysqladmin: connect to server at ‘localhost’ failed
    error: ‘Access denied for user ‘debian-sys-maint’@'localhost’ (using password: YES)’

So, what is this “debian-sys-maint” user? Well, this MySQL user is created for the Ubuntu to be able to start/stop the database and to carry out other maintenance operations.

Sounds well enough, but then why do I keep running into the “access denied” problem for this user? Well, the issue is that with each update to MySQL, the user’s password in the database is overwritten. Ubuntu seems to go to the file /etc/mysql/debian.cnf in order to find this user’s password, but obviously the password is out of sync after the update has been applied.

As a result of this behaviour, I’ll run into the “access denied” problem every so often. Thankfully, the solution to this issue is fairly simple.

First, list the contents of the /etc/mysql/debian.cnf file:

    $ sudo cat /etc/mysql/debian.cnf

The contents of the file should look something like the following:

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

See that password? That’s what we’re looking for!

Next, we want to issue a command to MySQL that tells it to grant the debian-sys-maint user all necessary privileges using the new password.

Login to your mysql server using your root account and the root password you had originally set:

    $ mysql -u root -p

Issue the GRANT command now to grant those permissions:

    mysql> GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY 'n4aSHUP04s1J32X5';

If you restart MySQL, you’ll find that you should no longer be getting the “access denied” error message.

    $ sudo /etc/init.d/mysql restart
    * Stopping MySQL database server mysqld [ OK ]
    * Starting MySQL database server mysqld [ OK ]
    * Checking for corrupt, not cleanly closed and upgrade needing tables.

4 comentários:

  1. Parabéns meu caro!! Depois de uma vasta pesquisa, você foi o único que conseguiu solucionar o problema.

    Abraço!

    ResponderExcluir
  2. Obrigado pela dica, resolveu meu problema!

    ResponderExcluir
  3. Deu certo aqui também.
    Valeu.

    Depois explique o que fizemos.

    ResponderExcluir