问题描述
访问 mysql:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
解决方法
一, 修改 root 用户的密码
方法一:
- /etc/init.d/mysql stop
- mysqld_safe --user=mysql --skip-grant-tables --skip-networking & // 跳过权限
- mysql -u root mysql**
- mysql> UPDATE user SET Password=PASSWORD('newpassword') where USER='root';
- mysql> FLUSH PRIVILEGES;
- mysql> quit
- /etc/init.d/mysql restart
- mysql -uroot -p
Enter password: < 输入新设的密码 newpassword>
mysql>
方法二
使用 mysqladmin. 输入
mysqladmin -u root -p oldpassword newpasswd
执行这个命令后, 需要输入 root 的原密码, 这样 root 的密码将改为 newpasswd. 同样, 把命令里的 root 改为你的用户名, 你就可以改你自己的密码了.
当然如果你的 mysqladmin 连接不上 mysql server, 或者你没有办法执行 mysqladmin, 那么这种方法就是无效的, 而且 mysqladmin 无法把密码清空.
下面的方法都在 mysql 提示符下使用, 且必须有 mysql 的 root 权限:
方法三
- mysql> INSERT INTO mysql.user (Host,User,Password) VALUES('%','admin', PASSWORD('admin'));
- mysql> FLUSH PRIVILEGES
这是在增加一个用户, 用户名和密码为 admin. 注意要使用 PASSWORD 函数, 然后还要使用 FLUSH PRIVILEGES 来执行确认.
方法四
和方法三一样, 只是使用了 REPLACE 语句
- mysql> REPLACE INTO mysql.user(Host,User,Password)VALUES('%','system',PASSWORD('manager'));
- mysql> FLUSH PRIVILEGES
方法五
使用 SET PASSWORD 语句
mysql> SET PASSWORD FOR system@"%" = PASSWORD('manager');
你也必须使用 PASSWORD() 函数, 但是不需要使用 FLUSH PRIVILEGES 来执行确认.
方法六
使用 GRANT ... IDENTIFIED BY 语句, 来进行授权.
- mysql> grant all privileges on . to root@localhost identified by 'Admin123' with grant option;
- mysql> FLUSH PRIVILEGES
这里 PASSWORD() 函数是不必要的, 也不需要使用 FLUSH PRIVILEGES 来执行确认.
PASSWORD() 函数作用是为口令字加密, 在程序中 MySql 自动解释.
来源: http://www.bubuko.com/infodetail-2683671.html