如何通过 LAN 访问 MySQL 数据库 Web 服务?

naf*_*ack 1 php mysql database lan codeigniter

我有三台通过 LAN 连接的电脑。

  • 第一台连接数据库的 PC;
  • 第二个是Web服务CodeIgniter RESTful;
  • 第三个给客户。

现在我如何将Web服务CodeIgniter服务器连接到数据库,我已经在aplication/config/database.php上设置了IP ,

$db['default']['hostname'] = 'localhost';
Run Code Online (Sandbox Code Playgroud)

我已经更改了localhost第一台电脑使用的IP:

$db['default']['hostname'] = '192.168.1.10';
Run Code Online (Sandbox Code Playgroud)

但是,结果:

发生数据库错误
无法使用提供的设置连接到数据库服务器。

Jak*_*uld 5

\n

发生数据库错误
\n 无法使用提供的设置连接到数据库服务器。

\n
\n\n

如果是MySQL,则默认情况下不启用数据库服务器的联网。要在 MySQL 中启用网络,您需要找到名为 的活动 MySQL 配置文件my.cnf。并编辑它。

\n\n

我将解释如何在 Ubuntu 12.04 上执行此操作,但对于大多数 Linux 安装来说,说明都是相似的。

\n\n

启用 MySQL 网络

\n\n

首先,使用编辑器(例如nano. 您可能需要通过以下方式运行命令sudo

\n\n
sudo nano /etc/mysql/my.cnf\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后使用以下选项在配置文件中查找该区域bind-address

\n\n
# Instead of skip-networking the default is now to listen only on\n# localhost which is more compatible and is not less secure.\nbind-address            = 127.0.0.1\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在将该bind-address设置更改为以下内容:

\n\n
bind-address            = 0.0.0.0\n
Run Code Online (Sandbox Code Playgroud)\n\n

完成后保存文件并重新启动 MySQL,如下所示:

\n\n
sudo service mysql restart\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在,您的 MySQL 数据库将能够从远程计算机获取非本地主机连接。

\n\n

确保 MySQL 端口3306已打开

\n\n

也就是说,即使启用了网络,您仍然应该检查是否能够使用网络工具(例如nmap. 您可能有防火墙192.168.1.10阻止 MySQL 端口3306,因此您需要检查它是打开还是关闭,如下所示:

\n\n
nmap 192.168.1.10 -p3306\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果端口3306打开,这将是响应;请注意open以下内容STATE

\n\n
Starting Nmap 6.40 ( http://nmap.org ) at 2014-06-10 10:34 EDT\nNmap scan report for 192.168.1.10\nHost is up (0.0035s latency).\nPORT     STATE SERVICE\n3306/tcp open  mysql\n
Run Code Online (Sandbox Code Playgroud)\n\n

但如果端口3306关闭,你会得到这个;请注意closed以下内容STATE

\n\n
Starting Nmap 6.40 ( http://nmap.org ) at 2014-06-10 10:34 EDT\nNmap scan report for 192.168.1.10\nHost is up (0.0035s latency).\nPORT     STATE  SERVICE\n3306/tcp closed mysql\n
Run Code Online (Sandbox Code Playgroud)\n\n

检查您的 MySQL 用户授权

\n\n

现在一切都完成了,您的 MySQL 数据库服务器应该可以通过网络访问。但话虽如此,您需要确保您使用的数据库用户可以从 LAN 上的远程计算机进行连接。因此,登录 MySQL 并运行以下命令来查看用户可能拥有的权限:

\n\n
SELECT user, host FROM `mysql`.`user`;\n
Run Code Online (Sandbox Code Playgroud)\n\n

这将显示 MySQL 中连接到这些用户的用户和主机列表。问题是大多数用户仅被授予localhost或 的访问权限127.0.0.1。有些被授予通配符主机%. 您需要查看该列表,看看您要使用的用户是否有通配符主机 ( %) 或与其连接的特定 IP 地址。GRANT您可以通过运行这样的行来检查 user\xe2\x80\x99s ;当然要更改[your_database_user][hostname]匹配您的设置:

\n\n
SHOW GRANTS FOR '[your_database_user]'@'[hostname]';\n
Run Code Online (Sandbox Code Playgroud)\n\n

这应该会向您显示GRANT特定主机上用户的可用列表。如果他们有GRANT允许远程访问\xe2\x80\x94的s,例如使用通配符%主机\xe2\x80\x94,那么你就准备好了。如果它们没有\xe2\x80\x99t有任何GRANTs,你可以运行以下MySQL命令;当然要更改[your_database][your_database_user]匹配您的设置:

\n\n
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON `[your_database]`.* TO '[your_database_user]'@'192.168.0.0/255.255.0.0';\nGRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON `[your_database]`.* TO '[your_database_user]'@'10.0.0.0/255.0.0.0';\nFLUSH PRIVILEGES;\n
Run Code Online (Sandbox Code Playgroud)\n\n

这两GRANT行都对数据库应用了一组相当标准的访问权限。第一行将它们应用于 LAN 网络范围内的任何连接192.168.x.x。第二行将它们应用于 LAN 网络范围内的任何连接10.x.x.x。我喜欢这样做以覆盖内部网络的所有基础。最后FLUSH PRIVILEGES;一行基本上告诉 MySQL 重新加载用户权限表,以允许这些授予生效。

\n