先给出解决办法
1,第一种,也是最简单直接的办法,就是,既然root不让登录,可以直接创建用户,然后付给这个用户所有权限, 然后登录,不就行了
mysql创建用户并设置所有权限
1、创建用户:CREATE USER 'username'@'host' IDENTIFIED BY 'password';
username:用户名;host:指定在哪个主机上可以登录,本机可用localhost,%通配所有远程主机;password:用户登录密码;
2、授权:GRANT ALL PRIVILEGES ON *.* TO ‘username’@‘%’ IDENTIFIED BY 'password’;
刷新权限:FLUSH PRIVILEGES;
格式:grant 权限 on 数据库名.表名 to 用户@登录主机 identified by "用户密码";*.*代表所有权;
@ 后面是访问MySQL的客户端IP地址(或是 主机名) % 代表任意的客户端,如果填写 localhost 为本地访问(那此用户就不能远程访问该mysql数据库了)。
第二种,修改密码root密码
- 当时找了一大圈,踩了好多坑,才找到这个
问题解决链接戳我
更一般的情况就是,当你安装完mysq-server和mysql client后,使用mysql -u root -p,然后让你输入密码。但是此时你是不知道密码的。
- 如果你要登录,可以使用sudo mysql 不用密码登录
- 如果要使用账号密码登录就进行如下操作
查询默认的用户名和密码:sudo cat /etc/mysql/debian.cnf
#Automatically generated for Debian scripts. DO NOT TOUCH!
[client]
host = localhost
user = debian-sys-maint
password = F64nKZ233QkzL8v9
socket = /var/run/mysqld/mysqld.sock
[mysql_upgrade]
host = localhost
user = debian-sys-maint
password = F64nKZ233QkzL8v9
socket = /var/run/mysqld/mysqld.sock
然后就可以使用mysql -u debian-sys-maint -p
输入密码 F64nKZ233QkzL8v9就可以登录
进入数据库,就可以进行链接里面的操作
总结一下,解决问题只要一条SQL 就是登录到mysql中后执行:
mysql> update mysql.user set authentication_string=PASSWORD('newPwd'), plugin='mysql_native_password' where user='root';
同时更改插件并设置密码
然后重启数据库就可以使用mysql -u root -p 来登录数据库了。
原因
至于原因,上面链接已经已经说的很清楚了
是mysql使用了
套接字对等证书可插入认证 auth_socket
我再补充下。
就是上面博客里面的链接已经失效,可以查看官方文档描述,auth_socket
mysql文档描述
服务器端auth_socket身份验证插件对从本地主机通过Unix套接字文件连接的客户端进行身份验证。该插件使用 SO_PEERCRED套接字选项来获取有关运行客户端程序的用户的信息。因此,该插件只能用于支持该SO_PEERCRED选项的系统 ,例如Linux。
大致就是,如果您安装5.7并且没有为root用户提供密码,它将使用auth_socket插件。该插件不关心,也不需要密码。它只检查用户是否使用UNIX套接字进行连接,然后比较用户名。
最后,在整体给出上面的参考链接
里面更加详细的介绍了解决办法和错误原因。http://www.cnblogs.com/leolztang/p/5094930.html
https://dev.mysql.com/doc/refman/8.0/en/socket-pluggable-authentication.html#socket-pluggable-authentication-usage
http://feed.askmaclean.com/archives/change-user-password-in-mysql-5-7-with-plugin-auth_socket.html
https://bbs.deepin.org/forum.php?mod=viewthread&tid=169658&highlight=mysql