From 889b840061f487a8a38f5544c99d5f508547f8ad Mon Sep 17 00:00:00 2001 From: xuans Date: Mon, 28 Sep 2026 01:35:52 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8C=E6=AD=A5SQLite=E6=81=A2=E5=A4=8D?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=AA=8C=E8=AF=81=E8=AE=B0=E5=BD=95=E4=B8=8E?= =?UTF-8?q?=E8=BF=90=E7=BB=B4=E5=AE=89=E5=85=A8=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/Scert开发任务清单.md | 2 +- doc/Scert整改任务执行清单.md | 13 ++++- doc/Scert整改合并优化清单.md | 2 +- doc/全面审查测试与优化记录.md | 2 +- doc/基础整改任务规格.md | 9 ++- doc/构建版本与数据库支持矩阵.md | 65 ++++++++++++++++++++- doc/生产部署与运维说明.md | 4 ++ 7 files changed, 90 insertions(+), 7 deletions(-) diff --git a/doc/Scert开发任务清单.md b/doc/Scert开发任务清单.md index 89d98c9..9c50be9 100644 --- a/doc/Scert开发任务清单.md +++ b/doc/Scert开发任务清单.md @@ -2,7 +2,7 @@ > 2026-09-27 任务规格:完整 44 项及六阶段验收规范见《整改任务规格与验收约定》和《Scert整改任务执行清单》。以下历史勾选不替代当前整改状态,不把旧测试结果当成新增需求已经实现。 -> 当前进度(源码 `af831ae`):P0-05 `[~]`。已修复 SQLite 新连接配置丢失和带截止时间的写锁等待超限;Windows SQLite 3.49.1 文件库专项及竞态检测均通过 42 个叶子用例,另有 26 个核心用例连续重复 10 次通过。证据见《构建版本与数据库支持矩阵》第十五节,MySQL 176 / 202 个用例的上一批证据保留在第十四节。下一步继续 SQLite 取消边界、完整业务升级恢复、服务重启及其余数据库/平台门禁;没有截止时间的手动取消仍可能等待约 5 秒,不以本轮局部通过作生产放行,全部 44 项范围不变。 +> 当前进度(源码 `6db5d7b`):P0-05 `[~]`。已修复 SQLite 异常退出后旧 WAL 覆盖恢复数据的问题,并补充当前业务表、资源关联、密码、加密凭据和证书的冷备份恢复验证。SQLite 专项通过 55 个叶子用例;新增 13 个恢复用例连续 5 次竞态检测通过,详见《构建版本与数据库支持矩阵》第十六节。第十四、十五节保留此前 MySQL 和 SQLite 并发证据。历史业务升级、独立发行命令、真实服务重启、取消边界及其余数据库/平台和生产门禁仍未完成,全部 44 项范围不变。 > 2026-09-27 范围调整:本文件保留早期开发历史,当前执行以《Scert整改合并优化清单》和《Scert整改任务执行清单》为准。正式交付仅为 Web 和 Windows/Linux 服务端;本文件中的 Wails 桌面窗口、托盘、桌面更新、桌面配置和桌面 UI 测试均退出正式开发及验收范围,不再作为未完成交付项。CLI 限定为初始化及服务运维,不另建业务管理界面。 diff --git a/doc/Scert整改任务执行清单.md b/doc/Scert整改任务执行清单.md index 3323da9..d99016a 100644 --- a/doc/Scert整改任务执行清单.md +++ b/doc/Scert整改任务执行清单.md @@ -39,7 +39,7 @@ | P0-02 | [x] | 建立完整任务清单 | 44 项逐项规格、原始编号名称、字段、六阶段、引用和汇总状态核对通过 | 等待最终复审,随实现同步状态和证据 | 四份规格、统一验收约定及 `fab98d1` 独立克隆 | | P0-03 | [x] | 整理源码、构建产物和部署产物 | 全仓库及子目录规则、目录说明、正式回归和独立克隆构建校验通过 | 等待最终复审,后续提交继续执行边界检查 | 正式 Go 回归、完整索引、双平台 33 项清单及解包校验 | | P0-04 | [~] | 统一开发和构建版本 | 精确工具链、安装策略、发布前后校验、系统清单及固定换行已实现,双独立克隆和完整自动化通过 | Linux 原生构建与双平台实际运行环境记录,不以交叉编译替代 | `94237b8`、175 项前端测试、后端完整回归、4 个 Web 文件一致、33 项清单和解包校验 | -| P0-05 | [~] | 确认数据库正式支持矩阵 | MySQL 视图和完整清单证据保留;新增 SQLite 逐连接配置、截止时间锁等待、多进程竞争及 WAL 快照验证 | 继续 SQLite 取消边界、完整业务升级恢复和服务重启;其余数据库/平台及生产门禁不缩减 | `af831ae` SQLite 专项和竞态检测各 42 个叶子用例通过;26 个核心用例重复 10 次通过;详见支持矩阵第十五节 | +| P0-05 | [~] | 确认数据库正式支持矩阵 | 保留既有 MySQL/SQLite 证据;修复异常退出 WAL 覆盖恢复数据,补充当前业务数据、凭据与证书冷恢复 | 继续历史业务升级、独立发行命令、真实服务重启和取消边界;其余数据库/平台及生产门禁不缩减 | `6db5d7b` SQLite 专项 55 个叶子用例通过;新增 13 个用例连续 5 次竞态检测通过;详见支持矩阵第十六节 | | P0-06 | [~] | 建立统一领域模型 | 已有域名、证书、任务、服务器等实体,项目和部署关联仍需审查 | 补齐资源关系图、外键/归属和任务关联 | 模型文档、迁移检查、接口测试 | | P0-07 | [~] | 增加项目级权限和资源隔离 | 用户组和角色已有实现,项目级资源边界未闭环 | 为证书、DNS、服务器、任务和审计补齐项目归属及越权测试 | 权限矩阵、接口越权测试 | | P0-08 | [~] | 完善凭据和主密钥生命周期 | 已有凭据存储与测试,轮换、恢复、删除和失效证据不完整 | 补齐创建、轮换、恢复、删除、脱敏和不可恢复边界 | 安全测试、日志审查、恢复演练 | @@ -390,6 +390,8 @@ P0-05 从 `[!]` 调整为 `[~]`,并未标记完成;P0-04 剩余门禁和全 ### P0-05 SQLite 连接池、并发与锁(源码 `af831ae`) +本节保留上一批执行记录;当前恢复进展补充在下节及支持矩阵第十六节,不将历史待办误认为本批已完成。 + - `[x]` 修改前检查点 `6cab85d` 已推送;正式回归先复现扩容、零空闲连接、连接替换和 DSN 参数四类忙等待丢失,保留失败日志。 - `[x]` 每条物理连接入池前配置默认 5000 毫秒忙等待和 WAL;失败关闭连接,不依赖初始化时恰好选中的连接。 - `[x]` 为带截止时间的执行、查询、预处理、事务启动及逐行读取缩短等待预算,结束后恢复;状态不确定时淘汰连接,不重放业务 SQL,不把执行后清理错误转成自动重试信号。 @@ -398,3 +400,12 @@ P0-05 从 `[!]` 调整为 `[~]`,并未标记完成;P0-04 剩余门禁和全 - `[x]` Windows SQLite 3.49.1 专项与竞态检测各 42 个叶子用例通过,0 失败、0 跳过;26 个核心用例重复 10 次通过;后端全量、vet、模块校验和 Linux 测试包交叉编译通过,详见支持矩阵第十五节。 - `[~]` 无截止时间的手动取消仍可能等待原生忙等待结束(本批约 5 秒);继续核查取消边界、完整业务升级恢复和真实服务重启,不将现状记录测试算作缺口已经修复。 - `[ ]` Linux 原生运行、独立发行 CLI、PostgreSQL 当前实库复测、MySQL 剩余项及双平台生产门禁;P0-05 和全部 44 项总范围不变。 + +### P0-05 SQLite 异常退出及业务恢复(源码 `6db5d7b`) + +- `[x]` 修改前检查点 `5e5abf2` 已推送;子进程提交 WAL 后不关闭数据库直接退出,复现恢复返回成功但数据仍为旧值,保留 `wal-before.jsonl`。 +- `[x]` 服务维护锁内由 SQLite 合并日志并切换到 DELETE 模式,关闭连接后确认 WAL/SHM/回滚日志不存在;占用、孤立日志及非普通路径均拒绝恢复,不手动删除日志。 +- `[x]` 成功恢复和证书资产失败回滚均核对原有已提交 WAL 数据进入恢复前快照;不再依赖残留 WAL 偶然恢复原数据。 +- `[x]` 通过正式备份/恢复命令处理器验证当前全部业务表及模式、迁移记录、自增序列、资源关联、用户密码和分组、DNS 归属、加密凭据、真实证书/私钥与重复恢复。 +- `[x]` SQLite 专项 55 个叶子用例、恢复专项 13 个用例连续 5 次竞态检测通过;后端全量 1368 条叶子通过记录,0 失败、43 项条件跳过,vet/模块校验及 Linux CLI 测试包交叉编译通过。 +- `[ ]` 带历史业务数据的跨版本升级、独立发行二进制命令、真实服务重启、Linux 原生运行、断电/磁盘故障、取消边界及其余数据库/平台与生产门禁;本批不调用外部 DNS、SSH 或邮件服务,全部 44 项范围不变。 diff --git a/doc/Scert整改合并优化清单.md b/doc/Scert整改合并优化清单.md index db05e1f..c8aa0ff 100644 --- a/doc/Scert整改合并优化清单.md +++ b/doc/Scert整改合并优化清单.md @@ -8,7 +8,7 @@ > 进度同步:2026 年 9 月 27 日。任务状态与《Scert整改任务执行清单.md》及四份分级任务规格保持一致;本文件的需求和验收标准不因状态更新而缩减。详细变更、验证命令、证据和剩余缺口见执行清单与对应专项记录,`[~]` 仅表示已有实现或正在整改,不表示整项完成。 -> 当前专项:P0-05 已修复 SQLite 连接池扩容/重建时忙等待配置丢失,以及短截止时间写锁等待超限;源码 `af831ae` 的 Windows SQLite 专项及竞态检测均通过 42 个叶子用例,另有三子进程实际锁竞争和活动 WAL 快照证据,详见支持矩阵第十五节。MySQL 视图与完整清单的上一批证据保留在第十四节。无截止时间的取消、完整业务升级恢复、服务重启、其他数据库/平台及生产门禁仍待完成,P0-05 保持 `[~]`,全部 44 项范围不变。 +> 当前专项:P0-05 已修复 SQLite 异常退出后残留 WAL 导致“恢复成功但仍读到旧数据”的问题,并验证恢复前快照保留已提交 WAL 内容、资产失败回滚和外部事务占用保护。源码 `6db5d7b` 的 SQLite 专项通过 55 个叶子用例,新增 13 个恢复用例连续 5 次竞态检测通过;当前业务数据、资源关联、凭据和证书恢复证据见支持矩阵第十六节。历史业务升级、独立发行命令、真实服务重启、取消边界及其余数据库/平台和生产门禁仍待完成,P0-05 保持 `[~]`,全部 44 项范围不变。 --- diff --git a/doc/全面审查测试与优化记录.md b/doc/全面审查测试与优化记录.md index fcbddba..23e8f83 100644 --- a/doc/全面审查测试与优化记录.md +++ b/doc/全面审查测试与优化记录.md @@ -2,7 +2,7 @@ > 2026-09-27 证据索引:当前 44 项整改的逐项范围、命令、实机步骤和复审字段见《整改任务规格与验收约定》及四份分级规格;实际进展以《Scert整改任务执行清单》为准。本文历史结果须按当时源码与环境解释。 -> 本批进度(源码 `af831ae`):P0-05 `[~]`。SQLite 文件库先复现四类连接配置丢失及 150 毫秒截止时间实际等待约 5 秒的问题,再修复逐连接初始化与执行路径的等待预算;专项和竞态检测均通过 42 个叶子用例,26 个核心用例重复 10 次通过。后端全量通过 1355 个叶子用例、含父项 1472 条记录,0 失败,43 项条件跳过;vet、模块校验及 Linux 数据库/CLI 测试包交叉编译通过。证据见支持矩阵第十五节;无截止时间的手动取消仍约 5 秒,不能记为立即取消已实现。MySQL 上批证据保留在第十四节;前端、Linux 实机及生产部署未在本批验收。 +> 本批进度(源码 `6db5d7b`):P0-05 `[~]`。先复现异常退出后的旧 WAL 覆盖恢复数据,再修复恢复前日志合并、模式切换和安全预检;新增业务关联、凭据、证书、重复恢复及失败保护回归。SQLite 专项通过 55 个叶子用例;新增 13 个用例连续 5 次竞态检测通过。后端全量 1368 条叶子通过记录、含父项 1489 条,0 失败,43 项条件跳过;vet、模块校验及 Linux CLI 测试包交叉编译通过。证据见支持矩阵第十六节,前两批证据保留在第十四、十五节;没有执行 Linux 实机、独立发行命令、前端或生产验收。 > 2026-09-27 范围调整:以下为历史审查证据。当前正式测试范围仅为 Web 和 Windows/Linux 服务端;历史桌面模块测试记录保留,但不再作为交付目标或生产门禁。当前任务状态见《Scert整改任务执行清单》。 diff --git a/doc/基础整改任务规格.md b/doc/基础整改任务规格.md index 605af58..a9ad3c4 100644 --- a/doc/基础整改任务规格.md +++ b/doc/基础整改任务规格.md @@ -63,7 +63,7 @@ - 任务编号:P0-05;任务名称:确认数据库正式支持矩阵;优先级:P0。 - 当前状态:`[~] 进行中`。 - 六阶段:需求确认 `[x]`;代码实现 `[~]`;自动化测试 `[~]`;隔离环境测试 `[~]`;生产部署测试 `[!]`;最终验收 `[ ]`。 -- 问题说明:已修复迁移、连接恢复、备份会话及本批 MySQL 对象导出/恢复保护;新增 SQLite 逐连接忙等待/WAL 配置、短截止时间锁等待、并发隔离与活动 WAL 快照证据。SQLite 无截止时间取消、完整业务升级恢复、服务重启,MySQL 其他编码/SQL 模式及剩余三库/双平台证据仍不足。 +- 问题说明:已修复迁移、连接恢复、备份会话、MySQL 对象导出/恢复及 SQLite 逐连接配置与短截止时间等待;本批修复异常退出后的旧 WAL 覆盖恢复数据,补充当前业务关联、凭据与证书冷恢复。历史业务升级、独立发行命令、真实服务重启、取消边界及剩余三库/双平台证据仍不足。 - 涉及文件:`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 锁并发;逐库检查类型、索引、默认值、事务及初始化、升级、回滚、备份恢复。不能悄然去掉难测版本。 @@ -118,6 +118,13 @@ - `[~]` 无截止时间取消的原生等待边界、完整业务升级恢复和服务重启;已记录的 5 秒行为不是已修复证明。 - `[ ]` 独立发行命令、Linux 实机、其余数据库复测及生产门禁;P0-05 不提升为完成。 +### P0-05 SQLite 异常退出及业务恢复子任务 + +- `[x]` 源码 `6db5d7b` 修复残留 WAL 覆盖恢复主文件;恢复前快照包含已经提交的 WAL,恢复失败仍保留原业务数据。 +- `[x]` 正式命令处理器核对当前全部业务表和模式、迁移历史、审计序列、用户密码/分组、任务和部署关联、加密凭据及真实证书私钥,重复恢复通过。 +- `[x]` SQLite 专项 55 个叶子用例、恢复专项 13 个用例连续 5 次竞态检测通过;完整后端、静态及模块检查通过,证据见支持矩阵第十六节。 +- `[ ]` 带业务数据的历史版本升级、独立发行命令、真实服务重启和 Linux 原生运行;异常进程退出不等于断电/磁盘故障,凭据可解密不等于外部 DNS/SSH/邮件服务已验收。 + ## P0-06 建立统一领域模型 - 任务编号:P0-06;任务名称:建立统一领域模型;优先级:P0。 diff --git a/doc/构建版本与数据库支持矩阵.md b/doc/构建版本与数据库支持矩阵.md index 9116f53..bfbb9f4 100644 --- a/doc/构建版本与数据库支持矩阵.md +++ b/doc/构建版本与数据库支持矩阵.md @@ -1,6 +1,6 @@ # 构建版本与数据库支持矩阵 -核查日期:2026 年 9 月 27 日;SQLite 补充核查:2026 年 9 月 28 日,见第十五节。本文区分代码支持、隔离测试和正式生产准入,不把驱动存在视为兼容性验收。 +核查日期:2026 年 9 月 27 日;SQLite 补充核查:2026 年 9 月 28 日(本机时间),见第十五、十六节。本文区分代码支持、隔离测试和正式生产准入,不把驱动存在视为兼容性验收。 ## 一、工具链与依赖 @@ -55,7 +55,7 @@ npm.cmd run build | 数据库 | 预期定位 | 代码现状 | 本轮验证 | 尚未满足的正式验收 | |---|---|---|---|---| -| SQLite | 单机、开发、轻量部署 | 驱动、初始化、迁移 1~9、CLI 备份恢复、逐连接配置及截止时间等待预算 | 迁移证据保留;Windows SQLite 3.49.1 多连接/多进程、锁等待、回滚及活动 WAL 快照,专项与竞态各 42 个叶子用例通过,见第十五节 | 无截止时间取消边界、Linux 实机、服务重启、完整业务数据升级恢复及生产门禁 | +| SQLite | 单机、开发、轻量部署 | 驱动、初始化、迁移 1~9、CLI 备份恢复、逐连接配置、截止时间等待预算及恢复前日志处理 | 保留迁移/并发证据;修复异常退出 WAL 覆盖恢复数据,验证当前业务样本、凭据及证书恢复,专项 55 个叶子用例通过,见第十六节 | 取消边界、带业务数据的历史升级、独立发行命令、Linux 实机、真实服务重启及生产门禁 | | MySQL 5.7.44 | 历史兼容目标,仍保留实现 | 独立方言、迁移、连接恢复、InnoDB 快照、特殊列、自有触发器/例程/事件/视图、完整清单权限及受限官方恢复 | `777c716` 完整专项 176 个叶子用例通过,详见第十四节 | 更多编码与 SQL 模式、并发 DDL/授权变化、定义者迁移、独立发行命令、Linux 实库、Web 初始化及生产系统验证 | | MySQL 8.0.45 | 正式生产支持目标 | 同上,额外处理不可见列实际数据、启用角色与部分撤销 | 同候选独立实库 202 个叶子用例通过,未复用 5.7 的结果;详见第十四节 | 同上;不代表 8.0 全部补丁版本已经验证 | | PostgreSQL | 正式生产支持目标,实际服务端版本待本轮复核 | 独立方言、迁移 1~9、严格 TLS 和官方备份恢复工具接入 | 文件/嵌入/登记一致性、凭据/TLS 单元测试 | 当前版本真实集群、初始化、升级、失败回滚、备份恢复和业务回归 | @@ -560,3 +560,64 @@ go test -json -count=1 -timeout=8m ./... - `[ ]` Linux 原生运行、独立发行命令、其余数据库/平台和生产门禁继续保留;此前 Linux 测试包交叉编译不是 Linux 实机执行证据。 P0-05 总状态保持 `[~]`,全部 44 项范围不变;本批局部通过不提升为生产验收通过。第十四节末的“下一步”保留为上一批历史记录,当前 SQLite 进展以本节为准。 + +## 十六、SQLite 异常退出及业务数据恢复 + +本批日期:2026 年 9 月 28 日(本机时间)。修改前检查点 `5e5abf2`,正式源码 `6db5d7b`,均已推送。仍使用 Windows 本机独立临时 SQLite 文件库,没有清理共享或生产数据库。第十四、十五节保留历史证据,本节补充当前恢复进展。 + +### 缺陷复现与产品修复 + +正式测试子进程打开数据库、提交修改后直接退出,不执行数据库关闭,确保留下真实且非空的 WAL。原恢复命令只替换主文件并报告成功,重新打开后却读到旧 WAL 中的数据,而非备份数据。`wal-before.jsonl` 保存该失败;同批还发现原恢复前副本没有合入已提交 WAL,不能独立代表恢复前状态。 + +修复由 `operations.go` 调用新增 `sqlite_restore.go`,在服务维护锁内、配置替换及恢复前副本生成之前执行: + +1. 核对主文件与 WAL/SHM/回滚日志状态,拒绝孤立日志及非普通路径。 +2. 由 SQLite 执行 `wal_checkpoint(TRUNCATE)`,检查忙状态和检查点完成情况。 +3. 切换到 DELETE 日志模式并关闭连接,确认不再残留日志后才允许生成副本、替换主文件。 +4. 存在外部事务或无法完成预检时拒绝恢复;不手动删除日志、不重放业务 SQL。 + +成功恢复和后续证书资产失败两条路径都核对恢复前副本包含已提交 WAL 数据。后者还核对失败回滚后的业务内容,不能依赖残留 WAL 偶然保住旧数据。正常服务再次打开数据库时仍启用产品 WAL 配置。 + +### 当前业务样本覆盖 + +- 经正式迁移创建现有全部表,并在八张业务表中放入代表性数据:`settings`、`users`、`domains`、`servers`、`domain_servers`、`tasks`、`task_attempts`、`audit_logs`。 +- 使用正式备份/恢复命令处理器,不直接用测试复制替代命令;比较全部表内容、模式和索引定义、`schema_migrations` 及 `sqlite_sequence`。 +- 备份后修改业务字段、删除部署绑定和任务尝试、增加审计数据,并改变配置、加密凭据及证书内容,确保恢复不是空操作。 +- 通过产品仓储读取用户密码/角色/分组、域名及到期时间、服务器凭据引用、任务操作者/证书版本、尝试记录和部署绑定;核对恢复后的自增写入。 +- DNS 账户归属在配置中核对;恢复后重新打开凭据存储并验证内容一致。SSH 私钥与证书/私钥均在测试中随机生成,恢复后可解析或完成配对;没有真实云凭据或外部调用。 +- 同一归档连续恢复两次,确认归档清单不被读取或恢复过程修改。 + +这些测试覆盖当前模式中的业务样本冷恢复,不证明带历史业务数据的跨版本升级、HTTP 登录、外部 DNS/SSH/邮件调用或独立发行二进制已经验收。 + +### 最终验证证据 + +证据目录为 `artifacts/sqlite-restore-20260928/`,JSONL 为 UTF-16,保留在本地并由 Git 忽略。失败历史不删除;未生成辅助验收脚本,异常退出场景复用正式测试二进制。 + +| 检查 | 证据或命令 | 实际结果 | +|---|---|---| +| SQLite 全专项 | `sqlite-final.jsonl` | 55 个叶子用例、含父项 66 条通过,2 个包,0 失败、0 跳过 | +| 新增恢复用例重复竞态检测 | `restore-race-repeat.jsonl` | 13 个叶子用例各执行 5 次,65 条叶子、含父项 85 条通过,0 失败、0 跳过 | +| 后端全量 | `backend-final.jsonl` | 1368 条叶子、含父项 1489 条通过,28 个包,0 失败,43 项条件跳过 | +| 静态与模块 | `go vet ./...`、`go mod verify` | 退出码 0,模块校验通过 | +| Linux CLI 测试包 | `GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go test -c ./internal/cli` | 交叉编译通过,未在 Linux 执行 | + +后端全量的 1368 条叶子记录对应 1367 个不同的包/测试名称;已有 PostgreSQL 非安全 DSN 用例有一个名称重复输出,不把重复记录当成额外覆盖。43 项条件跳过仍不算实库通过。 + +主要测试命令在 `backend/` 下执行: + +```powershell +go test -json -count=1 -timeout=90s -run '^TestSQLite' ./internal/database ./internal/cli +go test -race -json -count=5 -timeout=3m -run '^TestSQLite(Business|Restore)' ./internal/cli +go test -json -count=1 -timeout=8m ./... +``` + +`wal-before.jsonl` 为失败复现,`wal-after.jsonl` 和 `business-review.jsonl` 为中间定向结果;最终依据以上 `*-final.jsonl` 及 `restore-race-repeat.jsonl`。本轮未重跑 MySQL 实库,不沿用其历史通过结果冒充本轮复测。 + +### 剩余边界与任务状态 + +- `[x]` 异常退出恢复、恢复前 WAL 快照、资产失败回滚、外部读写事务占用、三类孤立/目录日志路径及取消前置检查的 Windows 隔离回归完成。 +- `[x]` 当前全部表的代表性业务样本、资源关联、凭据与证书冷恢复及重复恢复验证完成,等待完整范围复审。 +- `[ ]` 带历史业务数据的跨版本升级、独立发行命令、真实服务重启、Linux 原生执行、物理断电及磁盘故障。进程退出不等于断电,交叉编译不等于实机通过。 +- `[ ]` 取消边界、其余数据库/平台、Web/外部服务与生产门禁继续保留;维护锁不能阻止外部程序在预检之后重新访问数据库,整个恢复期间仍须停止所有外部访问。 + +P0-05 保持 `[~]`,全部 44 项范围不变;本批修复和回归不作为生产放行结论。 diff --git a/doc/生产部署与运维说明.md b/doc/生产部署与运维说明.md index f18229c..794ac88 100644 --- a/doc/生产部署与运维说明.md +++ b/doc/生产部署与运维说明.md @@ -273,6 +273,10 @@ SQLite 文件库的每条物理连接(包括扩容和重建)均设置 WAL 重要限制:没有截止时间的手动取消仍依赖原生驱动中断,本批持锁测试在取消后约 5 秒返回;较长截止时间调用中途手动取消也不能承诺立即退出当前忙等待。事务提交/回滚沿用驱动接口,本批不承诺任意 SQL 脚本整体原子性或所有取消路径立即终止。Windows SQLite 3.49.1 已验证双连接池、三子进程竞争和活动 WAL 快照,但不代表网络文件系统、Linux 服务重启、断电恢复、完整业务数据恢复或多实例生产部署已经验收。证据及未完成项见《构建版本与数据库支持矩阵》第十五节。 +SQLite 恢复前必须停止 Scert 服务和所有外部数据库访问。恢复命令取得维护锁后,由 SQLite 自身合并旧 WAL 并切换到 DELETE 日志模式,关闭连接后确认日志已清理,再生成恢复前副本并替换主文件;不能手动删除 WAL/SHM 来强行通过。存在外部事务、孤立日志、非普通日志路径或无法完成模式切换时会拒绝恢复。服务下次正常打开数据库仍按产品配置启用 WAL。服务维护锁不能阻止不遵守该锁的外部程序在检查结束后重新访问数据库,因此维护期间必须持续停止这些程序。 + +源码 `6db5d7b` 的 Windows 隔离测试已验证异常退出后的恢复与失败回滚、当前业务表和关联、配置归属、用户密码、加密凭据、真实证书私钥及重复恢复;证据见支持矩阵第十六节。这不是历史业务升级、独立发行程序、真实服务重启、物理断电或外部 DNS/SSH 调用的验收证明。无法正常读取的损坏库应先人工隔离并保留整套主文件和日志,不绕过日志安全检查。 + MySQL 账号和密码从加密数据库凭据引用读取,只在维护连接期间存在于内存,不写回普通配置或备份清单。恢复前固定当前可用账号用于快照、导入和失败回滚;数据库服务端账号本身的密码轮换仍需单独管理,恢复旧配置不能自动恢复数据库账户密码。 MySQL 完整备份先检查有效库级或全局 `SELECT`,不能用零散表级权限或过滤后的空清单证明对象完整。视图还要求有效 `SHOW VIEW`;失效视图或定义不可见时拒绝备份并保留原文件。视图按本库依赖排序,保留定义者、创建字符集和检查选项,不创建占位基础表,也不删除与视图同名的已有基础表。基础数据和例程先于视图,随后创建触发器、恢复外键检查,最后恢复事件;仍需管理员保证维护窗口内没有外部 DDL 或授权变化。