gt-checksum v4.0.0 新功能解读系列文章(6):权限预检与修复安全策略——先确认能看见,再决定怎么修

SpringBoot+Vue+MySQL 高校学科竞赛平台 完整可运行版(源码+文档) 本项目基于SpringBoot+Vue+MySQL构建高校学科竞赛管理平台,覆盖学生、教师、领队教师、管理员四大角色,实现竞赛发布、报名、刷题、评分、公示等全流程闭环管理。系统架构清晰,技术主流,配套完整源码、数据库脚本、万字论文、开题报告、答辩PPT及部署文档,支持一键运行,适用于毕业设计、课程设计及院系二次开发,真正实现“开箱即用”。 阅读详情

在数据校验和修复场景中,权限不足是最容易被误判的问题之一:看不到表,究竟是表不存在,还是当前账号没权限?

gt-checksum v4.0.0 完善了权限预检与修复安全策略,区分源端/目标端角色,按实际场景检查最小权限,并在目标端表不可见时优先提示权限不足,避免误生成危险的修复 SQL。


一、功能简介

v4.0.0 对权限预检和修复安全策略做了一次系统性增强,核心目标是:更符合最小权限原则、更容易排查权限问题、更安全地处理在线修复。

主要变化如下:

能力说明
源端/目标端角色区分源端只检查读取权限,目标端根据 checkObject 和 datafix 检查实际修复所需权限
通配/映射规则压缩检查支持 db.*、db.t%、srcdb.*:dstdb.* 按源端/目标端角色压缩权限检查目标
空匹配权限提示指定库表不可见或匹配为空时,提示检查权限,并给出 SHOW GRANTS / GRANT SELECT 建议
目标端不可见保护目标端表元数据不可见时,先提示权限不足,不再直接当作缺表生成建表修复 SQL
非 data 对象保守修复struct / routine / trigger 即使配置 datafix=table,也强制导出 fix SQL,不直接在线修改目标对象

这次变化不是简单增加几条权限检查,而是让权限预检逻辑真正理解“源端”和“目标端”的职责差异。


二、功能作用及使用场景深入解读

2.1 为什么需要重新设计权限预检?

在 v3.x 或更早版本中,权限检查容易出现两类问题:

问题一:权限要求过高

源端通常只是被读取的一方,按最小权限原则,只需要读取元数据和数据的权限。但如果源端也被要求具备 INSERT、DELETE、ALTER 等修复权限,就会增加授权成本,也不符合生产环境的安全规范。

问题二:权限不足被误判为对象不存在

MySQL 的 information_schema 查询结果受权限影响。如果当前账号没有权限查看某张表,这张表可能不会出现在元数据查询结果中。此时工具如果直接判断“目标端缺表”,就可能误生成 CREATE TABLE 修复 SQL,导致目标端数据被覆盖或结构被破坏。

问题三:非 data 对象在线修复风险高

checkObject=struct / routine / trigger 涉及 DDL、存储过程、触发器等对象变更。如果配置了 datafix=table 就直接在线修改目标端对象,风险远高于普通数据行修复。

因此,v4.0.0 的策略是:

源端尽量只读,目标端按需检查;对象不可见先怀疑权限,不轻易当作不存在;非 data 对象只导出 SQL,不直接在线执行。

2.2 源端/目标端角色区分:最小权限原则

v4.0.0 在权限预检接口中引入了 accessRole 概念,明确区分 source 和 dest。同样是 checkObject=data,源端和目标端需要的权限不同。

MySQL-family 权限矩阵:

场景源端所需权限目标端所需权限
checkObject=data, datafix=fileSELECTSELECT
checkObject=data, datafix=tableSELECTSELECT、INSERT、DELETE
checkObject=struct, datafix=fileSELECTSELECT
checkObject=struct, datafix=tableSELECTSELECT、ALTER(预检结构修复权限)
checkObject=triggerTRIGGERTRIGGER
checkObject=routine按 MySQL 版本检查例程定义可见性按 MySQL 版本检查例程定义可见性

