codeigniter连接阿里云rds mysql的核心是正确配置hostname(必须用rds内网/外网地址而非localhost)、确保安全组放行3306端口、白名单添加服务器ip、密码含特殊字符需url编码、mysql 8.0用户认证方式设为mysql_native_password,并在database.php中指定dbdriver为mysqli(ci4)或mysqli(ci3)。

CodeIgniter 连接阿里云 RDS MySQL 数据库,核心是正确配置数据库连接参数,并确保网络与权限可通。整个过程不复杂,但几个关键点容易出错,比如安全组、RDS白名单、密码特殊字符处理、以及 CodeIgniter 版本对应的驱动写法。
确认 RDS 实例已就绪并放行访问
在开始写代码前,请先确保:
- RDS 实例状态为“运行中”,且数据库类型为 MySQL(推荐 5.7 或 8.0)
- 在阿里云控制台的 安全组规则 中,已为入方向添加 3306 端口(允许来源 IP 可设为你的应用服务器公网 IP,或临时设为
0.0.0.0/0测试用) - 在 RDS 控制台的 白名单设置 中,已将应用服务器的公网或内网 IP 加入(若 ECS 与 RDS 同地域同 VPC,优先使用内网地址 + 内网 IP 白名单,更安全高效)
- 已创建好数据库和用户,并赋予该用户对目标数据库的
SELECT/INSERT/UPDATE/DELETE权限(可用 phpMyAdmin 或 DMS 登录验证)
修改 CodeIgniter 数据库配置文件
以 CodeIgniter 4.x 为例(CI3 类似,路径和键名略有差异),编辑 app/Config/Database.php 中的 default 组:
注意:不要用 localhost 或 127.0.0.1,必须填 RDS 的 内网地址(如 rm-xxxxx.mysql.rds.aliyuncs.com)或外网地址(仅测试)
'default' => [
'DSN' => '',
'hostname' => 'rm-xxxxx.mysql.rds.aliyuncs.com', // ✅ 必须是 RDS 地址
'username' => 'your_db_user',
'password' => 'your_secure_password', // 若含 $、@、/ 等特殊字符,建议 URL 编码或用单引号包裹
'database' => 'your_database_name',
'DBDriver' => 'MySQLi', // CI4 推荐;CI3 用 'mysqli'
'DBPrefix' => '',
'pConnect' => false,
'DBDebug' => (ENVIRONMENT !== 'production'),
'charset' => 'utf8mb4',
'DBCollat' => 'utf8mb4_unicode_ci',
'swapPre' => '',
'encrypt' => false,
'compress' => false,
'strictOn' => false,
'failover' => [],
'port' => 3306,
],
处理常见连接失败问题
如果报错 Connection refused 或 Access denied,按顺序排查:
-
telnet 或 mysql 命令行测试连通性:登录你的应用服务器,执行
telnet rm-xxx.mysql.rds.aliyuncs.com 3306,能通说明网络层 OK -
检查用户名密码是否被 URL 解析干扰:例如密码含
@,会导致解析成主机名。解决方式:对密码做rawurlencode(),或改用 DSN 字段(CI4 支持) -
MySQL 8.0 默认认证插件变更:RDS MySQL 8.0 默认用
caching_sha2_password,而旧版 PHP 扩展可能不兼容。可在 RDS 控制台的「账号管理」中,将用户认证方式改为mysql_native_password -
时区与 SSL(可选):如需强安全,可在 DSN 中启用 SSL:
?ssl_mode=REQUIRED,并配置 CA 证书路径(RDS 提供下载)
验证连接是否生效
在控制器中简单测试:
public function test_db()
{
$db = \Config\Database::connect();
$result = $db->query("SELECT VERSION() as ver")->getRow();
echo $result->ver; // 应输出类似 8.0.32
}
能正常输出版本号,说明 CodeIgniter 已成功连接阿里云 RDS。











