当前位置:首页 > 文章列表 > 数据库 > MySQL > MySQL Version Tokens 的会话令牌与服务器令牌有什么区别

MySQL Version Tokens 的会话令牌与服务器令牌有什么区别

来源:17golang原创 2026-10-31 04:59:39 0浏览 收藏

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/deleteSET @@SESSION.version_tokens_session
查看入口version_tokens_show()当前会话系统变量
影响对象连接到此服务器的匹配判断此连接后续语句的匹配条件

两边使用相同的名字和值,但职责不同。业务客户端声明“我需要这项状态”,不等于管理端宣布“这台节点现在拥有这项状态”。命名应由应用统一约定,令牌并不会自行识别你的数据库拓扑。

管理端服务器状态与业务会话期望的静态关系
原创结构图:管理边界维护服务器列表,客户端边界维护会话列表,两者共同约束匹配判断。没有节点切换时序或实际运行数据。

用包含匹配检查路由假设

匹配要求是:会话声明的每个名字在服务器列表里都存在,而且对应值一致。服务器多出其他令牌不构成冲突。因此这不是把两段字符串做全量相等比较。

服务器状态示意会话期望示意含义
zone=west;route_rev=r23zone=west会话要求被满足
zone=west;route_rev=r23route_rev=r22同名值不同,不匹配
zone=westroute_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增加或修改指定项而保留其他项。演示没有直接引入真实业务表,目的是把“谁改哪份状态”讲清楚,不提供主从切换脚本或真实故障回放。

服务器列表修改接口与会话声明接口的职责边界
原创静态接口关系图:set与edit关联服务器列表,SESSION变量关联会话要求,匹配条件连接两份状态。连线仅表达依赖关系。

令牌匹配不能替代权限和复制一致性

一个典型反例是把令牌值命名为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使用说明。连接池和重试部分为基于会话状态的工程建议,示例未在本机数据库执行。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
Go genetlink 怎样给只读请求封装通用消息头Go genetlink 怎样给只读请求封装通用消息头
上一篇
Go genetlink 怎样给只读请求封装通用消息头
Redis RANDOMKEY 返回空值与抽到空字符串键有什么区别
下一篇
Redis RANDOMKEY 返回空值与抽到空字符串键有什么区别
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    804次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    795次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    883次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    853次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    683次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码