其中一个重要修正是:

普通 checkObject=data 数据校验不再强制要求未实际使用的 REPLICATION CLIENT 权限;datafix=table 时 MySQL 目标端也不再误要求 ALTER 权限。

2.3 Oracle 权限也按角色区分

Oracle 场景下同样区分源端和目标端角色:

场景源端所需权限目标端所需权限
checkObject=data, datafix=fileSELECT ANY TABLE 或对象级 SELECTSELECT ANY TABLE 或对象级 SELECT
checkObject=data, datafix=tableSELECT ANY TABLE 或对象级 SELECTSELECT ANY TABLE、INSERT ANY TABLE、DELETE ANY TABLE,或对象级等价权限
checkObject=struct, datafix=tableSELECT ANY TABLE 或对象级 SELECT结构修复相关 ALTER 权限

这对 Oracle → MySQL 异构迁移尤其重要:源端 Oracle 账号通常由业务系统或第三方提供,能授予只读权限就不应要求写权限。

2.4 通配与映射规则压缩检查

gt-checksum 支持多种表选择方式:

tables=db.*
tables=db.t%
tables=srcdb.*:dstdb.*
tables=srcdb.orders:dstdb.orders_new

v4.0.0 在权限预检中会保留原始 tables 规则,并按源端/目标端角色压缩检查目标。

示例一:普通通配

tables=sbtest.*

如果元数据展开后有 sbtest.t1、sbtest.t2、sbtest.t3,权限检查不会机械地逐表检查三次,而是压缩为:

sbtest.*

如果账号拥有 GRANT SELECT ON sbtest.*,就可以覆盖该库下所有表。

示例二:源端到目标端映射

tables=srcdb.*:dstdb.*

权限预检会按角色拆开:

角色检查目标
源端srcdb.*
目标端dstdb.*

这避免了用源端库名去检查目标端权限,或者用目标端库名去检查源端权限的混淆问题。

示例三:部分通配

tables=db.order%

% 用于表名部分通配。v4.0.0 会在权限提示中尽量归并为库级授权建议,例如:

GRANT SELECT ON `db`.* TO '<source_user>'@'<host>';

注意:表名部分通配请使用 %,不要使用 *。db.* 表示整库所有表是合法的,但 db.t* 这类写法会被提示改为 db.t%。

2.5 指定库表不可见或匹配为空时给出授权建议

过去当 tables=sbtest.* 匹配不到任何表时,用户往往只能看到类似 No tables to check 的提示,但不知道到底是:

  • 表真的不存在?
  • tables 配置写错?
  • 当前账号没有权限看见这些表?

v4.0.0 对这种场景增加了更明确的权限排查提示。

当源端元数据为空,或源端元数据非空但指定库表匹配不到时,日志会提示:

current source user may lack SELECT privilege
SHOW GRANTS FOR CURRENT_USER();
SHOW GRANTS FOR '<user>'@'<host>';

并给出类似下面的授权建议:

GRANT SELECT ON `sbtest`.* TO '<source_user>'@'<host>';

终端层面也会给出更清晰的提示:

gt-checksum: No tables to check. Check whether tables is correct, whether the selected objects exist, and whether the current DB user has privileges on them. See gt-checksum.log for SHOW GRANTS / GRANT SELECT suggestions or set logLevel=debug

这样用户可以第一时间从日志中获取可执行的排查方向,而不是盲目修改 tables 配置。

2.6 目标端表不可见:先提示权限不足,不误判为缺表

这是 v4.0.0 权限预检中非常关键的一项安全修复。

假设配置如下:

checkObject=struct
datafix=file
tables=db.orders

源端表 db.orders 存在,但目标端账号没有权限查看目标端同名表。此时目标端元数据查询可能返回“表不存在”。

