安装好mysql后:
使用mysql -u -root -p 登陆时报错:
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
解决方法如下:(ps如果之前已经使用别的解决方法,没有根本解决问题,而是换了报错方式,建议sudo apt-get install package --reinstall (package t替换成 mysql-server 和mysql-client)重新安装包,重装mysql) 然后在按照下面步骤解决问题。
使用sudo登陆
sudo mysql -u root -p
到此,mysql数据库可以登陆。
但是在往后的使用中依然会报错:
比如:在使用python中django框架
运行生成迁移文件指令:
python manage.py makemigrations
依然会报错
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
这时真的很头疼于是乎我寻找各种解决方案:
$ sudo mysql -u root # I had to use "sudo" since is new installation
mysql> USE mysql;
mysql> SELECT User, Host, plugin FROM mysql.user;
+------------------+-----------------------+
| User | plugin |
+------------------+-----------------------+
| root | auth_socket |
| mysql.sys | mysql_native_password |
| debian-sys-maint | mysql_native_password |
+------------------+-----------------------+
在表中你可以看到 root
用户 对应 auth_socket
我的解决方法是(在mysql中进行如下操作):
替换YOUR_SYSTEM_USER 为你的用户名
$ sudo mysql -u root # I had to use "sudo" since is new installation
mysql> USE mysql;
mysql> CREATE USER 'YOUR_SYSTEM_USER'@'localhost' IDENTIFIED BY '';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'YOUR_SYSTEM_USER'@'localhost';
mysql> UPDATE user SET plugin='auth_socket' WHERE User='YOUR_SYSTEM_USER';
mysql> FLUSH PRIVILEGES;
mysql> exit;
$ service mysql restart
之后你需要使用mysql -u YOUR_SYSTEM_USER
登陆mysql
之后如果在生成迁移文件的时候又会报错:
django.db.utils.OperationalError: (1045, "Access denied for user 'root'@'localhost' (using password: YES)")
说明你django中的设置文件的用户名root和你修改过后的用户名不一致。
修改后即可。
希望对你有所帮助。
附上英语原文参考链接https://stackoverflow.com/questions/39281594/error-1698-28000-access-denied-for-user-rootlocalhost