如何在Ubuntu Server 18.04中允许MySQL远程连接

时间:2020-07-27 12:59:30  来源:igfitidea点击:

本教程介绍如何允许与Ubuntu 18.04上的MySQL/MariaDB服务器远程连接。
Ubuntu MySQL Server的默认行为阻止了所有远程连接。
这阻止我们从外部访问数据库服务器。

请注意,要允许MySQL远程连接,我们需要编辑MySQL主配置文件。
如果我们使用的是MariaDB数据库服务器,则配置文件将是“/etc/mysql/mariadb.conf.d/50-server.cnf”,如果已安装MySQL数据库服务器配置文件是:“/etc/mysql/mysql .conf.d/mysqld.cnf“。

打开/etc/mysql/mariadb.conf.d/50-server.cnf文件(或者/etc/mysql/mysql.conf.d/mysqld.cnf)。

sudo vim /etc/mysql/mariadb.conf.d/50-server.cnf

在[MySQLD]部分下,找到该行:

bind-address            = 127.0.0.1

并将其更改为:

bind-address            = 0.0.0.0

保存配置文件,然后重新启动MySQL Server:

sudo systemctl restart mariadb

或者

sudo systemctl restart mysql

运行netstat命令并确保MySQL Server侦听套接字0 0.0.0.0:3306.

sudo netstat -tulnp | grep mysqld

输出应类似于以下内容:

tcp        0 0 0.0.0.0:3306            0.0.0.0:* LISTEN   622/mysqld

这个怎么运作..

默认情况下,Ubuntu 18.04上的MySQL守护程序只侦听localhost(127.0.0.1)的连接,这意味着我们无法从远程计算机登录服务器。
此设置由MySQL/MariaDB配置文件中的BIND-ADDRES控制。
默认情况下,它设置为:“bind-address = 127.0.0.1”,它可防止其他主机访问我们的MySQL服务器。

要允许远程访问,我们将绑定地址的值更改为:“0.0.0.0”。

bind-address            = 0.0.0.0

通过将值更改为0.0.0.0,我们会指示MySQL绑定到所有可用接口,并通过执行允许远程连接Ubuntu 18.04上的MySQL Server。

从Ubuntu防火墙打开Port 3306

Ubuntu 18.04默认情况下禁用UFW防火墙,因此如果我们未启用UFW,则不必担心打开MySQL端口3306.

但是,如果启用了UFW,那么它将阻止MySQL远程访问,因此我们需要添加防火墙规则以打开端口3306.

sudo ufw allow 3306/tcp

单击以下链接以了解有关UFW Ubuntu防火墙的更多信息。

从另一台Linux机器,我们可以根据服务器IP运行NMAP以检查端口3306是否打开。

nmap 192.168.1.100

创建远程MySQL用户并授予对数据库的远程访问

既然我们的MySQL Server允许远程连接,我们仍然需要允许允许从localhost外部访问服务器的MySQL用户。
要创建允许从任何主机连接的MySQL用户,请登录MySQL控制台并运行:

CREATE USER 'username'@'%' IDENTIFIED BY 'new-password';
FLUSH PRIVILEGES;

然后,我们可以使用grant all命令授予对数据库的访问:

GRANT ALL PRIVILEGES ON dbname.* TO 'username'@'%';

如果要授予对服务器上的所有数据库的访问,请运行:

GRANT ALL PRIVILEGES ON *.* TO 'user'@'%';

如果要创建仅允许从特定主机登录的用户,请在创建用户时将“%”替换为主机IP或者域名。

CREATE USER 'username'@'192.168.1.200' identified by 'new-password';

要测试连接,请尝试从远程计算机访问MySQL服务器:

mysql -h 192.168.1.100 -u username -p

192.168.1.100是MySQL Server正在运行的Ubuntu Server的IP地址。

请注意,从安全性的角度来看,启用与MySQL Server的远程连接并不是很好的做法。
因此,除非我们必须那样做,否则不要将数据库服务器暴露到外面,尤其是在生产环境中。