如何在Ubuntu Server 18.04中允许MySQL远程连接
本教程介绍如何允许与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的远程连接并不是很好的做法。
因此,除非我们必须那样做,否则不要将数据库服务器暴露到外面,尤其是在生产环境中。