如何通过ThinkPHP进行数据库主从切换演练及故障转移测试详解?
- 内容介绍
- 文章标签
- 相关推荐
本文共计947个文字,预计阅读时间需要4分钟。
ThinkPHP 5.1 的主从读写分离并非配置了就自动切换,必须显式开启部署模式和读写分离开关。常见现象包括明确写了多个数据库配置,代码示例如下:
关键配置项只有两个:
-
deploy => 1:启用分布式部署(主从/集群的基础开关) -
rw_separate => true:开启读写分离(注意不是rw_separate => 1,布尔值写错会导致静默失效)
其他如 master_num、slave_no 属于进阶控制,非必需。漏掉 deploy 或类型写错,整个主从逻辑直接跳过,TP 会退化为单库操作。
如何强制走从库?用 db('slave') 或 ->master(false)
默认情况下,SELECT 语句由 TP 自动路由到从库,但这个行为不可见、难验证。演练时需要确定性触发从库访问,避免“以为走了从库,其实没走”。
本文共计947个文字,预计阅读时间需要4分钟。
ThinkPHP 5.1 的主从读写分离并非配置了就自动切换,必须显式开启部署模式和读写分离开关。常见现象包括明确写了多个数据库配置,代码示例如下:
关键配置项只有两个:
-
deploy => 1:启用分布式部署(主从/集群的基础开关) -
rw_separate => true:开启读写分离(注意不是rw_separate => 1,布尔值写错会导致静默失效)
其他如 master_num、slave_no 属于进阶控制,非必需。漏掉 deploy 或类型写错,整个主从逻辑直接跳过,TP 会退化为单库操作。
如何强制走从库?用 db('slave') 或 ->master(false)
默认情况下,SELECT 语句由 TP 自动路由到从库,但这个行为不可见、难验证。演练时需要确定性触发从库访问,避免“以为走了从库,其实没走”。

