mysql:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

Exception: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

问题描述如下:

landen@landen-Lenovo:~$ su root;
密码: 
root@landen-Lenovo:/home/landen# mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

原因:mysql数据库的user表里,存在用户名为空的账户即匿名账户,导致登录的时候是虽然用的是root,但实际是匿名登录的,通过错误提示里的''@'localhost'可以看出来

solution: 
1.(http://www.jb51.net/LINUXjishu/10981.html)
2.(http://blog.csdn.net/tys1986blueboy/article/details/7056835)

演示如下:
root@landen-Lenovo:/home/landen# /etc/init.d/mysql stop
Rather than invoking init scripts through /etc/init.d, use the service(8)
utility, e.g. service mysql stop

Since the script you are attempting to invoke has been converted to an
Upstart job, you may also use the stop(8) utility, e.g. stop mysql
mysql stop/waiting
root@landen-Lenovo:/home/landen# mysqld_safe --user=mysql --skip-grant-tables --skip-networking&
[1] 15969
root@landen-Lenovo:/home/landen# 130406 15:32:52 mysqld_safe Can't log to error log and syslog at the same time.  Remove all --log-error configuration options for --syslog to take effect.
130406 15:32:52 mysqld_safe Logging to '/var/log/mysql/error.log'.
130406 15:32:52 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql

root@landen-Lenovo:/home/landen# mysql -u root mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.5.29-0ubuntu0.12.04.2 (Ubuntu)

Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> update user set Password=PASSWORD('lk198981') where user='root';
Query OK, 0 rows affected (0.08 sec)
Rows matched: 4  Changed: 0  Warnings: 0

mysql> flush privileges;
Query OK, 0 rows affected (0.04 sec)

mysql> quit;
Bye
root@landen-Lenovo:/home/landen# /etc/init.d/mysql restart
Rather than invoking init scripts through /etc/init.d, use the service(8)
utility, e.g. service mysql restart

Since the script you are attempting to invoke has been converted to an
Upstart job, you may also use the stop(8) and then start(8) utilities,
e.g. stop mysql ; start mysql. The restart(8) utility is also available.
mysql start/running, process 16401
root@landen-Lenovo:/home/landen# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 37
Server version: 5.5.29-0ubuntu0.12.04.2 (Ubuntu)

Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| metastore_db       |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)

mysql> create database student;
Query OK, 1 row affected (0.01 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| metastore_db       |
| mysql              |
| performance_schema |
| student            |
| test               |
+--------------------+
6 rows in set (0.00 sec)

mysql> use student;
Database changed
mysql> quit;
Bye
原文地址:https://www.cnblogs.com/likai198981/p/3002518.html