上线多库项目须人工核对:配置隔离(各库唯一键名、显式参数)、模型绑定指定组、跨库查询加库前缀、控制器禁用无参加载、事务限单库、凭证外置环境变量且权限严格。

CodeIgniter多库项目上线部署,核心不是堆功能,而是稳住连接、分清职责、防住错配。多个数据库共存时,配置稍有偏差,就可能查错库、写混表、事务跨库失败。下面几处必须人工核对,不能靠开发环境惯性。
数据库配置文件要严格隔离
每个库对应独立的配置组,不能复用默认组名或靠注释区分:
- 在 application/config/database.php 中,为每个库定义唯一键名,如
$db['mysql_main']、$db['mysql_log']、$db['pgsql_report'] - 每组必须显式声明
hostname、username、password、database、DBDriver,避免继承默认值 - 生产环境禁用
DBDebug(设为false),但上线前务必用临时true跑一遍所有库的连接测试
模型必须绑定指定数据库组
模型不主动指定组时,默认走 default,极易误连。正确做法是:
- 在模型构造函数中,用
$this->db = $this->load->database('mysql_main', true);显式加载 - 若使用 CI4,需在 Model 类中设置
protected $DBGroup = 'mysql_main'; - 跨库关联查询(如 JOIN 主库用户表 + 日志库操作记录)必须用原生 SQL 或 Query Builder 的
from()显式加库前缀,例如from('mysql_log.log_table')
路由与控制器调用需规避隐式依赖
多库常伴随多业务模块,容易在控制器里混用数据库实例:
- 禁止在控制器方法内用
$this->load->database()无参调用,必须传入组名 - 若某控制器只操作日志库,可在其
__construct()中一次性加载并赋给属性,如$this->log_db = $this->load->database('mysql_log', true); - 事务控制仅限单库,
$this->db->trans_start()对跨库无效;涉及多库写入,需拆分为多个独立事务+补偿逻辑
环境变量与敏感信息分离
上线后数据库凭证不能硬编码在 config 文件中:
- CI3 项目:将数据库配置移至 application/config/production/database.php,并在主
database.php中通过if (ENVIRONMENT === 'production')加载 - CI4 项目:直接使用 .env 文件,按组定义变量,如
database.mysql_main.hostname=localhost,框架自动注入 - 服务器上确保
.env文件权限为600,且 Web 用户不可读目录外路径


















