上一篇 下一篇 分享链接 返回 返回顶部

如何允许远程连接到MySQL服务器

发布人:Minchunlin 发布时间:2021-02-09 09:27 阅读量:1429

默认的MySQL服务器只监听本地主机。这意味着没有人可以从远程系统连接MySQL。这样做的主要目的是为了安全性考虑。

在许多情况下,我们需要从远程系统访问MySQL数据库服务器。在最可能的情况下,生产环境中,我们使用单独的数据库服务器的实例。此外,在负载平衡环境下托管的应用程序的情况下,我们创建一个单一的集中数据库服务器从多个系统访问。

本教程将帮助你配置MySQL服务器,允许从远程系统连接。

1、配置MySQL服务

默认情况下,MySQL服务器只在localhost接口上监听。你需要把它改为在所有接口上监听。

在文本编辑器中编辑MySQL数据库服务器的配置文件。基于Debian系统的MySQL配置文件在/etc/mysql/mysql.conf.d/mysqld.cnf。让我们来编辑MySQL配置文件。

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf。

在文件中搜索绑定地址的设置。默认的绑定地址设置为127.0.0.1,如下所示。

将bind-address值改为0.0.0.0,使MySQL数据库服务器在所有网络接口上都能监听。

更改后的数值会像上面一样。

在MySQL 8数据库配置文件中,您将看不到bind-address设置。因此,您只需要在[mysqld]标签下手动添加bind-address ,如下所示。

保存配置文件并关闭它。

重新启动MySQL服务以应用更改。

systemctl restart mysql.service 

现在,验证这些变化,MySQL正在从所有远程主机上监听。执行以下命令来查看服务状态。

netstat -tulpn  | grep -e "Local Address" -e "mysql" 

你会看到MySQL现在在0 0.0.0.0:3306本地地址上监听。这意味着,服务器现在在3306端口的所有网络接口上监听。

2、创建具有远程访问权限的MySQL用户

接下来,你需要创建MySQL用户来从远程主机连接。

mysql> CRATE USER 'username'@'remote_server_ip_or_hostname' IDENTIFIED BY 'pa$$word';

username - 用于登录MySQL服务器的用户账户名。

remote_server_ip_or_hostname - 这是远程主机的ip地址或主机名,用户可以从这里连接mysql服务器。

你也可以用'%'代替远程主机,允许任何远程主机。例如,你可以用'%'代替远程主机,允许任何远程主机。

mysql> CREATE USER 'username'@'%' IDENTIFIED BY 'pa$$word';

或者,你可以用下面的命令创建一个新的用户账户,只从远程主机连接。

mysql> GRANT ALL on *.* TO 'username'@'remote_server_ip_or_hostname';

重新加载运行MySQL服务器的权限。

mysql> FLUSH PRIVILEGES;

至此,你已经将MySQL服务器配置为从远程主机监听。创建了一个用于从远程主机验证的MySQL用户账户。

接下来,就是调整安全组或系统防火墙,为远程系统打开MySQL端口。

3、调整防火墙

在更改系统防火墙之前,云主机环境下运行的系统必须有更新安全组,根据主机服务打开MySQL端口。

如果你启用的防火墙的话,你需要在系统防火墙中打开端。例如,大多数的Linux系统选择了firewalld,而一些系统如基于Debian的系统则使用UFW防火墙。

根据你的操作系统更新防火墙。

使用FirewallD

FirewallD是基于CentOS和RedHat系统中默认的防火墙服务。你可以使用下面的命令为大家打开MySQL的3306端口,但不建议用于生产服务器。

sudo firewall-cmd --permanent --zone=public --add-port=3306/tcp 

sudo firewall-cmd --reload 

生产服务器建议只为需要的主机开放端口。FirewallD的使用可以使用丰富的规则,只为特定的ip地址或网络开放特定的端口。例如

firewall-cmd --permanent --zone=public --add-rich-rule='

  rule family="ipv4"

  source address="192.168.0.0/24"

  port protocol="tcp" port="3306" accept' 

在firewalld中添加所需的规则后,请确保在运行时重新加载以应用更改。

sudo firewall-cmd --reload

使用UFW

UFW(Uncomplicated Firewall)是Ubuntu和Debian系统中默认的防火墙工具。你可以使用下面的命令从每个人那里打开3306端口。

sudo ufw allow 3306/tcp 

但制作用户建议只为特定的IP或网络开放端口。要允许从一个特定的IP地址访问,请使用如下命令。

sudo ufw allow from 192.168.0.0/24 to any port 3306 

一定要把192.168.0.0/24改成你的网络或系统的IP地址。

本教程帮助你设置MySQL服务器接受远程主机的远程连接,还创建了一个允许从远程主机连接的MySQL用户账户。

目录结构
全文