这里记录一下.

一台服务器上面的mysql出现了 无法外面连的情况解决办法:
1. 先尝试在宿主机上面登录

mysql -uroot -p
 
输入密码,可以登录.

然后 
use mysql  # 切换数据库
select * from user # 查看用户表
发现 root 后面只有localhost

然后继续执行语句

update user set host ='%' where user=root
再次验证远程访问. 发现还是不行.

查看网络情况: lsof -i:3309
情况如下:

root@Kylin:/etc/mysql# lsof -i:3306
COMMAND   PID  USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
mysqld  28663 mysql   32u  IPv4 15537727      0t0  TCP localhost:mysql (LISTEN)

发现仅监听了  localhost 肯定不行
修改 my.conf  #默认位置一般为 /etc/my.conf 或者是 /etc/mysql 目录下.

在 [mysqld] 后面增加上一行:

bind-address=0.0.0.0
然后再次使用lsof 进行查看 验证可以访问.

注意 本次还错误的将  % 修改为了 *  这次进行处理 还要增加上

skip-grant-tables

# 注意是复数 tables ..

附加一个别人的解决密码的问题:

MySQL 5.7 忘记root密码,使用--skip-grant-tables重置root密码的通用方法
https://majing.io/posts/10000005451184

主要是 password 字段还有 authentication_string 字段的区别. 

单词真鸡儿长.

 


新生  
2018.01.09 阅读 8772

这里主要介绍在不知MySQL的root密码的情况下,使用--skip-grant-tables关闭MySQL服务器的认证,从而可以重置root的密码。MySQL版本为5.7。

1、关闭MySQL

sudo service mysqld stop

2、使用--skip-grant-tables 和 --skip-networking 重启MySQL

sudo mysqld --skip-grant-tables  --skip-networking &

--skip-grant-tables:此选项会让MySQL服务器跳过验证步骤,允许所有用户以匿名的方式,无需做密码验证直接登陆MySQL服务器,并且拥有所有的操作权限。

--skip-networking:此选项会关门MySQL服务器的远程连接。这是因为以--skip-grant-tables方式启动MySQL服务器会有很大的安全隐患,为了降低风险,需要禁止远程客户端的连接。

3、本地连接mysql

shell> mysql

--skip-grant-tables已经关闭MySQL服务器的认证,以匿名方式,无需密码即可连接。

4、重置密码

在重置密码前,先要重载授权表:

mysql> FLUSH PRIVILEGES;

MySQL 5.7.6+:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';

MySQL 5.7.6以及之后的版本,使用ALTER USER语法来修改密码。

MySQL 5.7.5以及之前的版本

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');

MySQL 5.7.5以及之前的版本使用SET PASSWORD语法修改密码。

如果上面的方法修改密码有错,可以直接修改mysql.user表:

UPDATE mysql.user SET authentication_string = PASSWORD('MyNewPass')
WHERE User = 'root' AND Host = 'localhost';
FLUSH PRIVILEGES;

注意:mysql5.7 user表里已经去掉了password字段,改为了authentication_string。

5、重启服务器

service mysqld restart

因为之前使用--skip-grant-tables启动,所以需要重启mysql服务器,去掉--skip-grant-tables。

参考:https://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html