
数据库分布式数据库云原生后端数据存储【免费下载链接】vitessVitess is a database clustering system for horizontal scaling of MySQL.项目地址https://gitcode.com/gh_mirrors/vi/vitess点击查看免费下载本篇文章系统梳理 Vitess 16.0 系列的补丁版本 v16.0.5 的完整变更内容覆盖 Bug 修复半同步复制、Online DDL、查询服务、VReplication、VTCombo、CI/Build 升级Go 1.20.8、vtorc 容器、MoveTables 新增强化等。通过结合当前仓库源码中的具体实现文件与测试用例帮助读者理解每个修复背后的底层原理、受影响组件以及升级到 v16.0.5 后可以获得的行为改进。版本定位与发布背景v16.0.5 是 Vitess 16.0 分支的一个补丁版本patch release其发布过程遵循 Vitess 标准的代码冻结code freeze流程相关动作由 PR [#14132] 完成。整个 v16 系列承载了 Vitess 在 MySQL 水平扩展、Online DDL、VReplication 数据迁移等方面的大量新特性而 v16.0.5 的职责则是在保持 API 与行为稳定的前提下修复上一阶段暴露出的缺陷、消除测试不稳定因素flakes、升级构建工具链并为后续版本扫清障碍。从变更分类看本次发布覆盖以下领域Bug fixesBuild/CI、Cluster management、Online DDL、Query Serving、VReplication、VTCombo 六个子类CI/BuildGo 工具链升级至go1.20.8、为 vtorc 提供专属容器镜像、docgen 文档生成器嵌入 commit IDDocumentation生成文档中主目录homedir路径匿名化EnhancementMoveTables 新增不创建路由规则的开关Internal CleanupBootstrap 基础镜像切换到 Debian Bullseye、超时测试挪包Testing移除 FOSSA 测试、清理 vreplication e2e 测试数据目录。下面按类别逐一深入解析。Bug 修复集群管理与半同步复制BackupShard 从自身 flags 获取备份选项问题描述BackupShard在备份操作时使用了错误来源的配置参数导致备份行为与命令行指定不一致。修复内容让BackupShard完全从自身的命令行 flags 中读取备份选项PR [#13819]。在 go/vt/vtctl/backup.go 中commandBackupShard定义了以下专属参数并逐项注入到BackupShardRequest--concurrency压缩与校验checksum任务并行数默认 4--allow_primary是否允许在主库上执行备份。注意若使用内置备份引擎builtin在主库备份期间会关闭主 MySQL--incremental_from_pos增量备份起点位置或基准备份名默认空值为auto时自动从最近一次成功备份的位置开始--upgrade-safe备份时使用innodb_fast_shutdown0保证备份可用于 MySQL 升级--mysql-shutdown-timeout关闭 MySQL 的超时时间默认mysqlctl.DefaultShutdownTimeout。修复之后调用方通过vtctl BackupShard keyspace/shard传入的参数会正确覆盖全局默认值不会再出现命令行设置了却未生效的错位问题。convertBoolToSemiSyncAction覆盖所有半同步插件类型问题描述convertBoolToSemiSyncAction方法未完整覆盖所有半同步semi-sync动作场景导致在部分 MySQL 版本上启用/禁用半同步的行为不正确PR [#13075]、回移植 [#13958]。修复内容该方法根据 MySQL 上实际加载的半同步插件类型决定返回的动作。修复后的实现位于 go/vt/vttablet/tabletmanager/rpc_actions.gofunc (tm *TabletManager) convertBoolToSemiSyncAction(ctx context.Context, semiSync bool) (SemiSyncAction, error) { semiSyncExtensionLoaded, err : tm.MysqlDaemon.SemiSyncExtensionLoaded(ctx) if err ! nil { return SemiSyncActionNone, err } switch semiSyncExtensionLoaded { case mysql.SemiSyncTypeSource, mysql.SemiSyncTypeMaster: if semiSync { return SemiSyncActionSet, nil } else { return SemiSyncActionUnset, nil } default: if semiSync { return SemiSyncActionNone, vterrors.VT09013() } else { return SemiSyncActionNone, nil } } }关键变化在于switch分支同时覆盖了mysql.SemiSyncTypeSourceMySQL 8.0.x 的 SOURCE 命名与mysql.SemiSyncTypeMasterMySQL 5.7 及更早的 MASTER 命名两种插件类型。此前仅识别其中一种会导致另一类 MySQL 实例上SemiSyncActionSet/Unset无法正确下发。SemiSyncAction枚举定义于 go/vt/vttablet/tabletmanager/rpc_actions.go包含SemiSyncActionNone、SemiSyncActionSet、SemiSyncActionUnset三态。错误路径当半同步插件完全未加载时若请求启用半同步semiSync true返回预定义错误VT09013其定义见 go/vt/vterrors/code.goFAILED_PRECONDITION级别消息为 semi-sync plugins are not loaded提示 Durability policy wants Vitess to use semi-sync, but the MySQL instances dont have the semi-sync plugin loaded.——即持久化策略durability policy要求半同步但底层 MySQL 实例未加载插件。调用链影响面该方法被集群管理的关键路径广泛调用包括ChangeType变更 tablet 类型rpc_actions.go随后通过fixSemiSyncAndReplication修正半同步确认ack行为备份流程中切换为BACKUP类型、恢复原类型时rpc_backup.go复制管理rpc_replication.go中SetReplicationSource、InitPrimary、ChangeTabletType等多个 RPC 入口以及SetTwoPCAllowed(..., semiSyncAction SemiSyncActionSet)对两阶段提交能力的联动控制。这意味着该修复直接影响主库切换PRS/ERS、备份期间的类型切换、复制源重置等操作中半同步的启停正确性是集群高可用行为的重要保障。VTComboDBDDL 插件竞态条件vtcombo本地开发用的一体化 Vitess 进程中 DBDDL 插件存在竞态条件PR [#13117]回移植 [#13741]。该问题在并发执行 DDL 相关操作时可能引发不可预期的行为修复后 vtcombo 对插件状态的读写具备正确的同步语义提升了本地开发与测试环境的稳定性。Bug 修复Online DDL 与 TableGCv16.0.5 在 Online DDL 子系统中打包了四项修复涉及迁移状态记录、产物清理、视图删除与元数据列类型。已取消迁移的 completed_timestamp 为空值修复 Online DDL 中已取消cancelled迁移的completed_timestamp为 nil 的问题PR [#13928]、回移植 [#13936]。此前取消迁移时该时间戳未被正确填充导致基于迁移完成时间的查询、清理与监控逻辑出现空指针或误判。修复后取消的迁移同样会获得合法的完成时间戳保证_vt_schema_migrations表的元数据一致性。清理取消迁移的产物并支持 --retain-artifacts核心变更取消cancel迁移后自动清理其遗留的 artifact影子表等中间产物并新增--retain-artifactsdurationDDL 策略参数PR [#14029]、回移植 [#14036]允许用户控制被取消迁移产物的保留时长。在 go/vt/schema/ddl_strategy.go 中通过isRetainArtifactsFlag识别该标志RetainArtifactsDuration()方法ddl_strategy.go解析出具体时长// RetainArtifactsDuration returns a the duration indicated by --retain-artifacts func (setting *DDLStrategySetting) RetainArtifactsDuration() (d time.Duration, err error) { opts, _ : shlex.Split(setting.Options) for _, opt : range opts { if val, isRetainArtifacts : isRetainArtifactsFlag(opt); isRetainArtifacts { if s, err : strconv.Unquote(val); err nil { val s } if val ! { d, err time.ParseDuration(val) } } } return d, err }该标志属于内部提示选项internal hint option因此在RuntimeOptions()ddl_strategy.go中被过滤不会作为运行时选项传递给执行引擎。同时ParseDDLStrategy会校验时长格式——如--retain-artifacts3这类缺失单位的写法将被拒绝见 ddl_strategy_test.go。端到端验证调度器测试 go/test/endtoend/onlineddl/scheduler/onlineddl_scheduler_test.go 使用--postpone-completion --retain-artifacts1s创建迁移并断言retainArtifactsSeconds 1另一组用例以--retain-artifacts1h验证保留 3600 秒同文件 L2087-L2111还有用例验证相同迁移上下文migration context下并发迁移的 artifacts 按保留窗口统一清理同文件 L2481-L2484。TableGC 支持 DROP VIEW此前 TableGC表垃圾回收流程只支持对表执行DROP TABLE删除视图时会失败。本次修复为 TableGC 增加了DROP VIEW支持PR [#14020]、回移植 [#14044]。从源码结构看TableGC 定义了完整的生命周期状态机见 go/vt/schema/tablegc.goHOLD表刚被重命名剥离如_vt_hld_uuid_ts_数据仍在用户有机会改回原名属安全期PURGE正在清除表数据此时表对用户已丢失EVAC等待 InnoDB 缓冲池、自适应哈希索引等页缓存逐出DROP尽快执行最终删除DROP TABLE/ 现在也包括DROP VIEW空串表示表已不存在。GC 表命名遵循_vt_(hld|prg|evc|drp)_32位uuid_14位时间戳_格式tablegc.goParseGCLifecycle支持以逗号分隔的 GC 生命周期配置且 DROP 状态被隐式包含tablegc.go。视图的 DDL 识别在 go/vt/schema/online_ddl.go 中由CreateView / DropView / AlterView共同处理。Online DDL 元数据列改为 JSON 类型修复 Online DDL 内部某列名称与类型将其改为 JSONPR [#14093]、回移植 [#14116]。这一调整使该字段可以容纳结构化数据为后续功能扩展提供了更灵活的元数据承载能力。Bug 修复查询服务Query Serving未知/不支持排序规则的 text 类型哈希错误修复执行报错 text type with an unknown/unsupported collation cannot be hashedPR [#13852]、回移植 [#13863]。该错误发生在将TEXT类型列用于需要哈希运算的场景如 Vindex 计算且其排序规则collation未知或不支持时。修复后系统对该类列的哈希行为给出正确结果或更明确的错误指引避免查询中断。大量谓词predicates不再超时修复处理大量谓词如IN (...)展开时查询超时的问题PR [#13979]、回移植 [#13981]。当谓词数量达到万级时原实现在谓词归一化/展开环节耗时过高修复优化了该路径的时间复杂度使大谓词集查询可以在限定时间内完成。join 引擎 OLAP 流式执行的数据竞争修复 join 执行原语join engine primitive在 OLAP 流式streaming模式下执行时存在的数据竞争PR [#14012]、回移植 [#14015]。该问题在并发流式 join 时可能导致读改写冲突修复为相关状态增加了正确的同步保护。代价模型纳入 subshard 操作码修复代价计算未包含 subshard 操作码的问题PR [#14023]、回移植 [#14026]。从源码结构看这属于查询规划器planner的代价估算环节执行计划中出现 subshard 操作按子分片路由时其额外开销此前未被计入总代价可能导致规划器选择次优计划修复后代价模型更准确路由决策更贴近实际执行成本。Bug 修复VReplication 与 VDiffVReplication 是本次修复数量最多的模块聚焦于 VDiff2 的稳定性与恢复正确性跳过易闪断的 VDiff2 Progress ETA 校验PR [#13804]、回移植 [#13816]VDiff2 Progress 命令返回的 ETA 属未来时间的断言在 CI 中不稳定先跳过该 flaky 检查避免误报失败恢复时续接 rows_copied 本地计数PR [#13949]、回移植 [#13962]当从另一台 tablet 恢复resume复制时需将已复制的行数同步到本地计数器避免恢复后行数统计偏差导致进度误判VDiff 默认 source/target cells 正确处理PR [#13969]、回移植 [#13983]修正 VDiff 在未显式指定 source、target 单元格时对默认单元格的处理逻辑将 rows_copied 查询加入忽略列表PR [#14040]近期新增的select rows_copied查询会被纳入 VReplication 的忽略查询列表防止其干扰复制状态判断TabletPicker 场景下正确切分 cell 值PR [#14099]、回移植 [#14102]VDiff 在使用 TabletPicker 时record 中逗号分隔的 cell 值需正确拆分否则单元格列表解析错误删除 VDiff 前清理其 controllerPR [#14107]、回移植 [#14124]删除一个 VDiff 时先清理对应 controller避免资源泄漏或重复清理引发的冲突。这些修复共同提升了 VDiff数据一致性校验在大型集群、跨单元格场景下的可靠性并减少 CI 中的随机失败。Bug 修复构建与 CI 的强制校验Static Code Checks 强制 changelog 同步PR [#14003]、回移植 [#14005]Static Code Checks Etc任务在./changelog目录内容过期如缺少新版本条目时直接失败从机制上保证每个版本都带 changelog启用 e2e race 测试失败判定PR [#13654]、回移植 [#14010]tools/e2e_test_race.sh此前未让 race 检测失败生效本次启用失败判定并修复了脚本中暴露的竞态问题。CI/Build、文档与工具链变更Go 升级至 1.20.8PR [#13932]v16.0.5 使用go1.20.8构建包含该版本的安全与稳定性修复专属 vtorc 容器PR [#14126]、回移植 [#14146]docker 构建体系新增独立的 vtorc 容器镜像便于单独部署 Vitess 的故障恢复编排组件 vtorcdocgen 嵌入 commit IDPR [#14056]、回移植 [#14073]自动生成的文档 frontmatter 中嵌入构建时的 commit ID提升文档与源码版本的可追溯性文档主目录匿名化PR [#14101]、回移植 [#14105]生成文档中涉及的主目录路径被匿名化处理避免泄露开发者本机用户路径Bootstrap 使用 Debian BullseyePR [#13757]、回移植 [#13921]基础镜像从旧 Debian 版本迁移至 Bullseye属于构建环境的内部清理Internal Cleanup超时测试移入独立包PR [#14028]、回移植 [#14031]查询超时相关测试迁移至不同 package属于测试组织的内部整理。EnhancementMoveTables 支持不创建路由规则本次发布唯一的 Enhancement 项PR [#13858]属于 VReplication 模块MoveTables 新增一个开关指定创建 workflow 时不生成路由规则routing rules。在 MoveTables 工作流中路由规则负责将原表的流量指向迁移后的新表。新增的 flag 允许在创建 workflow 时跳过路由规则创建适用于用户希望自行管理路由、或计划后续手动切换的场景。这为数据迁移流程提供了更细粒度的控制避免了workflow 创建即自动改路由这一默认行为的副作用。Testing 与发布流程移除 FOSSA 测试PR [#14119]、回移植 [#14121]在能以安全方式执行之前将 FOSSA开源合规扫描从 CI 中移除避免其在 CI 中产生不稳定或安全隐患清空 vtdataroot 再启动 vreplication e2e 测试PR [#13803]、回移植 [#13821]每个 vreplication 端到端测试开始前清空vtdataroot数据目录消除跨测试的残留数据导致的 flake代码冻结PR [#14132]v16.0.5 发布前对release-16.0分支执行代码冻结确保发布窗口内的变更可控。升级建议与影响评估对于运行 v16.0.x 系列的集群v16.0.5 属于低风险补丁升级主要收益集中在高可用正确性半同步插件类型覆盖含 MySQL 5.7 的MASTER类型修复了主备切换、备份、复制源重置中的半同步启停缺陷配合VT09013错误提示可快速定位持久化策略要求半同步但插件未加载的配置错误Online DDL 运维体验取消迁移的产物可自动清理--retain-artifacts提供保留窗口控制TableGC 可处理视图查询稳定性大谓词查询超时、join 流式执行数据竞争、代价模型偏差等问题得到修复VReplication/VDiff 可靠性恢复续接计数、单元格解析、controller 清理等细节修复减少了迁移与校验流程的误判。升级前建议在测试环境先行验证尤其涉及半同步与 Online DDL 的工作负载并确保./changelog与版本同步的 CI 校验在 fork 或镜像仓库中同样生效使用 vtorc 容器镜像的部署应确认镜像标签与 v16.0.5 匹配。深入阅读如需进一步验证本文引用的实现细节可查看仓库中的以下文件半同步修复实现go/vt/vttablet/tabletmanager/rpc_actions.go 与错误定义 go/vt/vterrors/code.goBackupShard 命令实现go/vt/vtctl/backup.go--retain-artifacts解析go/vt/schema/ddl_strategy.go 及端到端测试 go/test/endtoend/onlineddl/scheduler/onlineddl_scheduler_test.goTableGC 状态机go/vt/schema/tablegc.goOnline DDL 视图识别go/vt/schema/online_ddl.go策略解析测试go/vt/schema/ddl_strategy_test.go本版本完整变更清单changelog/16.0/16.0.5/changelog.md赞分享数据库分布式数据库云原生后端数据存储【免费下载链接】vitessVitess is a database clustering system for horizontal scaling of MySQL.项目地址https://gitcode.com/gh_mirrors/vi/vitess点击查看免费下载相关推荐scrcpy投屏使用教程3分钟把安卓手机画面搬到电脑上键鼠随心操控scrcpy投屏使用教程3分钟把安卓手机画面搬到电脑上键鼠随心操控 你有没有经历过这样的时刻想给同事演示手机里的新功能屏幕太小大家只能围过来挤着看想数据库分布式数据库云原生后端数据存储Zephyr west build 实战速查3步完成环境搭建、首次构建与固件烧录Zephyr west build 实战速查3步完成环境搭建、首次构建与固件烧录 Zephyr RTOS 的核心构建流程是 west build 命令从取代数据库分布式数据库云原生后端数据存储Vitess v22.0.2 发布解析稳定性修复、安全加固与备份/Online DDL/VReplication 核心改进Vitess v22.0.2 发布解析稳定性修复、安全加固与备份/Online DDL/VReplication 核心改进 导读 Vitess v22.0.2数据库分布式数据库云原生后端数据存储创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考