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

默认的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用户账户。