首页 > 编程笔记 > MySQL笔记 阅读:1

MySQL设置远程连接(新手必看)

虽然在 Linux 本地可以登录 MySQL,但在日常使用中极不方便。接下来我们使用客户端工具 SQLyog 或 Navicat 远程连接 MySQL。

初次连接时可能会出现如下图所示的报错信息,这是因为 MySQL 不支持远程连接。


图 1 使用SQLyog初次连接MySQL时的报错信息

确认网络是否畅通

针对上面的问题,我们首先要做的就是确认网络是否畅通,具体操作步骤为:
telnet IP 地址 端口号

在 Windows 系统中开启 Telnet 功能的具体操作步骤如下:
1) 打开控制面板,选择“程序和功能”选项,如下图所示:


图 2 选择“程序和功能”选项

2) 选择“启用或关闭Windows功能”选项,如下图所示:


图 3 选择“启用或关闭Windows功能”选项

3) 在弹出的“Windows功能”对话框中勾选“Telnet客户端”复选框,单击“确定”按钮,即可开启 Telnet 功能,如下图所示:


图 4 开启 Telnet 功能

关闭防火墙或开放MySQL端口

检查服务器是否关闭了防火墙或开放了 MySQL 端口,默认开放的端口是 3306,也可以手动修改。CentOS 6 和 CentOS 7 下与防火墙有关的操作命令如下所示。
// CentOS 6 下关闭防火墙的命令
service iptables stop
// CentOS 7 下关闭防火墙的命令
systemctl stop firewalld.service
// CentOS 7 下开启防火墙的命令
systemctl start firewalld.service
// CentOS 7 下查看防火墙状态的命令
systemctl status firewalld.service
// CentOS 7 下设置开机启用防火墙的命令
systemctl enable firewalld.service
// CentOS 7 下设置开机禁用防火墙的命令
systemctl disable firewalld.service

执行上述关闭防火墙的命令会直接关闭防火墙,但在企业中通常采用的做法是开放固定端口,常用命令如下所示:
// 查看开放的端口的命令
firewall-cmd --list-all
// 设置开放的端口的命令
firewall-cmd --add-service=http --permanent
firewall-cmd --add-port=3306/tcp --permanent
// 重启防火墙的命令
firewall-cmd --reload

在Linux平台下设置Host列的值

首先在 Linux 平台下查看当前 MySQL 允许哪些 IP 地址连接,如下所示。其中,Host 列指定了允许用户登录所使用的 IP 地址,可以看到 root 用户对应的 Host 列的值为 "localhost",表示只允许本机客户端连接 MySQL。
mysql> USE mysql;
Database changed
mysql> SELECT Host, User FROM user;
+-----------+------------------+
| Host      | User             |
+-----------+------------------+
| localhost | mysql.infoschema |
| localhost | mysql.session    |
| localhost | mysql.sys        |
| localhost | root             |
+-----------+------------------+
4 rows in set (0.00 sec)
如果设置为 “Host=192.168.1.1”,则表示只允许 IP 地址为 192.168.1.1 的客户端连接 MySQL。如果设置为 “Host=localhost”,则表示只允许本机客户端连接 MySQL。

另外,还允许 Host 列的值中包含通配符 “%”。如果设置为 “Host=192.168.1.%”,则表示 IP 地址前缀为 “192.168.1.” 的客户端都可以连接 MySQL。如果设置为 “Host=%”,则表示所有 IP 地址都有连接权限。需要注意的是,不能为了省事就将 Host 列的值直接设置为通配符 “%”,因为这样做会存在安全隐患。用户可以根据需要对 Host 列的值进行设置。

本节将 Host 列的值直接设置为通配符 “%” 是为了方便讲解,SQL 语句如下所示:
mysql> UPDATE user SET host='%' WHERE user='root';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

然后查看主机和用户信息,结果如下所示。可以看到,root 用户对应的 Host 列的值为 “%”,表示允许所有主机连接 MySQL:
mysql> SELECT Host, User FROM user;
+-----------+------------------+
| Host      | User             |
+-----------+------------------+
| %         | root             |
| localhost | mysql.infoschema |
| localhost | mysql.session    |
| localhost | mysql.sys        |
+-----------+------------------+
4 rows in set (0.00 sec)
Host 列的值设置完成后,执行“flush privileges”命令即可使该设置立即生效。

测试

如果用户使用的是 MySQL 5.7,接下来就可以使用客户端工具 SQLyog 或 Navicat 远程连接 MySQL。如果用户使用的是 MySQL 8.0,那么连接时还会出现如下图所示的报错信息。


图 5 测试远程连接MySQL报错“2058”

从图 5 中可以看到,报错信息的最后一部分是乱码,意思是“插件缓存_sha2_密码无法进行加载”。这是因为 MySQL 修改了密码安全策略,SQLyog 未能正确解析使用。

为此,可以先在服务器环境下执行“mysql-u root-p”命令登录MySQL,再执行如下 SQL 语句(语句最后的“password”输入的是用户自己设置的密码)。
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
之后重新配置 SQLyog 连接,就可以连接成功。

相关文章