如何允许远程访问 MySQL

0 股票
0
0
0
0

介绍

许多网站和应用程序最初都将 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 用户帐户从远程主机连接到数据库,则需要重新配置该帐户,使其从远程服务器而不是本地主机连接。为此,请以 MySQL root 用户或其他具有特权的帐户身份打开 MySQL 客户端:

sudo mysql

如果已为 root 用户启用密码验证,则应使用以下命令访问 MySQL shell:

mysql -u root -p

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

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

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

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

然后根据您的具体需求,授予新用户相应的权限。以下示例授予用户创建、修改和删除数据库、表和用户的全局权限,以及在服务器上的任何表中插入、更新和删除数据的权限。此外,它还允许用户使用 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 USER 和 GRANT 命令而保留的所有内存:

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

接下来,尝试从另一台设备远程访问您的数据库:

mysql -u user -h database_server_ip -p

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

 

 

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

您可能也喜欢