如果直接当作缺表处理,工具可能生成:

CREATE TABLE IF NOT EXISTS `db`.`orders` (...);

但实际上目标端表可能已经存在,只是当前账号看不见。这类修复 SQL 显然是不安全的。

v4.0.0 的处理方式是:

  1. 当发现源端存在、目标端元数据不可见时,先执行目标端权限预检;
  2. 如果目标端账号缺少必要权限,则拒绝把它当作缺表;
  3. 终端提示:
gt-checksum: Insufficient access permission to target table. Check gt-checksum.log for details or set logLevel=debug

日志中会进一步说明:

Target table db.orders is not visible in metadata and target user lacks required privileges ... Refuse to treat it as missing; please grant target table privileges and retry.

这可以避免“目标端表不可见 → 误判缺表 → 生成错误建表修复 SQL”的连锁风险。

2.7 checkObject=data 的表存在性不一致处理

在 checkObject=data 模式下,如果源端或目标端表缺失,v4.0.0 不会继续做数据校验,也不会在 data 模式中直接生成结构修复 SQL,而是记录为 DDL 差异:

DIFFS = DDL-yes
Rows  = table missing on target / table missing on source / table missing on both source and target

并提示用户使用:

checkObject=struct

重新检查并修复表结构。

这让 data 模式职责更清晰:data 模式只处理数据差异,结构缺失交给 struct 模式。

2.8 routine 权限预检按 MySQL 版本给建议

MySQL 不同版本读取存储过程/函数定义所需权限并不完全相同。v4.0.0 对 checkObject=routine 做了版本化授权提示:

MySQL 版本例程定义读取建议
MySQL 8.0.20+SHOW_ROUTINE 或全局 SELECT
MySQL 8.0.0 - 8.0.19全局 SELECT
MySQL 5.6 / 5.7、MariaDB例程 definer,或 SELECT ON mysql.proc / SELECT ON mysql.*

例如 MySQL 8.0.20+ 场景中,日志会给出类似建议:

GRANT SHOW_ROUTINE ON *.* TO 'user'@'%';

MySQL 5.7 / MariaDB 场景中,则可能建议:

GRANT SELECT ON `mysql`.`proc` TO 'user'@'%';

这比单纯提示“权限不足”更容易落地。

2.9 非 data 对象:datafix=table 也强制导出 SQL

v4.0.0 的另一个重要安全策略是:

checkObject=struct / routine / trigger 即使配置了 datafix=table,也不会直接在线修改目标对象,而是强制导出 fix SQL 文件,供人工审核后再执行。

例如:

checkObject=struct
datafix=table
fixFileDir=fixsql

启动时会提示:

gt-checksum: [WARN] checkObject=struct with datafix=table does not directly repair target objects; force exporting fix SQL file to fixsql for manual review

运行时也会记录日志:

checkObject=struct with datafix=table does not directly repair target objects; force exporting fix SQL file for manual review.

这意味着结构、例程、触发器等对象修复都进入“先导出、再审核、后执行”的保守流程,避免 DDL 或对象定义在未审核情况下直接在线变更。


三、功能使用演示

3.1 源端只读、目标端在线修复授权

对于普通数据校验并在线修复:

checkObject=data
datafix=table
tables=db.*

推荐授权方式:

-- 源端:只读
GRANT SELECT ON `db`.* TO 'checksum_src'@'%';

-- 目标端:读取 + 数据修复
GRANT SELECT, INSERT, DELETE ON `db`.* TO 'checksum_dst'@'%';

不需要给源端 INSERT / DELETE / ALTER,也不需要在 data 模式下给目标端 ALTER。

3.2 通配规则权限预检

配置:

tables=sbtest.*
checkObject=data
datafix=file

如果当前源端账号没有权限读取 sbtest 库,日志会提示:

