赞
踩
许多网站和应用程序最初都是将其 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';
然后为新用户授予适合您特定需求的适当权限。以下示例为用户授予全局权限,以 CREATE
、ALTER
和 DROP
数据库、表和用户,以及在服务器上的任何表中使用 INSERT
、UPDATE
和 DELETE
数据的权限。它还授予用户使用 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
完成后,尝试从另一台机器远程访问您的数据库:
[environment second]
mysql -u user -h database_server_ip -p
如果您能够访问您的数据库,则确认您配置文件中的 bind-address
指令是问题所在。请注意,将 bind-address
设置为 0.0.0.0
是不安全的,因为它允许从任何 IP 地址连接到您的服务器。另一方面,如果您仍然无法远程访问数据库,则可能是其他原因导致的问题。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。