mysql 5.7重置root密码与以往有点不同

Linux 2016-07-03

遇到问题

新安装的MySQL5.7,登录时提示密码错误,安装的时候并没有更改密码,后来通过免密码登录的方式更改密码,输入update mysql.user set password=password('root') where user='root'时提示ERROR 1054 (42S22): Unknown column 'password' in 'field list'

原因

原来是mysql数据库下已经没有password这个字段了,password字段改成了 authentication_string

正确的顺序

这个只针对mysql5.7版本的修改. 关闭正在运行的Mysql:

service mysql stop

有的是mysqld,看情况修改. 跳过认证

mysqld_safe --skip-grant-tables &

为了反正远程连接,最好使用:

mysqld_safe --skip-grant-tables --skip-networking &

连接mysql

mysql -p

修改密码

use mysql;
update user set authentication_string=PASSWORD("") where User='root';
update user set plugin="mysql_native_password"; # 这句一定要加

生效

flush privileges;
quit;

service mysql start

后续错误

当我mysql -uroot -p是报错

mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

而当mysql -uroot -p -h127.0.0.1却连接成功了.

原因是Linux下使用localhost默认是使用sock连接, 127.0.0.1则是使用tcp来连接。当主机填写为localhost(域名)时mysql会采用 unix domain socket连接,当主机填写为127.0.0.1时mysql会采用tcp方式连接,这是linux套接字网络的特性,win平台反而不会有这个问题

apt-get install mysql-client

本文由 hongweipeng 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

赏个馒头吧