naf*_*ack 1 php mysql database lan codeigniter
我有三台通过 LAN 连接的电脑。
现在我如何将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)
但是,结果:
发生数据库错误
无法使用提供的设置连接到数据库服务器。
\n\n\n发生数据库错误
\n
\n 无法使用提供的设置连接到数据库服务器。
如果是MySQL,则默认情况下不启用数据库服务器的联网。要在 MySQL 中启用网络,您需要找到名为 的活动 MySQL 配置文件my.cnf。并编辑它。
我将解释如何在 Ubuntu 12.04 上执行此操作,但对于大多数 Linux 安装来说,说明都是相似的。
\n\n启用 MySQL 网络
\n\n首先,使用编辑器(例如nano. 您可能需要通过以下方式运行命令sudo:
sudo nano /etc/mysql/my.cnf\nRun Code Online (Sandbox Code Playgroud)\n\n然后使用以下选项在配置文件中查找该区域bind-address:
# 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\nRun Code Online (Sandbox Code Playgroud)\n\n现在将该bind-address设置更改为以下内容:
bind-address = 0.0.0.0\nRun Code Online (Sandbox Code Playgroud)\n\n完成后保存文件并重新启动 MySQL,如下所示:
\n\nsudo service mysql restart\nRun Code Online (Sandbox Code Playgroud)\n\n现在,您的 MySQL 数据库将能够从远程计算机获取非本地主机连接。
\n\n确保 MySQL 端口3306已打开
也就是说,即使启用了网络,您仍然应该检查是否能够使用网络工具(例如nmap. 您可能有防火墙192.168.1.10阻止 MySQL 端口3306,因此您需要检查它是打开还是关闭,如下所示:
nmap 192.168.1.10 -p3306\nRun Code Online (Sandbox Code Playgroud)\n\n如果端口3306打开,这将是响应;请注意open以下内容STATE:
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\nRun Code Online (Sandbox Code Playgroud)\n\n但如果端口3306关闭,你会得到这个;请注意closed以下内容STATE:
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\nRun Code Online (Sandbox Code Playgroud)\n\n检查您的 MySQL 用户授权
\n\n现在一切都完成了,您的 MySQL 数据库服务器应该可以通过网络访问。但话虽如此,您需要确保您使用的数据库用户可以从 LAN 上的远程计算机进行连接。因此,登录 MySQL 并运行以下命令来查看用户可能拥有的权限:
\n\nSELECT user, host FROM `mysql`.`user`;\nRun Code Online (Sandbox Code Playgroud)\n\n这将显示 MySQL 中连接到这些用户的用户和主机列表。问题是大多数用户仅被授予localhost或 的访问权限127.0.0.1。有些被授予通配符主机%. 您需要查看该列表,看看您要使用的用户是否有通配符主机 ( %) 或与其连接的特定 IP 地址。GRANT您可以通过运行这样的行来检查 user\xe2\x80\x99s ;当然要更改[your_database_user]并[hostname]匹配您的设置:
SHOW GRANTS FOR '[your_database_user]'@'[hostname]';\nRun 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]匹配您的设置:
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;\nRun Code Online (Sandbox Code Playgroud)\n\n这两GRANT行都对数据库应用了一组相当标准的访问权限。第一行将它们应用于 LAN 网络范围内的任何连接192.168.x.x。第二行将它们应用于 LAN 网络范围内的任何连接10.x.x.x。我喜欢这样做以覆盖内部网络的所有基础。最后FLUSH PRIVILEGES;一行基本上告诉 MySQL 重新加载用户权限表,以允许这些授予生效。
| 归档时间: |
|
| 查看次数: |
8871 次 |
| 最近记录: |