codeigniter支持在同一应用中配置多个数据库连接,只需在database.php中定义不同键名的配置组(如'default''writedb''reportdb'),并在模型中通过$this->load->database('group_name', true)按需加载使用,适用于读写分离、多租户、日志隔离等场景。

CodeIgniter 支持在同一应用中配置多个数据库连接,无需额外扩展,只需在 application/config/database.php 中定义不同键名的数据库配置组,并在模型或控制器中按需加载即可。
在 database.php 中添加多个连接组
每个连接组以唯一键名(如 'default'、'writedb'、'logdb')作为数组下标。所有配置项结构一致,关键区别在于主机、账号、库名等参数:
-
$db['default']:通常用于读操作或主业务库 -
$db['writedb']:可单独指向主库 IP,专用于写操作(配合读写分离) -
$db['reportdb']:指向报表专用库或远程分析库 - 各组都建议设
'pconnect' => TRUE,提升复用率,尤其在 Apache prefork 模式下更有效
在 Model 中加载并使用多个连接
通过 $this->load->database('group_name', TRUE) 加载指定连接,返回独立的 DB 实例对象:
-
TRUE参数表示返回对象而非自动赋值给$this->db - 可分别绑定为
$this->maindb、$this->writedb等属性,避免覆盖 - 示例:
$this->maindb = $this->load->database('default', TRUE); $this->writedb = $this->load->database('writedb', TRUE); $this->writedb->insert('orders', $data); // 写入主库 $this->maindb->get('products')->result(); // 查询从库或默认库
适配不同环境或用途的常见组合
实际项目中,多库配置常服务于特定架构目标:
-
读写分离:
default指向从库(只读),writedb指向主库(读写) -
多租户/分库:按客户 ID 或区域动态选择
tenant_us、tenant_eu等连接组 -
日志/审计隔离:将操作日志写入独立的
logdb,不影响主业务库性能 -
测试与生产切换:用
$active_group = 'test'快速切到测试库,无需改代码
注意事项和调试建议
多连接虽灵活,但需留意几个易错点:
- 确保每组的
'hostname'可达(例如远程主库需开放 MySQL 端口且授权对应 IP) - 避免在同一个请求中频繁切换连接却未释放——CI 不会自动 close,但 PHP 脚本结束时持久连接由底层管理
- 开启
'db_debug' => TRUE仅限开发环境,生产环境应关闭以防泄露敏感信息 - 若遇到“Too many connections”,检查是否误设了过多连接组且
pconnect未合理控制最大连接数(需配合 MySQL 的max_connections参数)











