设置Windows server上面的mysql支持远程连接

划重点 这里我使用的是MySQL5.7!!!! 不同版本可能略微有区别。

打算把数据库放到服务器上,结果却报了Can’t connect to MySQL server (10060) 这个错,查了半天,各种版本的解决方法都有,最后自己总结一下。
出现这种现象的原因有两个,一个是当前用户被mysql服务器拒绝,另外一个原因是3306端口被被防火墙禁掉,无法连接到该端口。修改3306端口可以参考这篇博客:https://blog.csdn.net/qierkang/article/details/72963701,添加入站规则,这个很简单。被服务器拒绝的问题,接着往下看。

1、登陆mysql数据库

mysql -u root -p

2、查看user表

mysql> use mysql;
Database changed
mysql> select host,user,password from user;
+————–+——+——————————————-+
| host | user | password |
+————–+——+——————————————-+
| localhost | root | *A731AEBFB621E354CD41BAF207D884A609E81F5E |
| 192.168.1.1 | root | *A731AEBFB621E354CD41BAF207D884A609E81F5E |
+————–+——+——————————————-+
2 rows in set (0.00 sec)

可以看到在user表中已创建的root用户。host字段表示登录的主机,其值可以用IP,也可用主机名,

(1)有时想用本地IP登录,那么可以将以上的Host值改为自己的Ip即可。

比如这里我使用的MySQL5.7,就报了一个不一样的错:

ERROR 1054 (42S22): Unknown column ‘password’ in ‘field list’

这是因为在mysql5.7之后,数据库下已经没有password这个字段了,password字段改成了authentication_string

需要使用select host,user,authentication_string from user; 这句来查看

接下来才是重头戏:

实现远程连接(授权法)

将host字段的值改为%就表示在任何客户端机器上能以root用户登录到mysql服务器,建议在开发时设为%。
update user set host = ’%’ where user = ’root’;

将权限改为ALL PRIVILEGES

步骤如下:

mysql> use mysql;
Database changed
mysql> grant all privileges on . to root@’%’ identified by “root”;
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> select host,user,authentication_string from user;
+————–+——+——————————————-+
| host | user | password |
+————–+——+——————————————-+
| localhost | root | *A731AEBFB621E354CD41BAF207D884A609E81F5E |
| 192.168.1.1 | root | *A731AEBFB621E354CD41BAF207D884A609E81F5E |
| % | root | *A731AEBFB621E354CD41BAF207D884A609E81F5E |
+————–+——+——————————————-+
3 rows in set (0.00 sec)

重启mysql服务,这样机器就可以以用户名root密码root远程访问该机器上的MySql.

3、实现远程连接(改表法)

use mysql;

update user set host = ‘%’ where user = ‘root’;

这样在远端就可以通过root用户访问Mysql.

知识点:

在MySQL Server端,执行mysql 命令进入mysql 命令模式。使用grant命令用来建立新用户,指定用户口令并增加用户权限。命令格式如下:

grant [previleges] on [dbName].[tableName] to [userName]@[hostName] identified by "password";

解释上面需要替换的变量意义:
previlege:授予的权限;
dbName:指定被访问的数据库名称,如果指定所有数据库可使用*星号;
tableName:指定被访问的数据表,如果指定某个数据库下的所有数据表可使用*星号;
userName:远程主机的登录用户名称;
hostName:远程主机名或者IP地址;
password:远程主机用户访问MySQL使用的密码。

还有一种操作是在服务器端用Navicat修改,也可以更改 “mysql” 数据库里的 “user” 表里的 “host” 项,从”localhost”改为’%’,记得重启mysql服务

有一点疑惑的是不知道哪一步 我把远程连接的数据库密码改成password了,后来密码改成root,一直没生效,也是很无奈!

你可能感兴趣的:(【问题】)