gt-checksum v4.0.0 新功能解读系列文章(5):DSN 密文保护——连接串密码不再明文裸奔

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

在数据库校验和修复工具中,连接串几乎是最敏感的配置之一。过去为了使用方便,很多配置文件会直接写入数据库明文密码。

gt-checksum v4.0.0 起,srcDSN / dstDSN 中的 password 必须使用 ENC[...] 密文,并新增独立工具 gt-dsn-crypt 生成 32 字节 base64 key 与 AES-256-GCM 密文,让连接串密码保护从“建议项”变成“强约束”。


一、功能简介

[yejr@db160 gt-checksum]$ cat docs/gt-checksum-v4.0.0-dsn-encrypt-article.md

gt-checksum v4.0.0 新功能解读系列文章(5):DSN 密文保护——连接串密码不再明文裸奔

在数据库校验和修复工具中,连接串几乎是最敏感的配置之一。过去为了使用方便,很多配置文件会直接写入数据库明文密码。

gt-checksum v4.0.0 起,srcDSN / dstDSN 中的 password 必须使用 ENC[...] 密文,并新增独立工具 gt-dsn-crypt 生成 32 字节 base64 key 与 AES-256-GCM 密文,让连接串密码保护从“建议项”变成“强约束”。


一、功能简介

v4.0.0 新增连接串密码加密能力,核心变化可以概括为三点:

能力说明
ENC[...] 密文格式srcDSN / dstDSN 中的 password 必须使用 ENC[...] 密文
gt-dsn-crypt 工具独立生成 key、加密 password、解密校验密文
统一日志脱敏gt-checksum、repairDB、连接池日志均不会完整输出明文 password 或密文

新增工具:gt-dsn-crypt

gt-dsn-crypt 提供三个子命令:

子命令作用
gen-key生成 32 字节随机 key,并以 base64 输出
encrypt使用 key 将明文 password 加密为 ENC[...] 密文
decrypt使用 key 解密 ENC[...],用于校验密文是否正确

典型使用方式:

# 1. 生成 32 字节 base64 key
KEY=$(gt-dsn-crypt gen-key)

# 2. 推荐从文件读取 password,避免明文进入 shell history
printf '%s' '数据库密码' > ./password.txt

# 3. 生成 ENC[...] 密文
GT_CHECKSUM_DSN_KEY="$KEY" gt-dsn-crypt encrypt --password-file ./password.txt

# 4. 启动 gt-checksum 时提供同一个 key
GT_CHECKSUM_DSN_KEY="$KEY" gt-checksum -c ./gc.conf

配置文件中的 DSN 变为:

srcDSN=mysql|user:ENC[v1:aes256gcm:default:...:...]@tcp(src-host:3306)/information_schema?charset=utf8mb4
dstDSN=mysql|user:ENC[v1:aes256gcm:default:...:...]@tcp(dst-host:3306)/information_schema?charset=utf8mb4

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

2.1 为什么要强制加密 DSN password?

在生产环境中,明文数据库密码的风险远比想象中更常见:

场景一:配置文件泄露

gc.conf 通常会被放在运维目录、部署目录或自动化平台中。一旦目录权限配置不当,明文数据库密码就可能被非授权用户读取。

场景二:日志与报错泄露

工具启动失败、参数校验失败、连接池初始化失败时,如果直接打印 DSN,明文 password 可能进入终端日志、CI 日志、工单截图或监控采集系统。

场景三:多人协作与审计

迁移项目通常涉及 DBA、研发、运维、测试多角色协作。配置文件被多人传递时,明文密码会在聊天工具、邮件、文档中扩散,后续很难追踪和回收。

场景四:临时文件与历史命令残留

即使最终配置文件被删除,明文密码仍可能残留在 shell history、备份文件、编辑器 swap 文件中。加密后,即使密文泄露,没有 key 也无法直接还原 password。

因此,v4.0.0 不再只是“建议不要写明文密码”,而是在启动阶段直接校验:DSN password 不是 ENC[...],程序 fail-fast 退出。

2.2 ENC[...] 密文格式是什么?

v4.0.0 使用统一的密文格式:

ENC[v1:aes256gcm:<kid>:<nonce_b64url>:<ciphertext_b64url>]

各字段含义如下:

字段说明
v1密文格式版本
aes256gcm加密算法:AES-256-GCM
``key id,默认 default,为后续密钥轮换预留
``随机 nonce,使用 base64 URL-safe 编码
``密文和认证标签,使用 base64 URL-safe 编码

示例:

ENC[v1:aes256gcm:default:REPLACE_NONCE:REPLACE_CIPHERTEXT]

