thinkphp多数据库配置关键在于config/database.php中connections数组的正确结构——连接名唯一、type显式、参数齐全。示例包含主库mysql、从库log_db和postgresql备份库pg_backup,并配.env分离敏感信息,支持db::connect()调用及模型绑定。

ThinkPHP 多数据库连接不靠猜、不靠试,关键在 config/database.php 里写对结构——连接名唯一、type 显式、参数齐全。下面是一份可直接复制粘贴、已验证无坑的配置模板(ThinkPHP 6+ 适用)。
一、标准多库配置(推荐直接用)
在 config/database.php 中,替换整个 return [...] 数组:
return [
// 默认连接(主库)
'default' => 'mysql',
// 所有额外数据库连接必须放在这里
'connections' => [
// 主库:读写
'mysql' => [
'type' => 'mysql',
'hostname' => env('DB_HOST', '127.0.0.1'),
'database' => env('DB_NAME', 'main_db'),
'username' => env('DB_USER', 'root'),
'password' => env('DB_PASS', ''),
'hostport' => env('DB_PORT', '3306'),
'charset' => env('DB_CHARSET', 'utf8mb4'),
'prefix' => '',
'deploy' => 0,
'rw_separate'=> false,
],
// 从库/日志库:只读
'log_db' => [
'type' => 'mysql',
'hostname' => env('LOG_DB_HOST', '192.168.1.100'),
'database' => env('LOG_DB_NAME', 'log_db'),
'username' => env('LOG_DB_USER', 'ro_user'),
'password' => env('LOG_DB_PASS', ''),
'hostport' => env('LOG_DB_PORT', '3306'),
'charset' => env('LOG_DB_CHARSET', 'utf8mb4'),
'prefix' => '',
'deploy' => 0,
'rw_separate'=> false,
],
// PostgreSQL 备份库(可选)
'pg_backup' => [
'type' => 'pgsql',
'hostname' => env('PG_HOST', '192.168.1.200'),
'database' => env('PG_NAME', 'backup'),
'username' => env('PG_USER', 'backup_user'),
'password' => env('PG_PASS', ''),
'hostport' => env('PG_PORT', '5432'),
'charset' => 'utf8',
'prefix' => '',
],
],
];
二、配套 .env 示例(安全分离敏感信息)
项目根目录 .env 文件内容(UTF-8 无BOM):
DB_HOST=127.0.0.1 DB_NAME=main_db DB_USER=root DB_PASS=your_main_password DB_PORT=3306 DB_CHARSET=utf8mb4 LOG_DB_HOST=192.168.1.100 LOG_DB_NAME=log_db LOG_DB_USER=ro_user LOG_DB_PASS=readonly_123 PG_HOST=192.168.1.200 PG_NAME=backup PG_USER=backup_user PG_PASS=pg_backup_pass
三、调用方式速查表
- 查从库数据:
Db::connect('log_db')->table('user_log')->select(); - 模型绑定指定库:
protected $connection = 'log_db';(写在模型类中) - 临时切换(不推荐高频用):
Db::connect(['type'=>'sqlite','database'=>'/tmp/test.db']) - 清缓存生效:
php think clear:config
四、避坑提醒(抄完必看)
- 连接名只能小写字母+下划线,如 log_db ✅,
LogDB❌,log.db❌ - 每个连接都必须带 type,漏写会报
Class 'PDO' not found -
prefix建议设为空字符串,跨库时避免自动拼接导致表不存在 - 事务不跨库,
Db::connect('a')->startTrans()和Db::connect('b')->startTrans()彼此无关
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