current source user may lack SELECT privilege on the selected schema/table
SHOW GRANTS FOR CURRENT_USER();
SHOW GRANTS FOR '<user>'@'<host>';
suggested source GRANT examples: GRANT SELECT ON `sbtest`.* TO '<source_user>'@'<host>';

用户可以按提示检查当前账号授权:

SHOW GRANTS FOR CURRENT_USER();

并补充授权:

GRANT SELECT ON `sbtest`.* TO 'checksum_src'@'%';

3.3 映射规则权限预检

配置:

tables=srcdb.*:dstdb.*
checkObject=data
datafix=table

预期权限:

-- 源端检查 srcdb.*
GRANT SELECT ON `srcdb`.* TO 'checksum_src'@'%';

-- 目标端检查 dstdb.*
GRANT SELECT, INSERT, DELETE ON `dstdb`.* TO 'checksum_dst'@'%';

这类场景在跨库迁移中很常见,v4.0.0 会按源端/目标端角色分别压缩和检查,避免授权建议混用库名。

3.4 目标端表不可见时的保护

配置:

checkObject=struct
datafix=file
tables=db.orders

如果目标端账号没有权限查看 db.orders,运行结果不再是直接生成建表 SQL,而是终端提示:

gt-checksum: Insufficient access permission to target table. Check gt-checksum.log for details or set logLevel=debug

此时应先检查目标端授权:

SHOW GRANTS FOR CURRENT_USER();

并补充必要权限后重新执行。

3.5 非 data 对象强制导出 fix SQL

配置:

checkObject=struct
datafix=table
fixFileDir=fixsql

即使设置了 datafix=table,gt-checksum 也不会直接在线执行结构修复,而是导出:

fixsql/table.db.orders.sql

用户需要人工审核:

cat fixsql/table.db.orders.sql

确认无误后,再使用 repairDB 或手工执行。


四、最佳实践及使用约束

4.1 最佳实践

1. 源端账号坚持只读原则

源端用于读取数据和元数据,不应授予写入或 DDL 权限:

GRANT SELECT ON `db`.* TO 'checksum_src'@'%';

这既满足校验需要,也降低误操作风险。

2. 目标端按 datafix 模式授权

如果只生成修复 SQL:

datafix=file

目标端通常只需要 SELECT 权限。

如果在线修复数据:

datafix=table
checkObject=data

目标端需要:

GRANT SELECT, INSERT, DELETE ON `db`.* TO 'checksum_dst'@'%';

3. 遇到 No tables to check 先看日志授权建议

不要只检查 tables 配置,也要检查当前账号是否能看见指定库表:

SHOW GRANTS FOR CURRENT_USER();

日志中的 GRANT SELECT 建议通常能直接定位缺失授权。

4. 使用映射规则时分别检查源端和目标端授权

例如:

tables=srcdb.*:dstdb.*

不要只给 srcdb.* 授权,也要确认目标端账号拥有 dstdb.* 的相应权限。

5. 非 data 对象坚持人工审核

结构、例程、触发器变更建议始终走:

导出 fix SQL → 人工审核 → repairDB 或手工执行 → 重新校验

不要期望 checkObject=struct/routine/trigger + datafix=table 直接在线修改目标对象。

6. routine / trigger 场景提前确认版本与权限

不同 MySQL / MariaDB 版本读取 routine 定义的权限差异较大。执行前建议先确认版本,并按日志提示补充 SHOW_ROUTINE、全局 SELECT 或 mysql.proc 读取权限。

4.2 使用约束

1. 权限预检依赖当前账号可见的元数据

MySQL 的元数据可见性受权限影响。即使对象真实存在,当前账号没有权限时也可能查询不到。因此 v4.0.0 会优先提示权限不足,但最终仍需要 DBA 根据实际对象和授权情况确认。

2. db.t* 不是合法的部分通配写法

表名部分通配请使用 %:

# 推荐
tables=db.t%

# 不推荐/会被提示修正
tables=db.t*

只有 db.* 这种整库所有表写法中的 * 是合法的。

