如何配置备库读账号

更新时间:
复制 MD 格式

本文介绍如何通过ALTER USER ... READ_STRATEGY语法为PolarDB-X集群账号配置备库读策略,将临时查数、大数据拖数等读流量路由至Follower节点,避免影响Leader节点上的在线业务。

背景介绍

PolarDB-XDN(数据节点)基于Paxos多数派复制协议实现高可用,节点角色分为Leader、Follower、LoggerLearner。详情请参见高可用(RPO=0)

在日常运维中,DMS查数或大数据拖数等操作可能会打高DN Leader的资源,进而影响在线业务的稳定性。通过配置备库读账号,可以将此类查数、拖数流量路由至Follower节点,从而避免对Leader节点的影响,保障在线业务的正常运行。

警告
  • 核心规则:备库读仅路由读请求,写请求不会进入备库。只有不显式开启事务的SELECT语句会被路由到Follower节点。所有写操作(INSERTUPDATEDELETE等)以及显式事务(BEGIN ... COMMIT)中的查询,仍然路由到Leader节点执行。配置备库读账号不会改变写操作的路由行为。

  • 重要提醒:备库(Follower)承担着高可用切换的重要使命,需要对Leader的日志进行实时复制。高强度使用Follower可能会影响日志复制,拖慢高可用切换甚至导致切换失败。因此,备库读账号不可用于稳定的在线流量,仅适用于查数、拖数等少量随机流量场景。

备库读与读写分离的区别

在使用前,请先了解备库读与读写分离的区别,以选择适合您业务场景的方案:

对比项

备库读账号

读写分离

说明

使用的DN节点

主实例的Follower DN

只读实例的Learner DN

备库读直接复用主实例的Follower;读写分离使用独立的只读实例

是否参与Paxos投票

是,参与投票和决策

否,不参与投票和决策

Follower承担高可用切换职责,Learner不影响高可用

对系统的影响

有影响,可能影响高可用切换

无影响

高强度查询备库会拖慢日志复制

适用场景

临时查数、大数据拖数等少量随机流量

稳定的读流量分流

按流量稳定性与规模选择

选型建议:如果您的业务需要稳定的读流量分流,推荐使用读写分离方案。备库读账号更适合临时性的、少量的查数和拖数场景。

版本要求

  • 仅支持企业版实例。

  • 实例版本要求:

    • 2.5.0版本:需为polardb-2.5.0_5.4.20-20260312及以上。

    • 2.6.0版本:需为polardb-2.6.0_5.4.21-20260521及以上。

    说明

语法

通过以下语句为指定账号配置备库读策略:

ALTER USER 'user_name'@'hostname' READ_STRATEGY [follower | stale | none];

配置生效后,使用该账号连接实例发起的非事务内SELECT查询将被路由至Follower节点执行。

读策略说明

备库读支持两种读策略,您可以根据业务对数据一致性的要求进行选择:

策略

关键字

一致性

说明

强一致

follower

全局一致

可以查看到主实例上提交的最新数据,满足全局数据查询一致性。如果主备延迟过大(常见于DDL期间),查询会报错。

弱一致

stale

最终一致

查看当前Follower上的最新数据,如果主备间存在数据同步延迟,不会等待,查询到数据立即返回。

关闭

none

关闭备库读,恢复为默认行为。

说明

强一致与弱一致的区别在于是否下发LSN(Log Sequence Number)。强一致模式下,Follower需要追上LeaderLSN后才返回查询结果,而弱一致模式下则直接返回当前Follower上的数据。在读已提交(RC)及以下隔离级别不保证强一致。

注意事项

使用备库读前,请务必了解以下限制:

  • 备库读仅对读生效,写不会进入备库。只有不显式开启事务的SELECT语句会路由到Follower。所有写操作(INSERTUPDATEDELETE等)和显式事务中的查询仍路由到Leader。

  • 权限要求:只有高权限账号或账号自身可以配置备库读策略,其他账号无法配置。

  • 账号命名规则:user_name只能由字母、数字、下划线(_)和美元符号($)构成,否则会报错。

  • 作用域说明:账号是集群级别的,但备库读属性仅对主实例生效。

  • 切换读策略必须先关闭:对已启用备库读的账号,不能直接从一种策略切换到另一种策略(例如从follower直接改为stale),否则会报错ERR_EXECUTOR: read strategy already set。请先执行ALTER USER ... READ_STRATEGY none;关闭当前策略,再设置为新策略。

使用方法

步骤一:创建专用账号

推荐通过控制台创建账号,具体操作请参见创建账号。您也可以使用SQL语句创建:

CREATE USER 'newuser'@'%' IDENTIFIED BY 'mypassword';

步骤二:配置账号权限

根据您的业务需求配置相应权限。对于查数场景,推荐仅授予只读权限:

GRANT SELECT ON *.* TO 'newuser'@'%';

步骤三:配置备库读策略

使用高权限账号或该账号自身执行以下语句配置备库读策略。

  • 强一致备库读示例(推荐用于对数据一致性有要求的查数场景):

    ALTER USER 'newuser'@'%' READ_STRATEGY follower;
  • 弱一致备库读示例(适用于对延迟容忍度较高的拖数场景):

    ALTER USER 'newuser'@'%' READ_STRATEGY stale;
  • 关闭备库读示例:

    ALTER USER 'newuser'@'%' READ_STRATEGY none;

步骤四:验证配置是否生效

使用以下语句查看当前实例上所有备库读账号的路由规则(包括followerstale两种策略):

SHOW ROUTING_RULES;

返回结果中USER_NAME列对应配置了备库读的账号,ROUTING_TYPE列对应当前策略(followerstale)。如果只需查看强一致策略的账号,可以加过滤条件:

SHOW ROUTING_RULES WHERE ROUTING_TYPE = 'follower';

最佳实践示例

场景一:DMS查数专用账号(强一致)

适用于运维人员通过DMS查询线上数据、要求看到最新数据的场景:

-- 1. 创建账号(推荐通过控制台创建并配置相应权限)。
CREATE USER 'dms_reader'@'%' IDENTIFIED BY 'your_secure_password';
GRANT SELECT ON *.* TO 'dms_reader'@'%';

-- 2. 配置强一致备库读(使用高权限账号或 dms_reader 账号执行)。
ALTER USER 'dms_reader'@'%' READ_STRATEGY follower;

场景二:大数据拖数专用账号(弱一致)

适用于大数据团队定期拖取数据、对实时性要求不高的场景:

-- 1. 创建账号(推荐通过控制台创建)。
CREATE USER 'bigdata_sync'@'%' IDENTIFIED BY 'your_secure_password';

-- 2. 仅授予只读权限。
GRANT SELECT ON *.* TO 'bigdata_sync'@'%';

-- 3. 配置弱一致备库读(使用高权限账号或 bigdata_sync 账号执行)。
ALTER USER 'bigdata_sync'@'%' READ_STRATEGY stale;