默认情况下,MySQL 服务器在一个或所有配置的网络接口上侦听传入的连接请求。为特定用途分配多个网络接口可能很有用。这样,它可以允许为多个网络接口指定绑定地址。
运行你的 MySQL 服务器
以下分步指南介绍了如何从阿里云控制台运行 MySQL 服务器。
登录您的阿里云账号,进入弹性计算服务(ECS):
创建一个新实例。我们将选择一个现收现付实例:
选择镜像 Ubuntu 20.04:
继续配置您的实例,直到结束:
检查您的 IP 接口和 IP 地址
在将您的 IP 地址绑定到 MySQL 之前,检查您的 IP 非常重要,这样您之后就不会进行错误配置:
$ ip a
可以看到我们的服务器有以下IP地址:
- 172.16.212.134
- 172.16.212.135
- 192.168.8.106
现在,您可以配置绑定。
为多个 IP 地址配置 MySQL 绑定
如果要配置 MySQL 并绑定 IP 地址,则应编辑配置文件/etc/mysql/mysql.conf.d/mysqld.cnf
并通过用逗号分隔每个地址来更改默认 IP 地址值。要编辑的指令是bind-address
.
$ sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
重启 MySQL 服务以保存修改:
$ sudo systemctl restart mysql
注意:该mysqlx-bind-address
指令用于X plugin
MySQL 服务器和客户端之间的接口。
确保您有远程数据库用户:
允许 MySQL 用户远程访问
您应该确保您使用的数据库用户被允许远程访问您的数据库。您可以连接到 MySQL 并允许远程访问。我们将在下面创建数据库和用户以向您展示该过程:
mysql> CREATE USER 'user'@'%' IDENTIFIED BY 'your_db_password';
mysql> CREATE DATABASE userdb;
mysql> GRANT ALL PRIVILEGES ON userdb.* TO 'user'@'%';
mysql> FLUSH PRIVILEGES;
mysql> exit;
配置防火墙
现在您已经为远程数据库访问配置了 MySQL 和用户,您需要在防火墙内允许 MySQL 协议。我们将只允许 MySQL 端口连接3306
到我们之前检查过的指定 IP 地址(接口)以提高安全性。
我们将不使用 IP 地址,而是使用每个 IP 地址对应的接口名称:
$ sudo ufw allow in on ens33 to any port 3306
$ sudo ufw allow in on ens34 to any port 3306
$ sudo ufw allow in on ens35 to any port 3306
然后,重启防火墙服务:
$ sudo ufw disable && sudo ufw enable
结论
MySQL 试图通过允许多个地址监听来带来更多便利,但有一个副作用。每个创建的服务器套接字都计入选项指定的限制–open-files-limit
。理论上,如果该选项指定的接口过多,–bind-address
如果 MySQL 服务器配置已经打开了大量文件,则可能导致“打开的文件过多”错误。