CodeIgniter 连接阿里云 RDS 的核心是正确配置 database.php 中的 hostname、username、password、database 等参数,并确保 RDS 实例运行中、白名单已添加对应 IP、网络连通且权限匹配,否则仅改代码无效。

CodeIgniter 连接阿里云 RDS 数据库,核心是把 RDS 的连接参数正确填入 CodeIgniter 的数据库配置文件,并确保网络与权限配置就绪。不是改几行代码就能通,关键在“RDS 能被访问”和“配置能对得上”两个前提。
确认 RDS 实例已就绪且可访问
在动 CodeIgniter 之前,先验证 RDS 本身是否可用:
- RDS 实例状态为“运行中”,引擎为 MySQL(或你实际选用的 PostgreSQL/SQL Server)
- 已创建高权限账号(如 admin_user),并设置了强密码(含大小写字母、数字、特殊字符)
- 已配置白名单:
- 若从 ECS 访问:ECS 与 RDS 在同一账号、同一地域、同一 VPC;ECS 的私网 IP 已加入 RDS 白名单
- 若从本地开发环境访问:用
curl ifconfig.me查出本机公网 IP,添加到 RDS 白名单(注意:公网 IP 可能变动,生产环境不建议长期依赖)
- 已开通外网地址(如需本地调试),或确认内网地址已生成(ECS 场景必须用内网地址)
修改 CodeIgniter 的 database.php 配置
打开 application/config/database.php,找到 $db['default'] 数组,按 RDS 实际参数替换:
-
hostname:填 RDS 控制台中“连接地址”页显示的内网地址(如
rm-xxxx.mysql.rds.aliyuncs.com),不是 localhost - username:填你在 RDS “账号管理”里创建的用户名(非阿里云主账号)
- password:填对应账号的密码
-
database:填你已在 RDS 中创建好的具体数据库名(如
myapp_db),不是实例名 -
dbdriver:MySQL 实例填
mysql;PostgreSQL 填postgre;SQL Server 填sqlsrv - port:默认 3306(MySQL),如自定义过端口需同步修改
-
char_set 和 dbcollat:建议设为
utf8mb4和utf8mb4_unicode_ci,兼容中文与 emoji
示例(MySQL):
$db['default'] = array( 'dsn' => '', 'hostname' => 'rm-xxxx.mysql.rds.aliyuncs.com', 'username' => 'admin_user', 'password' => 'YourStrongP@ssw0rd!', 'database' => 'myapp_db', 'dbdriver' => 'mysql', 'dbprefix' => '', 'pconnect' => FALSE, 'db_debug' => TRUE, 'cache_on' => FALSE, 'cachedir' => '', 'char_set' => 'utf8mb4', 'dbcollat' => 'utf8mb4_unicode_ci', 'swap_pre' => '', 'encrypt' => FALSE, 'compress' => FALSE, 'stricton' => FALSE, 'failover' => array(), 'save_queries' => TRUE );
验证连接与常见问题处理
保存配置后,在控制器中简单测试:
- 加载数据库:
$this->load->database(); - 执行查询:
$query = $this->db->query("SELECT VERSION() as ver"); echo $query->row()->ver; - 如返回 MySQL 版本号(如 8.0.32),说明连接成功
若报错,优先检查:
- Connection refused / Can't connect to MySQL server:网络不通,确认白名单、VPC、地域三者一致;或 RDS 未开启对应网络类型(如只开了内网却填了外网地址)
- Access denied for user:用户名/密码错误,或该账号没有目标数据库的访问权限(需进 RDS 控制台 → 账号管理 → 授权数据库)
-
Unknown database:
database字段填的是实例 ID 或不存在的库名,不是你手动创建的库名 - PHP 报
mysql extension is not loaded:CodeIgniter 3.x 默认用 mysql 驱动,但 PHP 7.0+ 已移除;请改用mysqli驱动('dbdriver' => 'mysqli')并确认 PHP 启用了 mysqli 扩展
进阶建议:多环境与安全
生产环境建议进一步优化:
- 将数据库配置从
database.php移出,通过环境变量注入(如使用getenv('DB_HOST')),避免敏感信息硬编码 - 为不同环境(dev/test/prod)设置独立配置组,如
$db['production'],再通过$active_group = 'production';切换 - RDS 开启 SSL 连接时,CodeIgniter 3 不原生支持;可考虑升级到 CI4(原生支持 PDO + SSL 参数),或在连接后手动执行
SET SESSION ssl_cipher='DHE-RSA-AES256-SHA';


















