我有三台通过局域网连接的电脑。
现在我如何将Web服务CodeIgniter服务器连接到数据库,我已经在 aplication / config / database.php 上设置了IP,
$db['default']['hostname'] = 'localhost';
我已使用第一台PC使用的IP更改了localhost
:
$db['default']['hostname'] = '192.168.1.10';
但结果是:
发生数据库错误 无法使用提供的设置连接到数据库服务器。
答案 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中的这些用户。大多数用户只被授予localhost
或127.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重新加载允许这些授权生效的用户权限表。