3. data 模式不负责结构修复

checkObject=data 发现源端或目标端表缺失时,会标记为 DDL-yes 并跳过数据校验。需要修复表结构时,应切换到:

checkObject=struct

4. 目标端表不可见不会被当作缺表自动修复

如果目标端表元数据不可见且权限不足,程序会拒绝生成缺表修复 SQL。必须先补齐目标端权限,再重新执行。

5. datafix=table 不代表所有对象都在线修复

v4.0.0 中,只有 checkObject=data 的数据差异才允许在线修复。struct / routine / trigger 即使配置 datafix=table,也会强制导出 fix SQL。

6. 授权建议是参考模板,不会自动执行

日志中的 GRANT 语句用于排查和参考,不会由 gt-checksum 自动执行。实际授权仍需 DBA 根据安全策略、账号范围和主机来源调整后执行。


五、总结

gt-checksum v4.0.0 的权限预检与修复安全策略升级,从“能不能跑”进一步提升到“是否以正确、安全、最小权限的方式运行”。

这次增强带来的价值包括:

  • 源端/目标端权限职责清晰,符合最小权限原则;
  • 通配与映射规则按角色压缩检查,授权建议更准确;
  • 指定库表不可见或匹配为空时,给出 SHOW GRANTS / GRANT SELECT 排查路径;
  • 目标端表不可见时优先提示权限不足,避免误判缺表并生成危险修复 SQL;
  • 非 data 对象不再直接在线修复,统一导出 SQL 供人工审核。

一句话总结:先确认账号“看得见、权限够”,再决定数据怎么校验、对象怎么修复。


相关阅读

STM32F103C8T6实战:从零搭建三相SPWM逆变器(附MATLAB仿真、PCB、源码) 本文详细介绍了如何使用STM32F103C8T6单片机从零搭建三相SPWM逆变器,涵盖硬件选型、PCB设计、SPWM算法实现及MATLAB仿真。项目提供完整的工程文件,包括源码、PCB设计和仿真模型,适合电子工程师和学生进行实践学习。通过本教程,读者可以掌握逆变器设计的核心技术和调试方法。 阅读详情

相关推荐

从零搭建私有AI工作站:Ollama+DeepSeek+Dify本地化部署全攻略

本文提供了一份详尽的本地化AI工作站搭建指南,核心在于实现数据安全与离线可用。通过整合Ollama、DeepSeek与Dify三大工具,手把手教你完成从环境配置、模型部署到可视化应用构建的全过程,重点解决了Dify连接Ollama等关键步骤,助你打造一个完全自主可控的私有AI开发环境。

weixin_28396629的博客 311

gt-checksum v4.0.0 新功能解读系列文章(4):SSL 加密连接——数据校验传输安全再升级

如果没有 SSL 加密,攻击者可以:- 在中间拦截数据包,窃取敏感客户信息- 篡改校验结果,让你误以为数据一致(实际上已被修改)- 重放攻击,导致校验流程混乱尤其是在金融、医疗等合规要求严格的行业,明文传输数据简直就是“自杀式操作”。gt-checksum v4.0.0 的 SSL 加密功能,就是给你的数据校验过程加了一把“密码锁”。## 故障排查与常见问题如果 SSL 连接失败,通常有以下原因:| 错误信息 | 可能原因 | 解决方案 ||---------|---------|----------||

wzd9X8yn9的博客 218

抖音私信卡片私信名片的原理分析

简单说一下它的功能吧:抖音私信卡片,解决了客户封号严重、引流效率低的痛点,所以从去年到现在,依然是热销品。"抖音快手私信名片链接跳转"是2022年抖音快手引流最新技术,可以生成卡片链接,支持标题、描述、logo以及跳转落地页的完全自定义配置.支持微信公众号和微信号复制唤起微信客户端app添加,同时也支持任意链接落地页跳转提高粉丝引流转化率,关注转化率,引流转化率,安全绿色私信卡片功能1、跳转微信用户点击卡片,自动跳转微信界面,显示好友和群聊二维码2、跳转链接用户点击卡片,自动跳转到指定链接,支持任意链接。3

