CodeIgniter多数据库连接指在同一项目中配置并使用多个独立数据库实例,支持读写分离、业务隔离、环境适配和微服务拆分;通过database.php中不同键名数组定义连接,在模型中用load->database('key', TRUE)按需加载。

CodeIgniter多数据库连接,是指在一个CodeIgniter项目中,同时配置并使用多个独立的数据库连接,每个连接可以指向不同的数据库服务器、不同的数据库名、甚至不同类型的数据库(如MySQL和PostgreSQL),从而在运行时按需切换或并行使用。
这不等于“一个数据库多个表”,而是真正意义上的多个数据库实例之间的协同操作。
多数据库连接的典型用途
-
读写分离:把写操作(INSERT/UPDATE/DELETE)发往主库(如
writedb),读操作(SELECT)分发到从库(如default或readdb),提升并发能力和稳定性。 - 业务隔离:用户数据存A库,日志数据存B库,订单数据存C库,避免单库膨胀和耦合。
-
环境适配:开发用本地库,测试用Docker库,生产用云数据库,通过
$active_group一键切换。 -
微服务式拆分:不同模块对接不同数据库,比如会员系统连
user_db,内容系统连content_db。
实现方式很简单:靠配置数组
在 application/config/database.php 中,每个数据库连接是一个以键名区分的子数组:
$db['default'] = array( /* 从库或默认库 */ ); $db['writedb'] = array( /* 主库,用于写 */ ); $db['logdb'] = array( /* 日志专用库 */ );
然后在模型(Model)里按需加载:
$this->main_db = $this->load->database('default', TRUE);
$this->write_db = $this->load->database('writedb', TRUE);
$this->log_db = $this->load->database('logdb', TRUE);注意第二个参数 TRUE 表示返回数据库对象(不自动赋给 $this->db),便于多实例共存。
关键细节不能忽略
- 所有连接组共享同一套驱动配置逻辑,但彼此完全独立,互不影响;
-
pconnect => TRUE可启用持久连接,对多连接场景尤其重要,减少反复握手开销; - 不同连接可设不同字符集、前缀、调试开关,适合混合环境;
- CI本身不自动做读写路由,需要你在模型或服务层手动控制哪个操作走哪个库。
本质上,多数据库连接是CodeIgniter通过数组键名机制提供的轻量级连接抽象,灵活、低侵入,不需要改框架源码。


















