日期:2014-05-16  浏览次数:20567 次

Linux 下,mysql数据库报无法登陆错误:ERROR 1045 (28000): Access denied for user ‘admin’@'l
今天在别人的服务器上登录mysql发现无法登陆(Mysql别人实现安装好的)
密码和用户名都是正确的,但登录后报如下错误:
ERROR 1045 (28000): Access denied for user ‘admin’@'localhost’ (using password: YES)

尝试了加入-h和-port也无法登陆,最后只能重新修改了。注--该方法也可以用于当忘记数据库密码时,找回数据库密码用

如下是我执行过程,完全执行后,可以顺利登录数据库:linux下的执行脚本:
login as: root
Access denied
root@×××××××'s password:
Last login: Tue Feb 21 03:56:49 2012 from 218.17.162.225
[root@INOTRADE ~]# ps -A
  PID TTY          TIME CMD
    1 ?        00:00:01 init
 1117 ?        00:00:00 udevd
 1394 ?        00:00:00 syslogd
 1405 ?        00:00:00 sshd
 1414 ?        00:00:00 xinetd
 1427 ?        00:00:00 couriertcpd
 1429 ?        00:00:00 courierlogger
 1437 ?        00:00:00 couriertcpd
 1439 ?        00:00:00 courierlogger
 1445 ?        00:00:00 couriertcpd
 1447 ?        00:00:00 courierlogger
 1454 ?        00:00:00 couriertcpd
 1456 ?        00:00:00 courierlogger
 1466 ?        00:00:00 qmail-send
 1468 ?        00:00:00 splogger
 1469 ?        00:00:00 qmail-lspawn
 1470 ?        00:00:00 qmail-rspawn
 1471 ?        00:00:00 qmail-clean
 1486 ?        00:00:00 httpd
 1528 ?        00:00:00 named
 1573 ?        00:00:00 mysqld_safe
 1623 ?        00:00:00 mysqld
 1629 ?        00:00:00 httpd
 1655 ?        00:00:00 httpsd
 1659 ?        00:00:00 httpsd
 1674 ?        00:00:00 crond
 1682 ?        00:00:00 saslauthd
 1683 ?        00:00:00 saslauthd
 1689 ?        00:00:00 sshd
 1691 pts/0    00:00:00 bash
 1718 pts/0    00:00:00 ps

// 无法登陆,密码正确的,不知道为什么,原来数据库表的访问权限也已经设置了的
[root@INOTRADE ~]# mysql -uroot -p
Enter password:
[root@INOTRADE ~]# ERROR 1045 (28000): Access denied for user ‘admin’@'localhost’ (using password: YES)


[root@INOTRADE ~]# mysql -uroot -p****** -hlocalhost
[root@INOTRADE ~]# ERROR 1045 (28000): Access denied for user ‘admin’@'localhost’ (using password: YES)


// 执行脚本,更新mysql数据库的数据,如用户名密码
[root@INOTRADE ~]# sudo /etc/init.d/mysqld stop
Stopping MySQL:                                            [  OK  ]
[root@INOTRADE ~]# mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
[1] 1759
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
[root@INOTRADE ~]# Starting mysqld daemon with databases from /var/lib/mysql

-- 这步可能不会自动执行,等待十几秒后就可以直接回车返回到命令行模式下,然后登录到mysql服务器

[root@INOTRADE ~]#
[root@INOTRADE ~]# 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.0.77 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> select  host, user from user;
+-----------+------------------+
| host      | user             |
+-----------+------------------+
| %         | admin            |
| localhost | admin            |
| localhost | horde            |
| localhost | pma_OBBVuV2L3mjn |
+-----------+------------------+
4 rows in set (0.00 sec)

-- 因为我数据库中没有root,换为admin了
mysql> UPDATE user SET Password=PASSWORD('******') where USER='admin';
Query OK, 2 rows affected (0.02 sec)
Rows matched: 2  Changed: 2  Warnings: 0

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.02 sec)

mysql> quit;
Bye
[root@INOTRADE ~]# /etc/init.d/mysqld restart
STOPPING server from pid file /var/run/mysqld/mysqld.pid
120221 05:08:02  mysqld ended

Stopping MySQL:                                            [  OK  ]
Starting MySQL:                                            [  OK  ]
[1]+  Done                    mysqld_safe --user=mysql --skip-grant-tables --skip-networking

// 至此, 重启后就可以正常登录了
[root@INOTRADE ~]# mysql -uadmin -p******
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.0.77 Source distribution

Type 'hel