如何设置Sequelize默认useMaster为true,仅指定表启用只读复制?
Sequelize主从复制默认读主节点配置方案
问题背景
团队希望为部分数据表设置只读复制(读从库),但不想修改现有默认配置,当前已完成Sequelize主从复制基础配置,想实现数据表默认读取主节点,询问是否可以将Sequelize默认useMaster设为true。
现有配置代码:
const Sequelize = require('sequelize'); const options = { username: 'DATABASE_USERNAME', password: 'DATABASE_PASSWORD', database: 'DATABASE_NAME', port: 10, dialect: 'postgres', pool: { max: 10, min: 0, idle: 10000 }, dialectOptions: {}, replication:{ read:[{host:"read-host"}], // required write:{host:"write-host"} // required }, socketTimeout: 120000 } const sequelize = new Sequelize(options.database, options.username, options.password, options);
解决方案
- 可以将默认
useMaster设为true
在Sequelize初始化配置中添加useMaster: true参数,即可让所有查询默认走主节点。修改后的配置如下:
const Sequelize = require('sequelize'); const options = { username: 'DATABASE_USERNAME', password: 'DATABASE_PASSWORD', database: 'DATABASE_NAME', port: 10, dialect: 'postgres', pool: { max: 10, min: 0, idle: 10000 }, dialectOptions: {}, replication:{ read:[{host:"read-host"}], // required write:{host:"write-host"} // required }, useMaster: true, // 新增:默认读主节点 socketTimeout: 120000 } const sequelize = new Sequelize(options.database, options.username, options.password, options);
- 为部分数据表单独设置只读(读从库)
如果需要指定某张表的查询走从库,无需修改全局配置,只需在该表的查询语句中显式添加useMaster: false参数:
// 示例:查询User表时强制读从库 User.findAll({ where: { status: 1 }, useMaster: false });
也可以在模型定义阶段,为特定模型设置默认读从库:
const User = sequelize.define('User', { // 模型字段定义 }, { defaultScope: { useMaster: false // 该模型所有查询默认读从库 } });
内容的提问来源于stack exchange,提问作者栾学超
相关产品推荐
相关产品推荐

