Codeigniter 4本地运行正常,线上服务器无法连接数据库求助
Codeigniter 4 线上服务器数据库连接失败排查
本地开发环境运行正常,上传至线上服务器后出现「Unable to connect to the database.」错误,以下是当前配置及排查方向:
当前配置
database.php 配置
public $default = [ 'DSN' => '', 'hostname' => 'test.mysql.database.test.com', 'username' => 'testusername', 'password' => 'testpassword', 'database' => 'testdb', 'DBDriver' => 'MySQLi', 'DBPrefix' => '', 'pConnect' => false, 'DBDebug' => (ENVIRONMENT !== 'production'), 'charset' => 'utf8', 'DBCollat' => 'utf8_general_ci', 'swapPre' => '', 'encrypt' => array( 'ssl_ca' =>'', 'ssl_verify' =>FALSE), 'compress' => false, 'strictOn' => false, 'failover' => [], 'port' => 3306, ];
.env 配置
database.default.hostname = test.mysql.database.test.com database.default.database = testdb database.default.username = testusername database.default.password = testpassword database.default.DBDriver = MySQLi database.default.encrypt.ssl_verify = true database.default.encrypt.ssl_ca = './etc/certs/test.pem'
排查步骤
- SSL证书路径验证:.env中配置的
./etc/certs/test.pem是相对路径,线上服务器的文件结构可能和本地不同,需确认证书文件是否存在,建议改用绝对路径(如/var/www/your-project/etc/certs/test.pem)测试 - SSL验证配置冲突:database.php里
ssl_verify设为FALSE,但.env中设为true,CI4会优先读取.env配置。若线上SSL证书未正确配置,可临时将.env中的ssl_verify改为false,看是否能连接成功 - 数据库IP白名单:检查云数据库控制台是否添加了线上服务器的公网IP到访问白名单,很多云数据库默认只允许本地IP访问
- 端口连通性测试:在服务器上执行
telnet test.mysql.database.test.com 3306或nc -zv test.mysql.database.test.com 3306,确认3306端口是否能正常连通 - .env文件加载检查:确保线上服务器的.env文件存在且权限正确,CI4在production环境下需保证.env文件可被PHP读取
- MySQLi扩展检查:执行
php -m命令,确认服务器已安装MySQLi扩展,若缺少需安装对应扩展
内容的提问来源于stack exchange,提问作者userdev2222
相关产品推荐
相关产品推荐