m0_71385839的博客 5189

gt-checksum v4.0.0 新功能解读系列文章(3):反向回滚 SQL——修复可审计、可回退

gt-checksum v4.0.0 新功能解读(3):反向回滚 SQL ✅ 一键开启 genRollSQL=ON,修复 SQL 自动生成反向回滚操作 ✅ DELETE→INSERT、INSERT→DELETE、TRUNCATE 三种映射策略,覆盖全场景 ✅ 回滚 SQL 只写文件不在线执行,人工审计后通过 repairDB 回退,安全可控 ✅ 无主键表自动合并重复 DELETE LIMIT,回滚文件更精简 ✅ 目标端整表为空时生成 TRUNCATE 回滚,高效且不遗漏 ✅ 与断点续

GreatSQL2021的博客 342

VCSA的vmware-updatemgr服务无法启动和vSAN界面报“certificate chain is not trusted and thumbprint doesn‘t match”处理

"Unable to update CM service info"和"Server certificate chain is not trusted and thumbprint doesn't match"问题处理

jetliu05的博客 1883

我用 Claude Code 给 Spring Boot 老项目做了一次代码 Review:查出 4 类隐藏问题

接手 Spring Boot 老项目时,真正麻烦的往往不是编译报错,而是分散在业务代码中的空指针、N+1 查询、异常吞没和并发隐患。本文记录一次使用 Claude Code 辅助代码 Review 的完整流程,并给出提示词、Java 示例、修改方案和人工复核方法。

海波的专栏 399

RedHat9下GT4全安装

RH9下GT4全安装一 安装jdk-1_5_0_04-linux-i586-rpm.bin   以下操作以root帐号执行  1 首先确保有执行该文件的权限    chmod 755 jdk-1_5_0_04-linux-i586-rpm.bin  2 ./jdk-1_5_0_04-linux-i586-rpm.bin   会出现协议书类的一直回车直到显示   Do you agree to th

zgbsoap的专栏 2327

EEGLAB安装、EDF数据导入、EEG预处理(Matlab)

目录下载和安装下载安装遇到问题及解决方案导入EDF数据EEG预处理 下载和安装 下载 链接:https://pan.baidu.com/s/17eMT6B7LgZ4PyqWvD5ixmg 提取码:12gz 安装 **第一步:**将下载下来的文件解压,修改名称为eeglab,将此文件夹存放在matlab的安装目录里的toolbox文件夹下,下图是我的路径,需要拷贝到自己相对应的路径中 第二步: 打开Matlab软件,点击主页中的设置路径 设置路径 点击添加并包含子文件夹,将eeglab文件夹添加进来,保

y18771025420的博客 1万+

MySQL 索引深入理解:B+ 树、二级索引、联合索引与查询优化

理解二级索引后,就可以理解回表了。SELECT *MySQL 的执行过程分为三个步骤。覆盖索引(Covering Index)并不是一种独立的索引类型,而是一种查询效果。SQL 查询需要的所有字段,都能够直接从某个索引中获得,不需要再访问聚簇索引获取其他字段。例如:因为user_id已经包含在二级索引中,所以 MySQL 可以直接返回结果。不需要回表。联合索引(Composite Index)是同时使用多个字段建立的索引。它的排序规则是:首先按照user_id排序。当user_id。

m0_64642997的博客 135

深入理解DQN中的Q值:核心概念和应用

在强化学习中,Q值(或称为动作价值函数)是核心概念之一。Q值函数 ( Q(s, a) ) 表示在给定状态 ( s ) 下,采取动作 ( a ) 并遵循某策略后,智能体从当前状态到未来状态所能获得的预期总回报。简言之,Q值是评估特定状态和动作对的好坏的指标。

