使用Ubuntu18.04.5登录MySql问题
最近开始学习mysql,在登录mysql时出现了以下问题。
-
使用$mysql -u root -p命令登录,在输入安装mysql时设置的密码后,出现以下报错
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
-
提示权限不足,拒绝访问。
-
老师给出的解决方案是加上sudo,但经过测试又发现新的问题。
- 使用sudo确实可以用mysql -u root -p输入密码登录数据库,但需要输入两次密码,特麻烦
- 经测试发现,如果加上sudo,不输入密码居然也能登录。。。。。
- 也就是说使用
sudo mysql
命令,或者sudo mysql -u root
命令可以直接登录 - 这显然不安全
- 测试了一下,使用
sudo mysql -u root -p
输入密码登录与sudo mysql
直接登录存在的唯一区别就是连接id不同。。。 - 在测试不加sudo,直接
mysql
或者mysql -uroot
都不能登录
解决方案:
- 首先,老师给出的解决加sudo问题的方案是改配置文件。
- 在ect/mysql/my.cnf中加上
[mysqld]
skip-grant-tables
-
老师说改了有bug,输入任何密码都可以登录
-
实际上这条配置信息的含义就是跳过登录认证,这时候加-p用密码登录显然是没啥意义的
-
这显然也称不上万全之策,也并不安全
-
瞎折腾半天总算能比较完备的解决这个问题了,可以不加sudo使用mysql命令同时密码仍然生效。
-
问题的本质是系统库mysql下的user表中的root用户登录方式配置存在问题
-
输入
use mysql
在mysql数据库中输入select User,Host,plugin from user
查看各用户的配置 -
输入
update user set plugin = "mysql_native_password";
更新plugin字段。 -
flush privileges;
刷新 -
此时已经可以使用密码正常登录,但是root的密码需要重设一下
-
ps:如果没改密码就退出的话,会发现用安装时设置的密码是登不上的,这时候只有先去该配置文件跳过认证,再进数据库改密码
-
ps2:每次改动配置文件需要重启一下mysql才能生效。命令是
service mysqld restart
-
在数据库下输入
alter user 'root'@'localhost' identified with mysql_native_password by '你的密码';
重设密码 -
大功告成
-
ps:如果改过配置文件别忘了注释掉再重启mysql
-
现在已经可以正常使用mysql命令登录,密码也在生效,不输入密码会报错
-
数据库编程使用root用户应该也不再需要加sudo了(尚未验证)