一 问题描述
在Ubuntu服务器上安装MySql 数据库,数据库安装见前面的博客。
但是在登陆的时候遇到了问题:
~$ mysql -u root -p
Enter password:
ERROR 1698 (28000): Access denied for user'root'@'localhost'
即这个1698问题!
但是以下面两个命令登陆都没有问题:
sudo mysql -uroot -p
sudo mysql
上面所说的问题在很多场合都会出现,比如在django中启动数据库时,当指定用户和密码时,它的内部启动方式就是:
mysql -u用户 -p密码。
所以也会出现1698:Access denied for user’root’@'localhost’的错误
注:在windows环境下,启动数据库后用上述命令登陆不会出现问题。
二 解决措施
1)先用其他命令登陆,查看一下user表,错误的起因就是在这里, root的plugin被修改成了auth_socket,用密码登陆的plugin应该是mysql_native_password。
mysql> select user, plugin from mysql.user;
+-----------+-----------------------+
| user | plugin |
+-----------+-----------------------+
| root | auth_socket |
| mysql.sys | mysql_native_password |
| dev | mysql_native_password |
+-----------+-----------------------+
3 rows in set (0.01 sec)
注:可以进入数据库后直接直接执行上述命令,也可以这样:
mysql> use mysql;
后执行:
mysql> select user, plugin from user;
2)关于auth_socket,在官方有说明,反正现在暂时不用它, 那就把这里改了。
mysql> update mysql.user set authentication_string=PASSWORD('密码'), plugin='mysql_native_password' where user='root';
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 1
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
3)重启服务,问题就解决了,可以用下述命令登陆了:
mysql -uroot -p