需要注意的是,只加密 password 片段,不会加密 host、port、库名、charset、SSL 参数等连接配置信息。例如:

# 加密前(v4.0.0 起不再支持)
srcDSN=mysql|user:plain_password@tcp(src-host:3306)/information_schema?charset=utf8mb4

# 加密后
srcDSN=mysql|user:ENC[v1:aes256gcm:default:...:...]@tcp(src-host:3306)/information_schema?charset=utf8mb4

这种设计兼顾了安全性和可运维性:密码被保护起来,但连接目标、库名和参数仍然可见,便于排查配置问题。

2.3 AES-256-GCM:同时保证保密性和完整性

gt-dsn-crypt 使用 Go 标准库中的 AES-GCM 实现:

block, _ := aes.NewCipher(key)
gcm, _ := cipher.NewGCM(block)
nonce := make([]byte, gcm.NonceSize())
rand.Read(nonce)
ciphertext := gcm.Seal(nil, nonce, []byte(password), nil)

这里有几个关键点:

  1. key 必须是 32 字节:对应 AES-256。
  2. 每次加密都会生成随机 nonce:同一个 password 用同一个 key 加密两次,也会得到不同的 ENC[...] 密文。
  3. GCM 自带认证标签:解密时会校验密文是否被篡改。如果 key 错误或密文被修改,会返回解密失败,而不是输出错误的 password。

这意味着 ENC[...] 不只是“混淆字符串”,而是具备认证加密能力的密文格式。

2.4 key 从哪里来?

v4.0.0 的 key 管理遵循两个原则:不内置默认 key,不从配置文件读取 key。

key 来源只有两种:

来源优先级说明
--key最高命令行参数,覆盖环境变量
GT_CHECKSUM_DSN_KEY次高未指定 --key 时读取该环境变量

示例:

# 使用环境变量
GT_CHECKSUM_DSN_KEY="$KEY" gt-checksum -c ./gc.conf

# 使用 --key 覆盖环境变量
gt-checksum -c ./gc.conf --key "$KEY"

repairDB 和 gt-dsn-crypt 也使用同样的 key 机制:

# repairDB 使用环境变量
GT_CHECKSUM_DSN_KEY="$KEY" repairDB -conf ./gc.conf ./fixsql

# repairDB 使用 --key
repairDB -conf ./gc.conf --key "$KEY" ./fixsql

# gt-dsn-crypt encrypt 使用 --key
gt-dsn-crypt encrypt --key "$KEY" --password-file ./password.txt

v4.0.0 不支持密钥文件,也不支持把 key 写在 gc.conf 中。这是为了避免“密码加密了,但解密 key 又和配置文件放在一起”的伪安全。

2.5 启动阶段 fail-fast:明文密码直接拒绝

gt-checksum 在读取配置时会立即解析 srcDSN / dstDSN,并调用统一的连接串解析逻辑,要求连接串中 必须使用密文。

因此:

  • password 是 ENC[...]:加载 key 并解密
  • password 是明文:直接报错退出
  • password 为空:直接报错退出
  • key 缺失或 key 长度不是 32 字节:直接报错退出
  • 密文格式错误、版本不支持、认证失败:直接报错退出

这种 fail-fast 设计可以把风险拦截在任务启动阶段,避免校验或修复运行到一半才发现连接串不可用。

2.6 MySQL 与 Oracle DSN 都支持

v4.0.0 的连接串加密不只支持 MySQL-family,也支持 Oracle。

MySQL-family:

srcDSN=mysql|user:ENC[v1:aes256gcm:default:...:...]@tcp(src-host:3306)/information_schema?charset=utf8mb4
dstDSN=mysql|user:ENC[v1:aes256gcm:default:...:...]@tcp(dst-host:3306)/information_schema?charset=utf8mb4

Percona Server、GreatSQL、MariaDB 等 MySQL-family 数据源同样使用 mysql| 驱动前缀。

Oracle legacy DSN:

srcDSN=oracle|scott/ENC[v1:aes256gcm:default:...:...]@ora-host:1521/orclpdb1

Oracle godror key-value DSN:

srcDSN=oracle|user="scott" password="ENC[v1:aes256gcm:default:...:...]" connectString="ora-host:1521/orclpdb1"

Oracle legacy 格式中,解密后的 password 会按路径片段做转义,避免 / 等特殊字符破坏 user/password@host 的结构;key-value 格式则会保留或补齐引号,避免空格和特殊字符导致解析错误。

2.7 日志统一脱敏:不让密文变成另一种泄露

