我需要外部连接到MySQL。使用 Plesk/Ubuntu 16/nginx。在防火墙策略中,允许端口 3306 来自任何 IP。
是其他地方应该允许的吗?如果是这样,需要编辑什么文件?
您必须更改MySQL配置,并允许用户进行远程访问。
1. 打开 MySQL 配置文件。对于基于 RHEL 的发行版 -/etc/my.cnf
,对于基于 Debian 的发行版 -/etc/mysql/my.cnf
。
2. 将bind-address
参数更改为bind-address = 0.0.0.0
,并确保未定义skip-networking
参数。
3. 重新启动 MySQL 守护程序:
# service mysql restart
或:
# service mysqld restart
或:
# service mariadb restart
服务名称取决于安装的 MySQL 版本。如果您不确定,可以同时执行所有三个操作。除非在my.cnf
中犯了错误,否则不会造成任何伤害。
4. 授予对远程 IP 地址的访问权限并登录到 MySQL。例如,如果要允许使用密码password
和远程 IP 地址203.0.113.2
访问名为database
的用户user
的数据库:
GRANT ALL ON database.* TO user@'203.0.113.2' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
若要创建有权访问所有数据库的用户,请执行以下查询:
GRANT ALL PRIVILEGES ON *.* TO 'user'@'203.0.113.2' IDENTIFIED BY 'password' REQUIRE NONE WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;
FLUSH PRIVILEGES;
5. 您可以使用netstat
验证 MySQL 服务器是否正在侦听正确的 IP 地址。这是所需的输出 -0.0.0.0
地址:
# netstat -anp | grep :3306
tcp6 0 0 0.0.0.0:3306 :::* LISTEN 2723/mysqld
netstat 结果:
netstat -anp | grep :3306
tcp6 0 0 127.0.0.1:3306 :::* LISTEN 1003/mysqld