MySQL Version Tokens 的会话令牌与服务器令牌有什么区别
MySQL Version Tokens中,服务器令牌列表描述管理端为这台服务器登记的状态;会话令牌列表描述当前客户端要求服务器具备的状态。设置会话令牌不会改变服务器列表,修改服务器列表也不会自动重写客户端的期望值。
官方文档地址:https://dev.mysql.com/doc/refman/8.4/en/version-tokens-reference.html。本文限定MySQL 8.4,讨论已安装Version Tokens插件及相关函数后的行为,不把它当成默认启用的数据库功能。
把两份令牌看成状态与期望
设想业务连接缓存了一个节点的路由信息,管理端随后调整节点职责。连接仍然活着,并不意味着它缓存的路由假设仍成立。Version Tokens提供一种让客户端声明假设、服务器参与比较的机制。
| 比较项 | 服务器令牌列表 | 会话令牌列表 |
|---|---|---|
| 表达什么 | 管理端登记的节点状态 | 当前客户端的匹配要求 |
| 典型维护入口 | version_tokens_set/edit/delete | SET @@SESSION.version_tokens_session |
| 查看入口 | version_tokens_show() | 当前会话系统变量 |
| 影响对象 | 连接到此服务器的匹配判断 | 此连接后续语句的匹配条件 |
两边使用相同的名字和值,但职责不同。业务客户端声明“我需要这项状态”,不等于管理端宣布“这台节点现在拥有这项状态”。命名应由应用统一约定,令牌并不会自行识别你的数据库拓扑。

用包含匹配检查路由假设
匹配要求是:会话声明的每个名字在服务器列表里都存在,而且对应值一致。服务器多出其他令牌不构成冲突。因此这不是把两段字符串做全量相等比较。
| 服务器状态示意 | 会话期望示意 | 含义 |
|---|---|---|
| zone=west;route_rev=r23 | zone=west | 会话要求被满足 |
| zone=west;route_rev=r23 | route_rev=r22 | 同名值不同,不匹配 |
| zone=west | route_rev=r23 | 所需名字不存在 |
空值或NULL会话要求不限制服务器令牌匹配,不能把它当成更严格的状态。不匹配会使后续语句报错。应用应把这个错误视为路由信息可能过期的信号,再依据管理信息处理,而不是在原连接上盲目重试同一条语句。
分别在管理连接和业务连接设置
以下仅用于已启用插件的独立测试实例。管理操作会改变该实例的令牌状态;不要拿示例覆盖生产令牌。调用Version Tokens函数需要VERSION_TOKEN_ADMIN权限,或官方已标记弃用的SUPER权限,应用应按职责分开管理账号与业务账号。
-- 管理连接:set替换整个服务器令牌列表,仅用于隔离演示实例。
SELECT version_tokens_set('zone=west;route_rev=r23');
-- 管理连接:查看登记状态,不代表检查数据库数据内容。
SELECT version_tokens_show();
-- 业务连接:声明当前连接的要求,不改服务器列表。 SET @@SESSION.version_tokens_session = 'zone=west'; -- 按前述示例状态,此语句的令牌匹配应满足;本文未执行SQL。 SELECT 42 AS demo_value;
管理端如果只想调整某些名字,应理解edit与set的区别:set替换列表,edit增加或修改指定项而保留其他项。演示没有直接引入真实业务表,目的是把“谁改哪份状态”讲清楚,不提供主从切换脚本或真实故障回放。

