Laravel 5.6连接InfinityFree远程MySQL数据库失败求助
解决Laravel连接InfinityFree远程MySQL的2002连接超时问题
我之前帮朋友排查过类似的问题,InfinityFree免费主机的MySQL连接限制是这个报错的核心原因,咱们一步步来拆解解决:
核心原因:InfinityFree禁止外部远程连接MySQL
InfinityFree的免费主机默认不允许外部客户端(比如你本地运行的Laravel项目)直接连接他们的MySQL数据库——他们封了3306端口的外部访问权限,只允许主机内部的程序(比如部署在他们主机上的PHP脚本)或者自带的phpMyAdmin访问数据库。这就是你收到SQLSTATE[HY000] [2002]连接超时错误的最主要原因。
先验证你的配置本身是否正确(针对同服务器部署场景)
如果你打算把Laravel项目部署到InfinityFree主机上,你的database.php和.env配置是完全正确的:
database.php 配置
'mysql' => [ 'driver' => 'mysql', 'host' => 'sql201.epizy.com', 'database' => 'epiz_22148680_LaravelHospital', 'username' => 'epiz_22148680', 'password' => 'Vxp7****R1k6', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', ],
.env 配置
DB_CONNECTION=mysql DB_HOST=sql201.epizy.com DB_PORT=3306 DB_DATABASE=epiz_22148680_LaravelHospital DB_USERNAME=epiz_22148680 DB_PASSWORD=Vxp7****R1k6
你可以在InfinityFree主机上上传一个简单的PHP测试脚本,验证数据库连接是否正常:
<?php $servername = "sql201.epizy.com"; $username = "epiz_22148680"; $password = "Vxp7****R1k6"; $dbname = "epiz_22148680_LaravelHospital"; $conn = new mysqli($servername, $username, $password, $dbname); if ($conn->connect_error) { die("连接失败: " . $conn->connect_error); } echo "数据库连接成功!"; $conn->close(); ?>
如果这个脚本在主机上运行成功,说明配置完全没问题,只是本地无法远程连接。
可行的解决方案
方案1:把Laravel项目部署到InfinityFree主机上
这是最直接的解决方式,当项目和数据库在同一服务器时,就能正常使用你现有的配置连接数据库了。你可以通过FTP把Laravel项目上传到主机,注意配置好public目录作为网站根目录,同时确保storage和bootstrap/cache目录有写入权限。
方案2:本地开发用本地数据库,部署时同步数据
如果你想在本地开发,然后部署到InfinityFree,可以:
- 本地安装MySQL,创建和远程数据库结构一致的本地数据库,开发时连接本地库
- 开发完成后,用phpMyAdmin导出本地数据库的结构和数据,再导入到InfinityFree的远程数据库中
方案3:尝试使用数据库隧道(不推荐免费场景)
有些第三方工具可以创建数据库隧道绕过外部连接限制,但这类工具大多需要付费,而且免费版的稳定性很差,对于免费主机来说性价比不高,所以不推荐。
内容的提问来源于stack exchange,提问作者Kasra GH
相关产品推荐
相关产品推荐

