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

时间:2014-06-10 14:12:16

标签: php mysql database codeigniter lan

我有三台通过局域网连接的电脑。

  • 第一台PC到数据库;
  • 第二个Web服务CodeIgniter RESTful;
  • 第三个客户。

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

$db['default']['hostname'] = 'localhost';

我已使用第一台PC使用的IP更改了localhost

$db['default']['hostname'] = '192.168.1.10';

但结果是:

  

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

1 个答案:

答案 0 :(得分:4)

  

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

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

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

启用MySQL网络

首先,使用nano等编辑器打开文件。您可能需要通过sudo运行命令:

sudo nano /etc/mysql/my.cnf

然后使用bind-address选项查找配置文件中的区域:

# 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

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

bind-address            = 0.0.0.0

完成后保存文件&像这样重启MySQL:

sudo service mysql restart

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

确保MySQL端口3306已打开

也就是说,即使启用了网络,您仍应检查是否能够使用nmap等网络工具从命令行连接到远程计算机。您可能在192.168.1.10阻止MySQL端口3306的防火墙,因此您需要检查它是否打开或关闭:

nmap 192.168.1.10 -p3306

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

Starting Nmap 6.40 ( http://nmap.org ) at 2014-06-10 10:34 EDT
Nmap scan report for 192.168.1.10
Host is up (0.0035s latency).
PORT     STATE SERVICE
3306/tcp open  mysql

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

Starting Nmap 6.40 ( http://nmap.org ) at 2014-06-10 10:34 EDT
Nmap scan report for 192.168.1.10
Host is up (0.0035s latency).
PORT     STATE  SERVICE
3306/tcp closed mysql

检查您的MySQL用户授权

现在完成所有操作后,您的MySQL数据库服务器应该可以在网络上访问。但是,您需要确保您正在使用的数据库用户可以从LAN上的远程计算机进行连接。所以登录MySQL&运行此命令以查看用户可能拥有的授权:

SELECT user, host FROM `mysql`.`user`;

这将显示一个用户列表&主机连接到MySQL中的这些用户。大多数用户只被授予localhost127.0.0.1的访问权限。一些被授予%的通配符主机。您需要查看该列表,看看您要使用的用户是否具有通配符主机(%)或连接到它们的特定IP地址。您可以通过运行这样的行来检查用户的GRANT;当然,更改[your_database_user][hostname]以符合您的设置:

SHOW GRANTS FOR '[your_database_user]'@'[hostname]';

这应该会显示特定主机上用户的可用GRANT列表。如果他们有GRANT s允许远程访问 - 例如使用通配符%主机 - 那么你就完成了。如果他们没有GRANT,你可以运行以下MySQL命令;当然,更改[your_database][your_database_user]以符合您的设置:

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';
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]'@'10.0.0.0/255.0.0.0';
FLUSH PRIVILEGES;

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