当前位置: 首页 > 科技观察

如何允许远程连接到MySQL数据库服务器?

时间:2023-03-22 17:31:43 科技观察

【.com速译】默认情况下,MySQL服务器只监听来自本地主机的连接,这意味着它只能被运行在同一主机上的应用程序访问。但在某些情况下,有必要允许远程连接。例如,如果您想从本地系统连接到远程MySQL服务器,或者在使用多服务器部署时,应用程序和数据库服务器不在同一台机器上运行。本指南将介绍允许远程连接到MySQL服务器所需的步骤。此声明也适用于MariaDB。配置MySQL服务器第一步是设置MySQL服务器以侦听机器上的特定IP地址或所有IP地址。如果MySQL服务器和客户端可以通过专用网络相互通信,那么最好的选择是将MySQL服务器设置为仅侦听专用IP。否则,如果要通过公网连接到服务器,请将MySQL服务器设置为侦听机器上的所有IP地址。为此,您需要编辑MySQL配置文件,添加或更改bind-address选项的值。您可以设置单独的IP地址和IP范围。如果地址为0.0.0.0,则MySQL服务器接受所有主机IPv4接口上的连接。如果您的系统上配置了IPv6,请使用::而不是0.0.0.0。MySQL配置文件的位置因发行版而异。在Ubuntu和Debian中,此文件位于/etc/mysql/mysql.conf.d/mysqld.cnf,而在基于RedHat的发行版(例如CentOS)中,此文件位于/etc/my.cnf。使用文本编辑器打开该文件:$sudonano/etc/mysql/mysql.conf.d/mysqld.cnf搜索以bind-address开头的行,将其值设置为MySQL服务器应监听的IP地址。默认情况下,此值设置为127.0.0.1(仅在本地主机上侦听)。在此示例中,我们将值更改为0.0.0.0以设置MySQL服务器侦听所有IPv4接口:mysqld.cnfbind-address=0.0.0.0#skip-networking如果有包含skip-networking的行,则删除该行或在行首添加#以将其注释掉。在MySQL8.0及更高版本中,绑定地址指令可能不存在。在这种情况下,将其添加到[mysqld]部分下。完成后,重新启动MySQL服务以使更改生效。只有root用户或具有sudo权限的用户才能重新启动该服务。在Debian或Ubuntu上重启MySQL服务,输入:$sudosystemctlrestartmysqld在基于RedHat的发行版(如CentOS)上,重启服务,运行:$sudosystemctlrestartmysql授权用户从远程机器访问下一步是允许远程用户访问数据库。以root身份登录MySQL服务器,输入:$sudomysql如果您使用旧的本机MySQL身份验证插件以root身份登录,请运行以下命令并在出现提示时输入您的密码:$mysql-uroot-p从MySQL中shell,使用GRANT语句向远程用户授予访问权限。mysql>GRANTALLONdatabase_name.*TOuser_name@'ip_address'IDENTIFIEDBY'user_password';其中:database_name是用户将连接到的数据库的名称。user_name是MySQL用户的名称。ip_address是用户将连接到的IP地址。使用%允许用户从任何IP地址连接。user_password是用户密码。例如,要授予名为foo且密码为my_password的用户从IP为10.8.0.5的客户端计算机访问数据库dbname的权限,您将运行:mysql>GRANTALLONdbname.*TOfoo@'10.8.0.5'BY'my_passwd';配置防火墙最后一步是配置防火墙,允许来自远程机器的入站流量通过端口3306(MySQL默认端口)。Iptables如果您使用iptables作为防火墙,则以下命令将允许从Internet上的任何IP地址访问MySQL端口。这不安全。$sudoiptables-AINPUT-ptcp--destination-port3306-jACCEPT允许从特定IP地址访问:$sudoiptables-AINPUT-s10.8.0.5-ptcp--destination-port3306-jACCEPTUFWUFW是Ubuntu中的默认防火墙工具。要允许从Internet上的任何IP地址访问(非常不安全),请运行:$sudoufwallow3306/tcp允许从特定IP地址访问:$sudoufwallowfrom10.8.0.5toanyport3306FirewallDFirewallD是CentOS中默认的防火墙管理工具。要允许从Internet上的任何IP地址访问(非常不安全),请输入:$sudofirewall-cmd--permanent--zone=public--add-port=3306/tcp$sudofirewall-cmd--reload以允许访问从特定端口上的特定IP地址,您可以创建新的FirewallD区域或使用丰富的规则。让我们创建一个名为mysqlzone的新区域:$sudofirewall-cmd--new-zone=mysqlzone--permanent$sudofirewall-cmd--reload$sudofirewall-cmd--permanent--zone=mysqlzone--add-source=10.8.0.5/32$sudofirewall-cmd--permanent--zone=mysqlzone--add-port=3306/tcp$sudofirewall-cmd--reload验证更改要验证远程用户是否可以连接到MySQL服务器,请运行以下命令:mysql-uuser_name-hmysql_server_ip-p其中user_name是您授予访问权限的用户的名称,mysql_server_ip是运行MySQL服务器的主机的IP地址。如果一切设置正确,您将能够登录到远程MySQL服务器。如果出现如下错误,说明3306端口没有打开,或者MySQL服务器没有监听IP地址。OutputERROR2003(HY000):Can'tconnecttoMySQLserveron'10.8.0.5'(111)”出现以下错误说明您尝试登录的用户没有访问远程MySQL服务器的权限。输出“ERROR1130(HY000):Host'10.8.0.5'isnotallowedtoconnecttothisMySQLserver”结论MySQL是默认流行的开源数据库服务器,它只监听来自本地主机的入站连接。要允许远程连接到MySQL服务器,您需要执行以下步骤:1.配置MySQL服务器侦听所有接口或特定接口。2.授予远程用户访问权限。3.在防火墙中打开MySQL端口。原标题:如何允许远程连接到MySQL数据库服务器

最新推荐
猜你喜欢