同步MySQL事件整改证据并建立视图备份整改检查点
This commit is contained in:
parent
3625e8b3d8
commit
3cc6a7ac35
@ -2,7 +2,7 @@
|
||||
|
||||
> 2026-09-27 任务规格:完整 44 项及六阶段验收规范见《整改任务规格与验收约定》和《Scert整改任务执行清单》。以下历史勾选不替代当前整改状态,不把旧测试结果当成新增需求已经实现。
|
||||
|
||||
> 2026-09-27 当前进度:原始整改清单、执行清单和分级规格同步标记状态。P0-05 `[~]`:已补齐本批 MySQL 自有触发器及例程备份、可见权限和注释编码,Windows 5.7.44 / 8.0.45 最终全专项分别通过 110 / 121 个叶子用例;证据见《构建版本与数据库支持矩阵》第十二节。事件、视图、完整表清单、其他编码/SQL 模式、其余数据库与生产门禁仍未完成,不以本轮局部通过作生产放行。
|
||||
> 2026-09-27 当前进度:原始整改清单、执行清单和分级规格同步标记状态。P0-05 `[~]`:在自有触发器、例程基础上增加事件备份、可见权限、恢复调度安全、编码及到期保护,Windows 5.7.44 / 8.0.45 最终全专项分别通过 139 / 155 个叶子用例;证据见《构建版本与数据库支持矩阵》第十三节。下一步推进视图;完整表清单、其他编码/SQL 模式、其余数据库与生产门禁仍未完成,不以本轮局部通过作生产放行。
|
||||
|
||||
> 2026-09-27 范围调整:本文件保留早期开发历史,当前执行以《Scert整改合并优化清单》和《Scert整改任务执行清单》为准。正式交付仅为 Web 和 Windows/Linux 服务端;本文件中的 Wails 桌面窗口、托盘、桌面更新、桌面配置和桌面 UI 测试均退出正式开发及验收范围,不再作为未完成交付项。CLI 限定为初始化及服务运维,不另建业务管理界面。
|
||||
|
||||
|
||||
@ -39,7 +39,7 @@
|
||||
| P0-02 | [x] | 建立完整任务清单 | 44 项逐项规格、原始编号名称、字段、六阶段、引用和汇总状态核对通过 | 等待最终复审,随实现同步状态和证据 | 四份规格、统一验收约定及 `fab98d1` 独立克隆 |
|
||||
| P0-03 | [x] | 整理源码、构建产物和部署产物 | 全仓库及子目录规则、目录说明、正式回归和独立克隆构建校验通过 | 等待最终复审,后续提交继续执行边界检查 | 正式 Go 回归、完整索引、双平台 33 项清单及解包校验 |
|
||||
| P0-04 | [~] | 统一开发和构建版本 | 精确工具链、安装策略、发布前后校验、系统清单及固定换行已实现,双独立克隆和完整自动化通过 | Linux 原生构建与双平台实际运行环境记录,不以交叉编译替代 | `94237b8`、175 项前端测试、后端完整回归、4 个 Web 文件一致、33 项清单和解包校验 |
|
||||
| P0-05 | [~] | 确认数据库正式支持矩阵 | 已增加自有触发器和例程导出、完整例程可见权限及注释编码修复;事件、视图和完整表清单仍缺 | 补剩余对象导出、其他编码及 SQL 模式和独立发行验证;Linux、PostgreSQL、SQLite 与正式服务门禁仍缺 | 当前候选双版本完整回归分别 110、121 个叶子用例,0 失败、0 跳过;详见支持矩阵第十二节 |
|
||||
| P0-05 | [~] | 确认数据库正式支持矩阵 | 已增加自有触发器、例程和事件导出、可见权限、恢复调度安全及编码和到期保护;视图和完整表清单仍缺 | 推进视图、完整清单、其他编码及 SQL 模式和独立发行验证;Linux、PostgreSQL、SQLite 与正式服务门禁仍缺 | `3625e8b` 双版本完整回归分别 139、155 个叶子用例,0 失败、0 跳过;详见支持矩阵第十三节 |
|
||||
| P0-06 | [~] | 建立统一领域模型 | 已有域名、证书、任务、服务器等实体,项目和部署关联仍需审查 | 补齐资源关系图、外键/归属和任务关联 | 模型文档、迁移检查、接口测试 |
|
||||
| P0-07 | [~] | 增加项目级权限和资源隔离 | 用户组和角色已有实现,项目级资源边界未闭环 | 为证书、DNS、服务器、任务和审计补齐项目归属及越权测试 | 权限矩阵、接口越权测试 |
|
||||
| P0-08 | [~] | 完善凭据和主密钥生命周期 | 已有凭据存储与测试,轮换、恢复、删除和失效证据不完整 | 补齐创建、轮换、恢复、删除、脱敏和不可恢复边界 | 安全测试、日志审查、恢复演练 |
|
||||
@ -361,3 +361,16 @@ P0-05 从 `[!]` 调整为 `[~]`,并未标记完成;P0-04 剩余门禁和全
|
||||
- `[x]` 专项目录累计 90 个独立实例退出、167 个记录端口无监听、90 份初始化口令文件为空,共享 MySQL 进程未动;测试产物均不提交。
|
||||
- `[x]` 支持矩阵第十二节、基础规格、原始清单进度说明、历史开发清单、审查记录和生产运维说明同步更新;最终证据为 `artifacts/mysql-native-routines-20260927/mysql57-verified.jsonl`、`mysql80-verified.jsonl`。
|
||||
- `[ ]` 事件、视图、完整表清单权限、其他 SQL 模式及剩余数据库/平台/生产门禁继续整改。
|
||||
|
||||
### 2026-09-27:P0-05 自有事件备份与恢复安全
|
||||
|
||||
- `[x]` 原始事件定义、定义者、计划、时区、启停状态及创建会话属性导出;数据、例程、触发器和外键检查先于事件恢复。
|
||||
- `[x]` 全局、库级、角色、部分撤销和授权遮蔽的 EVENT 可见权限检查;无权限空库也明确拒绝。
|
||||
- `[x]` 恢复前检查 PROCESS 权限、工作线程及调度状态;产品不修改全局调度器、不终止线程、不自动扩权。维护窗口仍由管理员保证。
|
||||
- `[x]` Latin-1 事件名称与注释编码、无效元数据、已到期事件及恢复警告保护;失败保留既有备份。
|
||||
- `[x]` 修正旧触发器测试精确授权漏 EVENT,以及官方存储对象测试只等第一条事件更新的竞态,不放宽产品校验或原有业务断言。
|
||||
- `[x]` 最终源码 `3625e8b`:Windows MySQL 5.7.44 / 8.0.45 完整专项分别 139 / 155 个叶子用例通过,含父项记录为 159 / 175,0 失败、0 跳过;后端无缓存全量测试、vet、模块校验通过。
|
||||
- `[x]` 最终证据为 `artifacts/mysql-native-events-20260927/mysql57-commit-final.jsonl`、`mysql80-commit-final.jsonl`;对应测试端口无监听,初始化口令文件均为空,三个共享 MySQL 进程未动。源码、正式 Go 测试和运维文档已提交推送,产物不提交。
|
||||
- `[x]` 支持矩阵第十三节及关联任务文档同步进度;Windows 隔离证据不替代 Linux 实库或生产放行,全部 44 项范围不变。
|
||||
- `[~]` 下一子任务:视图自有备份与恢复,先复现现状并核对依赖、定义者、字符集、权限与官方工具互操作。
|
||||
- `[ ]` 完整表清单、其他编码/SQL 模式、跨库和跨服务器定义者、独立发行 CLI、Linux 实库及其余三库/业务/生产门禁继续保留。
|
||||
|
||||
@ -8,7 +8,7 @@
|
||||
|
||||
> 进度同步:2026 年 9 月 27 日。任务状态与《Scert整改任务执行清单.md》及四份分级任务规格保持一致;本文件的需求和验收标准不因状态更新而缩减。详细变更、验证命令、证据和剩余缺口见执行清单与对应专项记录,`[~]` 仅表示已有实现或正在整改,不表示整项完成。
|
||||
|
||||
> 当前专项:P0-05 自有例程备份、可见权限和注释编码已完成本批 Windows 双版本隔离回归,分别通过 110、121 个叶子用例;详见支持矩阵第十二节。事件、视图、完整表清单、其余数据库/平台及生产门禁仍待完成,P0-05 保持 `[~]`,全部 44 项范围不变。
|
||||
> 当前专项:P0-05 自有事件备份、事件可见权限、恢复调度安全、编码及到期保护已完成本批 Windows 双版本隔离回归,分别通过 139、155 个叶子用例;详见支持矩阵第十三节。下一步推进视图;完整表清单、其他编码/SQL 模式、其余数据库/平台及生产门禁仍待完成,P0-05 保持 `[~]`,全部 44 项范围不变。
|
||||
|
||||
---
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
|
||||
> 2026-09-27 证据索引:当前 44 项整改的逐项范围、命令、实机步骤和复审字段见《整改任务规格与验收约定》及四份分级规格;实际进展以《Scert整改任务执行清单》为准。本文历史结果须按当时源码与环境解释。
|
||||
|
||||
> 2026-09-27 本批进度:P0-05 `[~]`。在自有触发器备份基础上补齐例程导出及完整可见权限,修复 5.7 Latin-1 注释乱码并增加五种元数据拒绝测试;最终全专项通过 5.7 的 110 个、8.0 的 121 个叶子用例,0 失败、0 跳过。先前失败与最终通过证据均保留,详见《构建版本与数据库支持矩阵》第十二节。后端回归、vet、模块校验和 Linux 交叉编译通过;没有执行 Linux 实库、前端或生产部署验收。
|
||||
> 2026-09-27 本批进度:P0-05 `[~]`。增加自有事件导出、EVENT 可见权限、PROCESS 工作线程检查、恢复调度安全、Latin-1 编码及到期保护,修正旧测试授权前提及事件多语句执行的时序问题。最终全专项通过 5.7 的 139 个、8.0 的 155 个叶子用例,0 失败、0 跳过;源码为 `3625e8b`,证据见《构建版本与数据库支持矩阵》第十三节。后端无缓存全量测试、vet、模块校验通过;Linux 交叉编译不是 Linux 实库证据。下一步推进视图,前端及生产部署未在本批验收。
|
||||
|
||||
> 2026-09-27 范围调整:以下为历史审查证据。当前正式测试范围仅为 Web 和 Windows/Linux 服务端;历史桌面模块测试记录保留,但不再作为交付目标或生产门禁。当前任务状态见《Scert整改任务执行清单》。
|
||||
|
||||
|
||||
@ -63,13 +63,13 @@
|
||||
- 任务编号:P0-05;任务名称:确认数据库正式支持矩阵;优先级:P0。
|
||||
- 当前状态:`[~] 进行中`。
|
||||
- 六阶段:需求确认 `[x]`;代码实现 `[~]`;自动化测试 `[~]`;隔离环境测试 `[~]`;生产部署测试 `[!]`;最终验收 `[ ]`。
|
||||
- 问题说明:已修复迁移、连接恢复、备份会话、精确数值、跨表快照、失败文件保护、生成列和不可见列导出;支持本批官方存储对象 SQL 的分隔符恢复,并新增自有触发器、例程导出及可见权限预检。例程注释编码已复测;事件、视图、完整表清单、其他编码与 SQL 模式及独立发行验证仍不足。
|
||||
- 问题说明:已修复迁移、连接恢复、备份会话、精确数值、跨表快照、失败文件保护、生成列和不可见列导出;支持本批官方存储对象 SQL 的分隔符恢复,并新增自有触发器、例程及事件导出、可见权限、恢复调度安全、编码和到期保护。视图、完整表清单、其他编码与 SQL 模式及独立发行验证仍不足。
|
||||
- 涉及文件:`backend/internal/database/`、其 `migrations/mysql/`、`migrations/postgres/`、`migrations/sqlite/`、`backend/internal/cli/`、《构建版本与数据库支持矩阵.md》。
|
||||
- 依赖任务:P0-04。
|
||||
- 整改内容:明确 SQLite、MySQL、PostgreSQL 支持版本;验证 MySQL 5.7/8.0、PostgreSQL 目标版本、SQLite 锁并发;逐库检查类型、索引、默认值、事务及初始化、升级、回滚、备份恢复。不能悄然去掉难测版本。
|
||||
- 验证命令:V06、V02;真实数据库测试按正式集成测试的参数运行并保存非跳过结果,不在命令行嵌入密码。
|
||||
- 实机验收步骤:逐版本创建专用测试库;从空库初始化及历史版本迁移,注入失败检查事务;使用官方备份工具恢复并核对行数、资源关联和加密凭据;验证 TLS 和断线重连;只清理明确测试库。
|
||||
- 验收证据:在既有迁移、连接恢复、特殊列互操作和官方存储对象恢复基础上,补齐自有触发器及例程备份、权限检查、注释编码和元数据拒绝测试。当前候选在 Windows MySQL 5.7.44、8.0.45 分别通过 110、121 个叶子用例,0 失败、0 跳过;对应含父项记录为 125、136。已实际执行触发器、过程、函数和隔离事件;详见支持矩阵第十二节的最终证据及执行清单。
|
||||
- 验收证据:在既有迁移、连接恢复、特殊列互操作及触发器、例程备份基础上,增加事件导出、权限检查、调度安全、编码与到期测试。最终源码 `3625e8b` 在 Windows MySQL 5.7.44、8.0.45 分别通过 139、155 个叶子用例,0 失败、0 跳过;对应含父项记录为 159、175。已实际执行触发器、过程、函数和恢复后的隔离事件;详见支持矩阵第十三节的最终证据及执行清单。
|
||||
- 复审结果:上述 Windows 隔离范围通过,不等于生产放行。只验证 InnoDB 数据快照,不承诺并发 DDL 一致性;非事务表和视图拒绝属于临时边界。官方导出文件恢复通过不证明自有导出保存了全部对象;其他 SQL 模式、定义者迁移、独立发行命令、Linux 实库、PostgreSQL 当前复测、SQLite 并发锁及正式服务验收仍未完成。
|
||||
|
||||
### P0-05 触发器自有备份子任务进度
|
||||
@ -89,6 +89,16 @@
|
||||
- `[x]` 双版本正式实库全专项通过 110 / 121 个叶子用例,0 失败、0 跳过;完整后端回归、vet、模块校验及 Linux 测试包交叉编译通过。收尾与证据见支持矩阵第十二节;未执行 Linux 实库,不提升总状态。
|
||||
- `[ ]` 事件、视图、完整表清单权限、其他 SQL 模式、跨服务器定义者迁移及生产恢复验收。本子任务不提升 P0-05 总状态。
|
||||
|
||||
### P0-05 事件自有备份子任务进度
|
||||
|
||||
- `[x]` 补齐事件原始定义、时区和计划、定义者、启停状态、创建会话属性,支持重复恢复与同名替换。
|
||||
- `[x]` 全局/库级有效 EVENT 可见权限预检;无权限空库、未启用角色、部分撤销与通配遮蔽均有正式反例。
|
||||
- `[x]` 恢复前检查 PROCESS、工作线程和调度状态;维护窗口由管理员维持,产品不改全局调度、不终止线程、不擅自禁用已有事件。
|
||||
- `[x]` 编码元数据拒绝、过期事件与恢复警告保护,Scert 和官方客户端双路径互操作及真实事件执行。
|
||||
- `[x]` 最终双版本完整专项、常规全量测试、静态检查及收尾验证通过,见支持矩阵第十三节;之前的失败证据保留,不与最终通过结果混用。
|
||||
- `[~]` 视图自有备份与恢复;上方触发器、例程子任务的剩余项为当时记录,事件本批进展以此节为准。
|
||||
- `[ ]` 完整表清单权限、其他 SQL 模式、跨库及跨服务器定义者、独立发行验证、其余数据库/平台与生产门禁;P0-05 总状态不提升。
|
||||
|
||||
## P0-06 建立统一领域模型
|
||||
|
||||
- 任务编号:P0-06;任务名称:建立统一领域模型;优先级:P0。
|
||||
|
||||
@ -424,3 +424,52 @@ go test -json -p 1 -count=1 -timeout=8m -run '^TestMySQLReal' ./internal/databas
|
||||
- 其他多字节编码、非 UTF-8 返回枚举类型、`NO_BACKSLASH_ESCAPES` 等 SQL 模式、跨账户或跨服务器定义者、跨库引用和备份期间 DDL/授权变化仍需验证。
|
||||
- 保留原始 `DEFINER`;不会自动迁移账户授权或清除备份外的额外目标例程。恢复失败后的 DDL 原子性和数据库排序规则回退尚无完整承诺。
|
||||
- 独立发行 CLI、Linux 实库、PostgreSQL、SQLite、正式 Web 业务与全部生产验收门禁继续保留。新增例程通过不提升 P0-05 总状态,也不作生产放行。
|
||||
|
||||
## 十三、MySQL 自有事件备份与恢复安全
|
||||
|
||||
日期:2026-09-27。修改前检查点 `863202f`,实现保存点 `8cba0d5`,最终通过源码 `3625e8b`,均已推送。仅使用独立 loopback 实例、随机测试账户和严格 TLS,不操作共享或生产数据库。P0-05 保持 `[~]`,全部 44 项范围不变。
|
||||
|
||||
### 实现与安全边界
|
||||
|
||||
1. 自有备份使用原始 `SHOW CREATE EVENT`,保存定义者、正文、计划、时区、启停状态及创建会话属性;同名事件先删除再创建。导出顺序为基础数据、例程、触发器、恢复外键检查、事件。
|
||||
2. 必须证明全局或库级 EVENT 权限完整可见,不能以表级权限、过滤后的空列表或当前没有事件作为依据。覆盖角色、部分撤销及精确/通配授权遮蔽,产品不自动扩权。
|
||||
3. 恢复前要求有效全局 PROCESS 权限,并检查工作线程。实库复现表明事件工作线程使用定义者身份,命令为 `Connect`,不能只筛选 `event_scheduler` 用户;其他正在建立的连接也可能被保守拒绝。
|
||||
4. 调度器 ON 且目标已有启用事件或导入可能启用事件时,首条恢复语句之前拒绝;调度器 OFF 但工作线程尚未退出时同样拒绝。产品不关闭调度器、不终止线程、不擅自改变既有事件状态。管理员仍须维持维护窗口,防止检查后外部会话改变调度或对象。
|
||||
5. 事件 DDL 识别区分正文、注释、引用和名称,展开版本化注释,并按两种反斜杠转义模式保守判断。Scert 拒绝导入内容直接设置事件调度器;此检查不是任意 SQL 的沙箱,恢复文件仍须可信。
|
||||
6. 两版事件声明头来自 UTF-8 目录,而正文沿用原客户端编码;按目录正文与 ` DO ` 边界分离,只反解声明头,检查往返一致与有效 UTF-8。新增正文不一致、缺声明头、有损转换、无效 UTF-8 四个拒绝场景,失败不写回部分定义。
|
||||
7. 到期后重新创建会被删除或改变启用状态的事件,以及时区无法验证的事件拒绝备份,已有备份保持不变;已禁用且 PRESERVE 的历史事件允许。事件恢复遇到影响完整性的警告会停止后续语句,但不承诺已执行 DDL 的原子回滚。
|
||||
8. 官方客户端导入不会执行 Scert 的预检,管理员必须自行停止调度、等待工作线程退出、检查警告并核验对象,再恢复调度。不会自动迁移定义者账户或授权,也不清除备份外的额外对象。
|
||||
|
||||
### 正式测试与问题修正
|
||||
|
||||
- `TestMySQLRealNativeEvents`:中文/反引号及 Latin-1 名称、注释和正文,一次性/周期计划,多个时区,复制禁用状态;Scert/官方客户端两条路径分别重复恢复两次,完整比较定义和计划,再显式开启隔离调度实际执行并检查源库未变。
|
||||
- `TestMySQLRealEventVisibility`:5.7 的八类、8.0 的十三类可见权限场景,包括无权限空库和隐藏事件。
|
||||
- `TestMySQLRealEventRestoreSafety`:九类常规场景及 OFF 后仍执行的工作线程;检查首条标记语句未执行、调度未被产品改变,线程自然退出后恢复成功。
|
||||
- `TestMySQLRealEventExpiry`:五类到期导出/恢复场景;`TestMySQLEventStatementSafety`:二十二类 SQL 识别场景,每类检查两种转义模式。
|
||||
- 修正旧触发器精确库授权漏 EVENT:原精确 SELECT/TRIGGER 授权遮蔽了夹具通配库 EVENT 权限;补齐测试必要前提,不放宽产品检查。
|
||||
- 修正旧官方存储对象测试竞态:事件有两条逐次提交的更新,原测试只等第一条完成;现在同时等待最终字段值及工作线程退出,再执行后续断言和子用例。
|
||||
- 8.0 JSON_ARRAY 对周期字符串可能使用不透明 Base64 表示。现同时比较显式 UTF-8 文本、原始 HEX、字符集及排序规则,未忽略周期字段。
|
||||
|
||||
### 最终验证与证据
|
||||
|
||||
证据目录:`artifacts/mysql-native-events-20260927/`。JSONL 为 PowerShell UTF-16,读取使用 `Get-Content -Encoding Unicode`。
|
||||
|
||||
| 验证范围 | 最终证据或命令 | 结果 |
|
||||
|---|---|---|
|
||||
| Windows MySQL 5.7.44 全专项 | `mysql57-commit-final.jsonl` | 139 个叶子用例;含父项 159 条通过,0 失败、0 跳过 |
|
||||
| Windows MySQL 8.0.45 全专项 | `mysql80-commit-final.jsonl` | 155 个叶子用例;含父项 175 条通过,0 失败、0 跳过 |
|
||||
| 常规后端全量 | `go test -count=1 -p 1 ./...`,不设置实库测试变量 | 退出码 0;条件跳过不能充当实库通过 |
|
||||
| 静态与模块 | `go vet ./...`、`go mod verify` | 退出码 0,模块校验通过 |
|
||||
| Linux CLI 测试包 | `GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go test -c ./internal/cli` | 测试修正前产品代码交叉编译通过;不是 Linux 实库证据 |
|
||||
|
||||
实库命令为 `go test -json -p 1 -count=1 -timeout=8m -run '^TestMySQLReal' ./internal/database ./internal/cli`,分别指定 `E:\DB\5.7\bin`、`E:\DB\8.0\bin` 和上述隔离产物目录。最终 database/cli 耗时分别为 35.522/103.086 秒、50.614/133.481 秒。
|
||||
|
||||
`mysql57-full.jsonl`、`mysql80-full.jsonl` 留有旧授权失败;`mysql57-commit-review.jsonl` 留有多语句事件竞态失败,不能用它们作最终通过证据。其余早期复现、编码和到期日志保留追溯,不覆盖、不提交。
|
||||
|
||||
收尾核验:最终两版记录的端口无监听,本专项目录内所有 `bootstrap.sql` 均为空;仅保留原有三个共享 MySQL 进程。源码、正式 Go 测试与运维说明已提交,随机测试密钥、数据库、日志和编译产物只留在忽略目录。
|
||||
|
||||
### 剩余门禁与下一步
|
||||
|
||||
- `[~]` 推进视图自有备份与恢复,核对依赖顺序、原定义者、权限、字符集和官方工具互操作;当前版本仍拒绝视图,不能记作已支持。
|
||||
- `[ ]` 完整表清单权限、其他字符集/SQL 模式、跨库及跨服务器定义者、并发 DDL/授权变化和失败回滚完整语义。
|
||||
- `[ ]` 独立发行 CLI、Linux 实库、PostgreSQL、SQLite 并发锁、正式 Web 业务和 Windows/Linux 生产门禁。事件局部通过不提升 P0-05 总状态,不作生产放行。
|
||||
|
||||
Loading…
Reference in New Issue
Block a user