连接腾讯云CDB需确保CVM与CDB同VPC,安全组放行3306端口,白名单填写子网网段。配置文件需显式声明charset为utf8mb4,建议设置prefix为空字符串。账号权限需独立管理,主从实例库名、用户名、密码需完全一致。读写分离需满足TP6三要素,事务与锁查询自动走主库。
ThinkPHP 连接腾讯云 CDB(MySQL 版),说起来配置文件本身没什么玄乎的,但真正坑人的地方在于——你必须严格匹配 CDB 实例的网络环境、权限结构和连接规范,否则就是连不上、读写异常或者主从失效。关键不在于“怎么写”,而在于“写对什么”。
先说说最基本的网络问题。CDB 默认不开放公网,你必须让 CVM 和 CDB 待在同一个 VPC 和子网下,或者通过内网专线、对等连接把路打通。如果跨地域或跨 VPC,配置写得再漂亮也白搭,超时失败是家常便饭。
长期稳定更新的攒劲资源: >>>点此立即查看<<<
cdb-xxx.mysql.tencentyun.com),别拿外网地址来试。10.0.1.0/24),只填单个 CVM 内网 IP 是不行的,别问我怎么知道的。腾讯云 CDB 默认字符集是 utf8mb4。如果你的配置里少了 charset,或者写成了 utf8,那中文乱码、emoji 插入失败、建表报错这些坑你大概率会踩一遍。prefix 虽然不是强制项,但如果不设,ThinkPHP 在多库共用同一账号时可能误判表名,引发意料之外的错误。
'charset' => 'utf8mb4'。'prefix' => '',避免框架自动拼接逻辑捣乱。;charset=utf8mb4,例如:mysql:host=cdb-xxx.mysql.tencentyun.com;dbname=myshop;charset=utf8mb4。CDB 主实例和只读实例的账号权限是独立管理的。ThinkPHP 的读写分离配置依赖账号的实际能力——只读账号连到主库会报错,主账号连只读库则可能因为权限不足导致 SELECT 失败。听起来绕,实操更绕。
很多人以为只要把只读地址填进 read 数组就行了,结果发现根本没生效。ThinkPHP 6 要求同时满足三个硬性条件,缺一个都不行:
[['hostname' => 'cdb-ro-xxx.mysql.tencentyun.com', 'port' => 3306, ...]]。这不是 Bug,这是设计。只要你的代码出现以下任意一种情况,ThinkPHP 会自动把后续所有查询路由到主库:
如果业务中有大量“先查再改”的逻辑,建议评估一下是否真的需要把读操作包在事务里。多数情况下,普通的读取完全可以剥离出来,交给从库去扛,这样主库的压力会小很多。

侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述