只加密配置文件还不够。如果程序启动后把解密后的 DSN 打印到日志里,风险仍然存在。

v4.0.0 对 gt-checksum、repairDB、MySQL/Oracle 连接池日志做了统一脱敏处理:

mysql|user:******@tcp(src-host:3306)/information_schema?charset=utf8mb4
oracle|scott/******@ora-host:1521/orclpdb1
oracle|user="scott" password="******" connectString="ora-host:1521/orclpdb1"

也就是说,无论 DSN 中原本是明文、ENC[...] 密文,还是运行时已解密后的真实 password,日志里都会被替换为 ******。


三、功能使用演示

3.1 生成 key

$ gt-dsn-crypt gen-key
Is7oYfqpCNZc6mD8kKY/yFevgYrjU//y4SM2K40yzM4=

$ export GT_CHECKSUM_DSN_KEY="Is7oYfqpCNZc6mD8kKY/yFevgYrjU//y4SM2K40yzM4="

这是一个 base64 编码后的 32 字节随机 key。生产环境建议把它放入安全的密钥管理系统,或通过环境变量注入任务进程。

3.2 生成 password 密文

推荐把数据库 password 写入临时文件,再使用 --password-file 加密:

$ printf '%s' 'GreatSQL@2026!' > ./password.txt

$ GT_CHECKSUM_DSN_KEY="$KEY" gt-dsn-crypt encrypt --password-file ./password.txt
ENC[v1:aes256gcm:default:Qk1...:8dF...]

也可以直接使用 --password:

gt-dsn-crypt encrypt --key "$KEY" --password 'GreatSQL@2026!'

但这种方式可能被 shell history 记录,生产环境不推荐。

3.3 写入 gc.conf

srcDSN=mysql|user:ENC[v1:aes256gcm:default:Qk1...:8dF...]@tcp(10.0.0.1:3306)/information_schema?charset=utf8mb4
dstDSN=mysql|user:ENC[v1:aes256gcm:default:9mA...:rK2...]@tcp(10.0.0.2:3306)/information_schema?charset=utf8mb4

tables=db.*
checkObject=data
datafix=file

注意:源端和目标端可以使用同一个 key 生成密文,也可以通过 kid 记录不同的 key id。但运行时当前实现需要提供能解开配置中密文的 key。

3.4 启动 gt-checksum

$ GT_CHECKSUM_DSN_KEY="$KEY" gt-checksum -c ./gc.conf

Initializing gt-checksum
Reading configuration files
Opening log files
Checking configuration options
gt-checksum: Starting table checks
...

或者使用 --key:

$ gt-checksum -c ./gc.conf --key "$KEY"

3.5 repairDB 使用密文 dstDSN

repairDB 只连接目标端,因此只读取并解密 dstDSN:

dstDSN=mysql|user:ENC[v1:aes256gcm:default:9mA...:rK2...]@tcp(10.0.0.2:3306)/information_schema?charset=utf8mb4
fixFileDir=./fixsql

执行修复:

$ GT_CHECKSUM_DSN_KEY="$KEY" repairDB -conf ./gc.conf ./fixsql

[REPAIR] Processing: table.db.orders.INSERT-1.sql ... OK
...

3.6 解密校验

如果需要确认某个密文对应的 password 是否正确,可以使用 decrypt:

$ GT_CHECKSUM_DSN_KEY="$KEY" gt-dsn-crypt decrypt --ciphertext 'ENC[v1:aes256gcm:default:Qk1...:8dF...]'
GreatSQL@2026!

解密命令建议仅在本地临时验证时使用,避免把明文输出到共享终端、CI 日志或工单系统。

3.7 明文 password 报错示例

如果配置文件仍然使用明文 password:

srcDSN=mysql|user:plain_password@tcp(10.0.0.1:3306)/information_schema?charset=utf8mb4

启动时会直接失败:

$ gt-checksum -c ./gc.conf

gt-checksum: invalid srcDSN password: dsn password must use ENC[...] ciphertext

如果没有提供 key:

$ gt-checksum -c ./gc.conf

gt-checksum: invalid srcDSN password: dsn encryption key is required

四、最佳实践及使用约束

4.1 最佳实践

1. 生产环境统一使用 --password-file 加密

相比 --password,--password-file 可以避免 password 进入 shell history:

printf '%s' '数据库密码' > ./password.txt
GT_CHECKSUM_DSN_KEY="$KEY" gt-dsn-crypt encrypt --password-file ./password.txt
rm -f ./password.txt

2. key 不要与 gc.conf 放在一起

不要把 key 写入配置文件,也不要把 key 文件和 gc.conf 放在同一目录打包传递。推荐使用:

  • CI/CD secret
  • Kubernetes Secret
  • 操作系统环境变量
  • 企业密钥管理系统

3. 使用 --key 覆盖临时环境变量

当同一台机器上需要执行多个不同项目的校验任务时,可以用 --key 显式指定当前任务的 key,避免误用环境变量中的旧 key:

gt-checksum -c ./gc-prod.conf --key "$PROD_DSN_KEY"

4. 日志可以共享,配置和 key 不能共享

v4.0.0 已经对 DSN 日志做了统一脱敏,因此日志文件相对更安全。但配置文件中的 ENC[...] 密文和运行时 key 仍然应按敏感信息管理。

5. 定期轮换 key 和密文

如果项目成员变更、配置文件曾经外发,建议重新生成 key,并重新生成 srcDSN / dstDSN 密文。ENC[...] 中的 kid 字段可用于记录 key id,方便人工追踪密钥版本。

6. 配合 SSL 加密连接使用

DSN 密文保护的是“静态配置文件中的 password”,SSL 保护的是“运行时网络传输中的数据”。两者解决的问题不同,生产环境建议同时启用:

srcDSN=mysql|user:ENC[...]@tcp(src-host:3306)/information_schema?charset=utf8mb4
dstDSN=mysql|user:ENC[...]@tcp(dst-host:3306)/information_schema?charset=utf8mb4
srcSslMode=VERIFY_CA
dstSslMode=VERIFY_CA

4.2 使用约束

1. 明文 password 不再兼容

v4.0.0 起,srcDSN / dstDSN 的 password 必须使用 ENC[...]。旧版本配置如果仍然使用明文 password,需要先迁移为密文格式,否则启动即失败。

2. key 必须是 base64 编码后的 32 字节随机值

gt-dsn-crypt gen-key 生成的 key 可以直接使用。如果手动生成 key,必须保证 base64 解码后长度正好为 32 字节,否则会报错:

dsn encryption key must be base64 encoded 32 bytes

3. 不支持密钥文件

工具不提供 --key-file 参数,也不会从配置文件中读取 key。key 只能通过 --key 或 GT_CHECKSUM_DSN_KEY 提供。

4. 密文只保护 password,不保护完整 DSN

ENC[...] 只加密 password,host、port、库名、charset、SSL 参数等仍然以明文保留在配置文件中。这是为了保留必要的可运维信息。如果连接目标本身也属于敏感信息,需要通过配置文件权限和部署系统进行额外保护。

5. key 丢失后无法恢复 password

AES-256-GCM 是对称加密。没有正确 key,无法解密 ENC[...]。因此 key 必须妥善备份和管理;如果 key 丢失,只能重新获取数据库 password 并重新生成密文。

6. decrypt 命令会输出明文

gt-dsn-crypt decrypt 是为了本地校验密文是否正确,输出结果就是明文 password。不要在共享终端、CI pipeline、公开日志中执行该命令。


五、总结

gt-checksum v4.0.0 的 DSN 密文保护能力,把连接串密码安全提升到了默认强制级别。配置文件中不再允许明文 password,启动时必须通过 --key 或 GT_CHECKSUM_DSN_KEY 提供 32 字节 base64 key,程序在内存中解密后连接数据库,并对所有 DSN 日志输出统一脱敏。

围绕这一能力,v4.0.0 形成了一套完整闭环:

  • gt-dsn-crypt gen-key:生成 32 字节随机 key
  • gt-dsn-crypt encrypt:生成 AES-256-GCM ENC[...] 密文
  • gt-dsn-crypt decrypt:本地解密校验
  • gt-checksum --key / GT_CHECKSUM_DSN_KEY:运行时解密 srcDSN / dstDSN
  • repairDB --key / GT_CHECKSUM_DSN_KEY:运行时解密 dstDSN
  • 日志统一脱敏:避免明文或密文再次泄露

一句话总结:srcDSN=mysql|user:ENC[...]@...,让数据库密码不再出现在配置文件和日志里。


相关阅读

【Flink cdc】Data row is smaller than a column index, internal schema representation is probably xxx 翻译一下:当scan.startup.mode=EARLIEST_OFFSET时,如果在最早的offset之后表结构有过变化就无法支持。原因应该是在binlog 的earliest_offset之后,表结构被修改过。我的解决方案:source配置中使用。mysql source配置使用。,以时间戳为消费依据。 阅读详情

相关推荐

RTAB-Map实战:用RGB-D相机5步搞定机器人自主建图(附避坑指南)

本文提供了一份详细的RTAB-Map实战指南,通过5个核心步骤,指导用户使用RGB-D相机(如Intel RealSense D435i)快速实现机器人自主建图。内容涵盖环境准备、传感器启动、核心参数配置、实战调优及地图后处理,并重点解析了算法关键参数与常见避坑方案,旨在帮助初学者高效搭建鲁棒的视觉SLAM系统。

g9h0i1的博客 789

DSN 密文保护——连接串密码不再明文裸奔

一、功能简介gt-checksum v4.0.0 新功能解读系列文章(5):DSN 密文保护——连接串密码不再明文裸奔在数据库校验和修复工具中,连接串几乎是最敏感的配置之一。过去为了使用方便,很多配置文件会直接写入数据库明文密码。

eD4vkqyUC的博客 169

ADS学习笔记 1. 功率放大器设计

基于ADS2023 update2的学习笔记1.功率放大器设计

u014087103的博客 1万+

新功能解读系列文章(5):DSN 密文保护——连接串密码不再明文裸奔

能力说明ENC[...]密文格式srcDSNdstDSN中的 password 必须使用ENC[...]密文工具独立生成 key、加密 password、解密校验密文统一日志脱敏gt-checksum、repairDB、连接池日志均不会完整输出明文 password 或密文。

CkC76BO93的博客 194

Python实战:基于PyG和Stable-Baselines3复现柔性车间调度算法(附数据集)

本文提供了一份基于图神经网络与深度强化学习的柔性车间调度实战指南。通过PyTorch Geometric构建异构图表示车间状态,并利用Stable-Baselines3中的PPO算法训练调度智能体,详细介绍了从环境建模、网络设计到训练评估的完整代码实现,帮助开发者构建可复用的工业级智能调度系统。

ansible6ops的博客 608

CNN+LSTM+Attention+DNN模型实战:pytorch搭建CNN+LSTM+Attention+DNN行车速度预测

CNN+LSTM+Attention+DNN模型实战:pytorch搭建CNN+LSTM+Attention+DNN行车速度预测

6045

gt-checksum v4.0.0 发布|续跑回滚双加持,异构迁移与安全能力跃升

gt-checksum v4.0.0 重磅发布,新增断点续传、反向回滚 SQL、自定义类型映射三大核心能力,生产级数据校验与修复能力全面升级。

GreatSQL2021的博客 439

SAP UI5 本地开发工具 fiori-tools-proxy 中间件详解及使用场景

该中间件基于 http-proxy-middleware 库实现,分为 ui5 资源代理和 backend 代理两大模式,并可与 fiori run 或 ui5 serve 命令无缝集成,通过配置 ui5.path、ui5.url 以及 backend.path、backend.url 等参数,实现与目标系统的灵活对接和安全配置 (就后端系统代理而言,fiori-tools-proxy 内置 @sap-ux/backend-proxy-middleware,可将以指定前缀(如。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 517

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

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

m0_64642997的博客 135

YOLOv10改进,YOLOv10二次创新C2f结构采用WTConv卷积(感受野的小波卷积),ECCV 2024

WTConv 的核心思想是通过结合卷积神经网络(CNN)的强大特征提取能力与小波变换的多尺度特性,来实现大感受野的卷积操作,同时避免传统大卷积核带来的参数爆炸问题。传统的卷积操作通过滑动小窗口在图像上逐步执行局部特征提取,感受野的大小直接取决于卷积核的尺寸。随着卷积核的增大,参数量呈指数增长,导致网络训练效率降低、计算资源消耗增加。为解决这些问题,WTConv 提出了在小波域中执行卷积操作的策略。小波变换是一种常用于信号处理的技术,能够将信号分解为不同频率成分。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1024

【通信协议】GATT 与 BLE HID 工作原理详解

详细介绍BLE HID 跟GATT工作原理与两者的交互关系

以实战经验介绍行业知识 843

MySQL 单点详解(14)

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

2401_88601046的博客 345

UE5实现物体高亮描边效果(含UE相关源码浅析)

UE5实现物体高亮描边效果

专注GIS开发 7334

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

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

大模型全栈工程师 · Thanks_ks 297

WINCC7.3破解文件

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

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

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

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

2401_83857914的博客 455

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

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

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

2601_96709915的博客 326

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

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 298

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 新功能解读系列文章(4):SSL 加密连接——数据校验传输安全再升级
下一篇: gt-checksum v4.0.0 新功能解读系列文章(6):权限预检与修复安全策略——先确认能看见,再决定怎么修
GreatSQL社区
博客等级 码龄5年 1210粉丝 390原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值