qlkaicx的博客 2975

封神台靶场,为了小芳,冲之——cookie注入

第二个靶场 打开网站 找一下注入点 一般在新闻这种里面点开看看 先判断是否存在注入 有waf 尝试了很多方法绕过都没成功,/and/,aandnd,AnD等一系列都没绕过去,乌鸡鲅鱼 删掉id=169 发现 然后判断cookie注入 在搜索框输入 Javascript:alert(document.cookie=”id=”+escape(‘169’)); 然后弹窗了(其中 “id=” 取决URL中的id= escape中的数值也是URL中id=的值)返回刚刚的页面,把ID删除后一样能正常显示。说明服务器能

Wubuqing的博客 653

MySQL 单点详解(14)

给定一条 SQL,联合索引的列该怎么排呢?

2401_88601046的博客 345

【推荐100个unity插件】对话系统插件——YarnSpinner-Unity插件

Yarn Spinner是一款专为游戏对话设计的脚本语言,适用于Unity等引擎。本文介绍了在Unity中安装和使用Yarn Spinner的完整流程:首先通过Package Manager添加仓库并安装插件;然后创建Yarn Script和Project文件,配置对话系统;接着编写Yarn脚本定义对话内容,并展示运行效果;最后讲解了按键控制和多语言本地化设置。该工具采用类似剧本的简洁格式,支持分支对话、条件逻辑等功能,能有效提升游戏叙事的开发效率。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2214

MySQL 的 REPEATABLE READ 到底能不能防幻读——从快照读、当前读到 Next-Key Lock

本文系统讲解 InnoDB 可重复读级别下的幻读问题:从三类读异常切入,剖析快照读依赖 MVCC、当前读依赖 Next-Key Lock 的双防线机制,用双会话实验复现幻读仍会出现的边界场景,并解释各数据库在幻读防护上行为分歧的根源。

大模型全栈工程师 · Thanks_ks 297

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Flink SQL 连接器实战:MySQL Source、Flink CDC 与 JDBC Sink 全解析

提供有界流读取,适合批处理和维表场景,简单直接但无法感知变更。MySQL CDC提供无界流读取,通过「全量快照 + binlog 增量」的方式实现实时捕获,是实时数仓的核心入口,但需要 MySQL 侧正确配置 binlog 和权限。JDBC Sink负责结果回写,关键在于区分仅插入流和更新流,更新流必须依赖主键完成 upsert。掌握这三者的差异,本质上就是掌握了 Flink 中「有界与无界」「追加与更新」这两组最基本的语义。

2401_83857914的博客 455

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

MySQL 中 DISTINCT 与 GROUP BY 哪个效率更高?

DISTINCT与GROUP BY在纯去重场景下,MySQL 8.0 中执行计划通常一致,效率基本相同。老版本(8.0.13 之前)GROUP BY有隐式排序开销,DISTINCT往往更快。需要聚合或HAVING时,只能用GROUP BY。效率的真正决定因素是索引和执行计划,而不是这两个关键字本身。所以,与其问「哪个更快」,不如问「我的查询有没有走对索引」。

2601_96709915的博客 326

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Docker 部署 WordPress+MySQL 高可用架构

点「安装 WordPress」

一直在努力学习的菜鸟 227

基于 FastAPI+LangChain+LangGraph+Agent+Vue3+MySQL 的房产数据采集与房价预测分析平台

本文介绍一个完整的「房产数据采集+AI房价预测」全栈项目,涵盖FastAPI异步后端、LangGraph Agent智能问答、爬虫采集、机器学习预测与Vue3前端,实现从数据采集到AI交互的闭环。项目融合多技术栈,具备真实业务场景与生产级设计(如降级策略、流式输出、多模型对比),兼具简历亮点与答辩演示优势,可系统性提升工程能力,并附高频面试题解析,是理想的技术综合实践项目。