令牌匹配不能替代权限和复制一致性
一个典型反例是把令牌值命名为read,然后认为数据库自然禁止该连接写入。Version Tokens不会依据这个词分析SQL的读写性质;业务程序仍要遵守自己声明的用途,数据库权限、只读配置等也有各自职责。
另一个反例是把route_rev匹配当成“复制已经追平”。令牌的字符串相同,并不能单独证明数据版本、事务提交位置或复制延迟符合要求。管理端应在真正完成职责变化后按自己的协议维护状态,不能靠先改一个标签来代替实际条件。
这种模式适合已有管理面、明确路由约定且客户端能够处理不匹配错误的系统。如果客户端从不声明会话要求,或者遇错只无限重试,就没有形成完整的协作机制。它提供的是假设检查的接口,不是自动高可用系统。
连接池交付时保留会话约定
连接池复用的是物理连接,会话要求也需要纳入借出、归还和重连策略。工程上应明确每类请求需要什么令牌,由连接初始化或借用逻辑建立约定;配置失败的连接不应悄悄继续承接业务。不能只在某个请求开头设置一次,就假定以后所有调用者的要求都一致。
切换节点涉及在途事务、语句能否安全重放和幂等性,不能仅凭令牌错误一律重放写操作。处理方案应区分语句执行前的匹配失败与连接中断造成的执行结果不确定;本文不把两者混成同一种重试条件。
SET GLOBAL version_tokens_session是在改服务器令牌吗?
不是。这个变量虽有Global与Session作用域,也不能等同于通过version_tokens_set维护的服务器令牌列表。比较这两类状态时,应始终明确具体接口。
服务器增加一个会话未声明的令牌会失败吗?
不会仅因为这个额外令牌而不匹配。会话要求的是自己声明的那些名字与值,不能据此要求服务器列表只能包含它们。
两边令牌一样就说明客户端有访问权限吗?
不能。匹配只满足Version Tokens这一层条件,用户授权及其他数据库限制仍然独立存在。
依据:MySQL 8.4 Version Tokens参考、Version Tokens使用说明。连接池和重试部分为基于会话状态的工程建议,示例未在本机数据库执行。
Go genetlink 怎样给只读请求封装通用消息头
- 上一篇
- Go genetlink 怎样给只读请求封装通用消息头
- 下一篇
- Redis RANDOMKEY 返回空值与抽到空字符串键有什么区别
-
- 数据库 · MySQL | 1小时前 |
- MySQL 锁定服务怎样按命名空间取得读锁
- 324浏览 收藏
-
- 数据库 · MySQL | 2小时前 | MySQL · 数据库运维 · MySQL Version Tokens version_tokens_show
- MySQL Version Tokens 怎样列出服务器当前令牌
- 155浏览 收藏
-
- 数据库 · MySQL | 3小时前 |
- MySQL sys 语句延迟直方图的桶计数表示什么
- 429浏览 收藏
-
- 数据库 · MySQL | 4小时前 | MySQL · 慢查询 · 性能排查 · mysql sys Performance Schema 语句延迟
- MySQL sys 的语句平均延迟直方图怎样读取
- 120浏览 收藏
-
- 数据库 · MySQL | 4小时前 | MySQL · mysql gtid 主从复制 GTID_SUBSET
- MySQL GTID_SUBSET 处理空事务集合时怎样判断包含关系
- 250浏览 收藏
-
- 数据库 · MySQL | 5小时前 | MySQL · 主从复制 · mysql 复制 GTID_SUBSET GTID_SUBTRACT
- MySQL GTID_SUBSET 怎样判断一组事务是否已包含
- 415浏览 收藏
-
- 数据库 · MySQL | 10小时前 |
- MySQL BENCHMARK 的循环耗时为什么不能代替整条查询耗时
- 481浏览 收藏
-
- 数据库 · MySQL | 10小时前 |
- MySQL IS_UUID 返回一为什么不代表对应业务记录存在
- 363浏览 收藏
-
- 数据库 · MySQL | 11小时前 | MySQL · select ·
- MySQL ROW_COUNT 在普通 SELECT 后为什么返回负一
- 122浏览 收藏
-
- 数据库 · MySQL | 11小时前 |
- MySQL ROW_COUNT 为什么可能返回匹配行数或实际修改行数
- 131浏览 收藏
-
- 数据库 · MySQL | 12小时前 | MySQL · SQL · mysql date_format 日期格式 STR_TO_DATE GET_FORMAT
- MySQL GET_FORMAT 怎样为日期选择地区格式模板
- 178浏览 收藏
-
- 数据库 · MySQL | 12小时前 |
- MySQL BIN_TO_UUID 为什么需要与写入时使用相同的交换参数
- 303浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- PubMedQA
- 深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
- 804次使用
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 795次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 883次使用
-
- HELM
- 深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
- 853次使用
-
- MMBench
- MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
- 683次使用
-
- MySQL JSON_TABLE 展开数组时如何保留缺失字段
- 2026-09-10 501浏览
-
- MySQL 分区表怎么处理跨分区唯一键:分区列约束与建表取舍
- 2026-08-30 501浏览
-
- MySQL权限管理设置全攻略
- 2026-03-29 501浏览
-
- MySQL分片实现方法及常见方案解析
- 2025-06-24 501浏览
-
- MySQL表空间碎片怎么清理?超详细优化教程
- 2025-06-13 501浏览

