如何在Drupal 8中配置MySQL主从负载均衡以提升可靠性
嘿,既然你已经搞定了MySQL一主一从的复制架构,那Drupal 8的读写分离配置其实很 straightforward,我给你捋一遍实操步骤,都是我自己踩过坑后总结的靠谱方案:
配置Drupal 8实现MySQL主从读写分离&基础高可用
Drupal 8原生就支持多数据库连接配置,不用额外装模块就能满足你的读写分流需求,复杂场景再考虑加模块,先搞定基础配置:
1. 修改settings.php的数据库连接配置
找到站点根目录下的sites/default/settings.php,先备份原文件,然后替换数据库连接部分的代码:
// 主库配置(处理INSERT/UPDATE/DELETE写操作) $databases['default']['default'] = [ 'database' => '你的数据库名', 'username' => '主库账号', 'password' => '主库密码', 'host' => '主库IP/域名', 'port' => '3306', 'driver' => 'mysql', 'prefix' => '', 'collation' => 'utf8mb4_general_ci', ]; // 从库配置(处理SELECT读操作) $databases['default']['replica'][] = [ 'database' => '你的数据库名', // 和主库一致,因为复制已经同步了 'username' => '从库只读账号', // 强烈建议给从库单独创建只读权限的账号,安全第一 'password' => '从库密码', 'host' => '从库IP/域名', 'port' => '3306', 'driver' => 'mysql', 'prefix' => '', 'collation' => 'utf8mb4_general_ci', ];
如果以后加更多从库,直接在replica数组里继续追加配置项就行,Drupal会自动轮询实现负载均衡。
2. 验证读写分离是否生效
方式一:查数据库日志
分别查看主库和从库的通用日志/慢查询日志:
- 去Drupal后台编辑一篇文章(触发UPDATE操作),检查主库日志里有对应的SQL,从库没有
- 刷新前端页面(触发大量SELECT查询),检查从库日志里有对应的SQL,主库只有必要的系统查询
方式二:用Devel模块快速验证(可选)
如果你的测试环境装了Devel模块,开启查询日志后,页面底部会显示每个SQL使用的数据库连接,能直观看到哪些请求走了主库,哪些走了从库。
3. 基础故障转移逻辑
默认配置下,Drupal已经自带基础高可用:
- 如果从库挂了,所有请求会自动切换回主库执行,不会影响站点访问
- 如果主库挂了,写操作(比如提交表单、编辑内容)会失败,但读操作依然能从从库获取数据(前提是主从复制在故障前已经同步了最新内容)
如果需要更完善的主库故障转移(比如自动切换到备用主库),可以安装Database Failover模块,但你的一主一从场景,原生配置已经能应付大部分突发情况了。
4. 避坑提醒
- 尽量降低主从复制延迟,比如开启MySQL半同步复制,避免用户刚提交的内容在前端看不到
- 定期监控主从复制状态,防止复制中断导致数据不一致
- 绝对不要在从库执行任何写操作,会直接破坏主从同步关系
内容的提问来源于stack exchange,提问作者JayMore
相关产品推荐
相关产品推荐