深耕开发,专注编程实战。分享源码解析、项目搭建、问题排查笔记,沉淀技术,持续更新。 231

MySQL 8.0 双向主从复制故障修复与重建指南

MySQL 8.0 双向主从复制故障修复 SOP:XtraBackup 重建备用节点,解决 GTID 1236 / 历史日志冲突

「YYL DBA手记」 数据库 · 架构 · 运维 · 实战 yyldba.blog.youkuaiyun.com 297

MySQL 8.0停服了,信创替代的窗口正在关闭

最近跟几个做信创的朋友聊天,发现一个被忽略的问题。MySQL 8.0在今年4月正式停了官方支持,Oracle不再出安全补丁,bug也没人修了。但大量企业的业务系统还跑在上面。这事搁以前不算急,慢慢选就行了。但现在不行了,国资委79号文写得很清楚,2027年底前央国企核心系统得完成国产化替换。MySQL停服跟信创deadline撞在一起,留给MySQL用户做决定的时间不多了。我做过不少数据库迁移项目,MySQL替代这个事,坑比大多数人想的要多。今天聊几个我觉得最容易被忽视的点。

databasedb的博客 333

MySQL:库与表的操作

本文系统讲解MySQL库的操作,涵盖创建、查看、修改、删除数据库及字符集、校验规则的配置与影响。重点说明CREATE DATABASE语法、字符集(如utf8mb4)与校验规则(如utf8_general_ci vs utf8_bin)对大小写敏感性和排序的影响。通过实例演示不同校验规则下查询与排序结果差异。同时介绍SHOW DATABASES、USE、ALTER DATABASE、DROP DATABASE等操作,并强调备份恢复(mysqldump)与连接状态监控(SHOW PROCESSLIST)的重要

2401_87306079的博客 325

MySQL 主从复制进阶(2026):GTID、复制延迟排查与故障切换

load 高到底是 CPU 还是 IO?free 的 available 才是关键。us/sy/wa 决策树 + iostat/sar/iftop 实战,CPU/内存/磁盘/网络四大瓶颈定位方法论。

2502_91473995的博客 182

Linux、Shell、MySQL 测试卷逐题细讲(下篇:MySQL)

本文为Linux、Shell、MySQL测试卷下半段MySQL部分逐题讲解,包含填空、选择与SQL分析三类题型。填空题覆盖COUNT、HAVING、DISTINCT、事务、约束、索引等核心语法;选择题辨析存储过程、索引类型、ACID、存储引擎、用户管理等考点。SQL大题围绕员工、部门、职位、地点四张关联表,考察多表连接、分组聚合、自连接、相关子查询、NULL处理等高频写法,标注LEFT JOIN统计计数、NULL判断、子查询别名等易错坑点,同时梳理试卷OCR识别带来的干扰问题,重点提示SQL实操中的常见失误

dongziwen1的博客 185

MySQL 为什么选择 B+ 树作为索引结构

B 树和 B+ 树都是多路平衡树,但 B+ 树在数据库场景下更有优势,主要体现在以下几个方面。对比对象主要问题B+ 树的优势二叉树 / 红黑树树高过大,I/O 次数多多路平衡,树高仅 3~4 层哈希表不支持范围查询、排序天然有序,支持范围与排序B 树节点存数据,扇出小;查询路径不一致非叶子只存键,扇出大;查询路径稳定B+ 树用更矮的树高减少磁盘 I/O,用有序的叶子链表支撑范围查询,用只存键的非叶子节点换取更大的扇出,是磁盘数据库索引场景下综合表现最优的选择。

2601_96129122的博客 319
上一篇: gt-checksum v4.0.0 新功能解读系列文章(5):DSN 密文保护——连接串密码不再明文裸奔
下一篇: openGauss 迁移到 GreatSQL:DataX 全流程实操指南
GreatSQL社区
博客等级 码龄5年 1210粉丝 390原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值