如何设置 MySQL 允许远程访问

本文详细介绍了如何将MySQL数据库从本地分离到远程服务器,包括修改bind-address设置、配置远程用户权限、防火墙规则及安全注意事项。
摘要由CSDN通过智能技术生成

设置远程 MySQL 数据库

许多网站和应用程序最初都是将其 Web 服务器和数据库后端托管在同一台机器上。然而,随着时间的推移,这样的设置可能变得繁琐且难以扩展。一个常见的解决方案是通过设置远程数据库来分离这些功能,允许服务器和数据库在各自的机器上以自己的速度增长。

当用户尝试设置远程 MySQL 数据库时,他们经常遇到的一个常见问题是他们的 MySQL 实例只配置为监听本地连接。这是 MySQL 的默认设置,但对于远程数据库设置来说是行不通的,因为 MySQL 必须能够监听服务器可以访问的 外部 IP 地址。要启用此功能,请打开您的 mysqld.cnf 文件:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

导航到以 bind-address 指令开头的行。它看起来像这样:

. . .
lc-messages-dir = /usr/share/mysql
skip-external-locking
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address            = 127.0.0.1
. . .

默认情况下,此值设置为 127.0.0.1,这意味着服务器只会寻找本地连接。您需要将此指令更改为引用外部 IP 地址。为了进行故障排除,您可以将此指令设置为通配符 IP 地址,即 *::0.0.0.0

. . .
lc-messages-dir = /usr/share/mysql
skip-external-locking
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address            = 0.0.0.0
. . .

更改此行后,保存并关闭文件(如果您使用 nano 进行编辑,则按 CTRL + X,然后输入 Y,最后按 ENTER)。

然后重新启动 MySQL 服务以使您对 mysqld.cnf 所做的更改生效:

sudo systemctl restart mysql

如果您有一个现有的 MySQL 用户帐户,您计划使用它从远程主机连接到数据库,您需要重新配置该帐户,以便从远程服务器而不是 localhost 连接。为此,请以您的 root MySQL 用户或其他特权用户帐户打开 MySQL 客户端:

sudo mysql

如果您已为 root 启用了密码验证,则需要使用以下命令访问 MySQL shell:

mysql -u root -p

要更改用户的主机,您可以使用 MySQL 的 RENAME USER 命令。运行以下命令,确保将 sammy 更改为您的 MySQL 用户帐户的名称,将 remote_server_ip 更改为您的远程服务器的 IP 地址:

RENAME USER 'sammy'@'localhost' TO 'sammy'@'remote_server_ip';

或者,您可以使用以下命令创建一个新的用户帐户,该帐户将仅从远程主机连接:

CREATE USER 'sammy'@'remote_server_ip' IDENTIFIED BY 'password';

然后为新用户授予适合您特定需求的适当权限。以下示例为用户授予全局权限,以 CREATEALTERDROP 数据库、表和用户,以及在服务器上的任何表中使用 INSERTUPDATEDELETE 数据的权限。它还授予用户使用 SELECT 查询数据,使用 REFERENCES 关键字创建外键,以及使用 RELOAD 权限执行 FLUSH 操作的能力。但是,您应该只授予用户他们需要的权限,因此请根据需要自行调整您自己用户的权限。

GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD on *.* TO 'sammy'@'remote_server_ip' WITH GRANT OPTION;

完成后,最好运行 FLUSH PRIVILEGES 命令。这将释放由前面的 CREATE USERGRANT 语句缓存的服务器内存:

FLUSH PRIVILEGES;

然后您可以退出 MySQL 客户端:

exit

最后,假设您在数据库服务器上配置了防火墙,您还需要打开端口 3306 —— MySQL 的默认端口 —— 以允许流量访问 MySQL。

如果您只计划从一台特定的机器访问数据库服务器,您可以使用以下命令授予该机器专属权限以远程连接到数据库。确保将 remote_IP_address 替换为您计划连接的机器的实际 IP 地址:

sudo ufw allow from remote_IP_address to any port 3306

如果将来需要从其他机器访问数据库,您可以使用以下命令根据需要临时授予它们访问权限。只需记住包括它们各自的 IP 地址。

或者,您可以使用以下命令允许从 任何 IP 地址连接到您的 MySQL 数据库:

sudo ufw allow 3306

完成后,尝试从另一台机器远程访问您的数据库:

[environment second]
mysql -u user -h database_server_ip -p

如果您能够访问您的数据库,则确认您配置文件中的 bind-address 指令是问题所在。请注意,将 bind-address 设置为 0.0.0.0 是不安全的,因为它允许从任何 IP 地址连接到您的服务器。另一方面,如果您仍然无法远程访问数据库,则可能是其他原因导致的问题。

  • 30
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张无忌打怪兽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值