diff --git a/doc/Scert开发任务清单.md b/doc/Scert开发任务清单.md index 2ca72df..89d98c9 100644 --- a/doc/Scert开发任务清单.md +++ b/doc/Scert开发任务清单.md @@ -2,7 +2,7 @@ > 2026-09-27 任务规格:完整 44 项及六阶段验收规范见《整改任务规格与验收约定》和《Scert整改任务执行清单》。以下历史勾选不替代当前整改状态,不把旧测试结果当成新增需求已经实现。 -> 当前进度(源码 `777c716`):原始整改清单、执行清单和分级规格同步标记状态。P0-05 `[~]`:已增加视图备份恢复、依赖排序、完整清单与视图定义权限检查,Windows 5.7.44 / 8.0.45 最终全专项分别通过 176 / 202 个叶子用例;证据见《构建版本与数据库支持矩阵》第十四节。下一步推进 SQLite 并发与锁验证;MySQL 其他编码/SQL 模式、独立发行验证、其余数据库/平台与生产门禁仍未完成,不以本轮局部通过作生产放行。 +> 当前进度(源码 `af831ae`):P0-05 `[~]`。已修复 SQLite 新连接配置丢失和带截止时间的写锁等待超限;Windows SQLite 3.49.1 文件库专项及竞态检测均通过 42 个叶子用例,另有 26 个核心用例连续重复 10 次通过。证据见《构建版本与数据库支持矩阵》第十五节,MySQL 176 / 202 个用例的上一批证据保留在第十四节。下一步继续 SQLite 取消边界、完整业务升级恢复、服务重启及其余数据库/平台门禁;没有截止时间的手动取消仍可能等待约 5 秒,不以本轮局部通过作生产放行,全部 44 项范围不变。 > 2026-09-27 范围调整:本文件保留早期开发历史,当前执行以《Scert整改合并优化清单》和《Scert整改任务执行清单》为准。正式交付仅为 Web 和 Windows/Linux 服务端;本文件中的 Wails 桌面窗口、托盘、桌面更新、桌面配置和桌面 UI 测试均退出正式开发及验收范围,不再作为未完成交付项。CLI 限定为初始化及服务运维,不另建业务管理界面。 diff --git a/doc/Scert整改任务执行清单.md b/doc/Scert整改任务执行清单.md index dde913b..3323da9 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 | [~] | 确认数据库正式支持矩阵 | 自有表、触发器、例程、事件和视图导出已有本批证据;新增完整清单权限和官方视图依赖恢复保护 | 下一步验证 SQLite 并发与锁;MySQL 其他编码/SQL 模式、独立发行命令、Linux、PostgreSQL 和正式服务门禁继续保留 | `777c716` 双版本完整专项分别 176、202 个叶子用例通过,0 失败、0 跳过;详见支持矩阵第十四节 | +| P0-05 | [~] | 确认数据库正式支持矩阵 | MySQL 视图和完整清单证据保留;新增 SQLite 逐连接配置、截止时间锁等待、多进程竞争及 WAL 快照验证 | 继续 SQLite 取消边界、完整业务升级恢复和服务重启;其余数据库/平台及生产门禁不缩减 | `af831ae` SQLite 专项和竞态检测各 42 个叶子用例通过;26 个核心用例重复 10 次通过;详见支持矩阵第十五节 | | P0-06 | [~] | 建立统一领域模型 | 已有域名、证书、任务、服务器等实体,项目和部署关联仍需审查 | 补齐资源关系图、外键/归属和任务关联 | 模型文档、迁移检查、接口测试 | | P0-07 | [~] | 增加项目级权限和资源隔离 | 用户组和角色已有实现,项目级资源边界未闭环 | 为证书、DNS、服务器、任务和审计补齐项目归属及越权测试 | 权限矩阵、接口越权测试 | | P0-08 | [~] | 完善凭据和主密钥生命周期 | 已有凭据存储与测试,轮换、恢复、删除和失效证据不完整 | 补齐创建、轮换、恢复、删除、脱敏和不可恢复边界 | 安全测试、日志审查、恢复演练 | @@ -387,3 +387,14 @@ P0-05 从 `[!]` 调整为 `[~]`,并未标记完成;P0-04 剩余门禁和全 - `[x]` 本批同步原始清单、开发清单、审查记录、分级规格、支持矩阵及运维说明;上述事件段的剩余项为当时记录,当前视图和完整清单进展以本节为准。 - `[~]` 下一子任务:SQLite 文件库的多连接/多实例并发、写锁等待与取消、事务回滚及重连后的会话配置;先核对现有实现,再复现实际缺口。 - `[ ]` MySQL 其他编码/SQL 模式、跨服务器定义者、并发 DDL/授权变化、独立发行 CLI、Linux 实库、PostgreSQL 当前复测和生产门禁。全部 44 项及 P0-05 总状态不变。 + +### P0-05 SQLite 连接池、并发与锁(源码 `af831ae`) + +- `[x]` 修改前检查点 `6cab85d` 已推送;正式回归先复现扩容、零空闲连接、连接替换和 DSN 参数四类忙等待丢失,保留失败日志。 +- `[x]` 每条物理连接入池前配置默认 5000 毫秒忙等待和 WAL;失败关闭连接,不依赖初始化时恰好选中的连接。 +- `[x]` 为带截止时间的执行、查询、预处理、事务启动及逐行读取缩短等待预算,结束后恢复;状态不确定时淘汰连接,不重放业务 SQL,不把执行后清理错误转成自动重试信号。 +- `[x]` 真实文件库验证读写隔离、读事务快照、双连接池 200 次并发写入、三子进程就绪后释放写锁并完成 150 次写入、事务回滚及关闭后重新打开。 +- `[x]` 活动 WAL 下的未提交/已提交两类快照内容及完整性验证通过;已有 CLI 备份恢复回归继续通过,不等同于独立发行命令或生产恢复验收。 +- `[x]` Windows SQLite 3.49.1 专项与竞态检测各 42 个叶子用例通过,0 失败、0 跳过;26 个核心用例重复 10 次通过;后端全量、vet、模块校验和 Linux 测试包交叉编译通过,详见支持矩阵第十五节。 +- `[~]` 无截止时间的手动取消仍可能等待原生忙等待结束(本批约 5 秒);继续核查取消边界、完整业务升级恢复和真实服务重启,不将现状记录测试算作缺口已经修复。 +- `[ ]` Linux 原生运行、独立发行 CLI、PostgreSQL 当前实库复测、MySQL 剩余项及双平台生产门禁;P0-05 和全部 44 项总范围不变。 diff --git a/doc/Scert整改合并优化清单.md b/doc/Scert整改合并优化清单.md index ee36eaf..db05e1f 100644 --- a/doc/Scert整改合并优化清单.md +++ b/doc/Scert整改合并优化清单.md @@ -8,7 +8,7 @@ > 进度同步:2026 年 9 月 27 日。任务状态与《Scert整改任务执行清单.md》及四份分级任务规格保持一致;本文件的需求和验收标准不因状态更新而缩减。详细变更、验证命令、证据和剩余缺口见执行清单与对应专项记录,`[~]` 仅表示已有实现或正在整改,不表示整项完成。 -> 当前专项:P0-05 已补齐本批视图备份恢复、依赖排序、完整表/视图清单读取权限及 SHOW VIEW 检查;源码 `777c716` 的 Windows 双版本隔离全专项分别通过 176、202 个叶子用例,详见支持矩阵第十四节。下一步推进 SQLite 并发与锁验证;MySQL 其余编码/SQL 模式、独立发行验证、其余数据库/平台及生产门禁仍待完成,P0-05 保持 `[~]`,全部 44 项范围不变。 +> 当前专项:P0-05 已修复 SQLite 连接池扩容/重建时忙等待配置丢失,以及短截止时间写锁等待超限;源码 `af831ae` 的 Windows SQLite 专项及竞态检测均通过 42 个叶子用例,另有三子进程实际锁竞争和活动 WAL 快照证据,详见支持矩阵第十五节。MySQL 视图与完整清单的上一批证据保留在第十四节。无截止时间的取消、完整业务升级恢复、服务重启、其他数据库/平台及生产门禁仍待完成,P0-05 保持 `[~]`,全部 44 项范围不变。 --- diff --git a/doc/全面审查测试与优化记录.md b/doc/全面审查测试与优化记录.md index 7cf226a..fcbddba 100644 --- a/doc/全面审查测试与优化记录.md +++ b/doc/全面审查测试与优化记录.md @@ -2,7 +2,7 @@ > 2026-09-27 证据索引:当前 44 项整改的逐项范围、命令、实机步骤和复审字段见《整改任务规格与验收约定》及四份分级规格;实际进展以《Scert整改任务执行清单》为准。本文历史结果须按当时源码与环境解释。 -> 本批进度(源码 `777c716`):P0-05 `[~]`。增加视图原定义导出、依赖排序、完整清单与 SHOW VIEW 权限检查,以及官方最终视图块的受限重排和执行上下文保护。Windows 5.7 / 8.0 全专项分别通过 176 / 202 个叶子用例,0 失败、0 跳过;详见《构建版本与数据库支持矩阵》第十四节。后端无缓存全量测试通过,1438 条通过记录、43 项条件跳过;vet、模块校验与 Linux 测试包交叉编译通过。已修正新 SELECT 门禁暴露的旧测试前提,保留权限反例及原备份保护断言。下一步推进 SQLite 并发与锁验证;前端、Linux 实库及生产部署未在本批验收。 +> 本批进度(源码 `af831ae`):P0-05 `[~]`。SQLite 文件库先复现四类连接配置丢失及 150 毫秒截止时间实际等待约 5 秒的问题,再修复逐连接初始化与执行路径的等待预算;专项和竞态检测均通过 42 个叶子用例,26 个核心用例重复 10 次通过。后端全量通过 1355 个叶子用例、含父项 1472 条记录,0 失败,43 项条件跳过;vet、模块校验及 Linux 数据库/CLI 测试包交叉编译通过。证据见支持矩阵第十五节;无截止时间的手动取消仍约 5 秒,不能记为立即取消已实现。MySQL 上批证据保留在第十四节;前端、Linux 实机及生产部署未在本批验收。 > 2026-09-27 范围调整:以下为历史审查证据。当前正式测试范围仅为 Web 和 Windows/Linux 服务端;历史桌面模块测试记录保留,但不再作为交付目标或生产门禁。当前任务状态见《Scert整改任务执行清单》。 diff --git a/doc/基础整改任务规格.md b/doc/基础整改任务规格.md index e112e4e..605af58 100644 --- a/doc/基础整改任务规格.md +++ b/doc/基础整改任务规格.md @@ -63,7 +63,7 @@ - 任务编号:P0-05;任务名称:确认数据库正式支持矩阵;优先级:P0。 - 当前状态:`[~] 进行中`。 - 六阶段:需求确认 `[x]`;代码实现 `[~]`;自动化测试 `[~]`;隔离环境测试 `[~]`;生产部署测试 `[!]`;最终验收 `[ ]`。 -- 问题说明:已修复迁移、连接恢复、备份会话、精确数值、跨表快照、失败文件保护、生成列和不可见列导出;新增自有触发器、例程、事件和视图导出、完整清单与定义可见权限、恢复调度安全、视图依赖排序及执行上下文保护。其他编码与 SQL 模式、独立发行验证、SQLite 并发锁及剩余三库/双平台证据仍不足。 +- 问题说明:已修复迁移、连接恢复、备份会话及本批 MySQL 对象导出/恢复保护;新增 SQLite 逐连接忙等待/WAL 配置、短截止时间锁等待、并发隔离与活动 WAL 快照证据。SQLite 无截止时间取消、完整业务升级恢复、服务重启,MySQL 其他编码/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 锁并发;逐库检查类型、索引、默认值、事务及初始化、升级、回滚、备份恢复。不能悄然去掉难测版本。 @@ -72,6 +72,8 @@ - 验收证据:源码 `777c716` 在 Windows MySQL 5.7.44、8.0.45 完整专项分别通过 176、202 个叶子用例,0 失败、0 跳过;含父项记录为 201、227。新增视图与完整清单权限、复杂依赖、原始官方文件恢复及失败保护;详见支持矩阵第十四节,之前批次的例程、事件等证据保留追溯。 - 复审结果:上述 Windows 隔离范围通过,不等于生产放行。基础表仍只接受 InnoDB,不承诺并发 DDL 一致性;视图已在本批列明场景中验证,不再一概拒绝。官方文件仅对严格识别的连续最终视图块调整顺序;其他编码/SQL 模式、定义者迁移、独立发行命令、Linux 实库、PostgreSQL 当前复测、SQLite 并发锁及正式服务验收仍未完成。 +本批补充证据(`af831ae`):Windows SQLite 3.49.1 专项与竞态检测各通过 42 个叶子用例,26 个核心用例连续重复 10 次通过;连接配置丢失和短截止时间等待超限已有先失败后通过记录。覆盖真实文件库双连接池、三子进程、事务快照、回滚、关闭重开及活动 WAL 快照。无截止时间的手动取消仍可能约 5 秒;这一记录不代表立即取消通过,也不替代完整业务升级恢复、真实服务重启或 Linux/生产验收。当前 SQLite 进展以支持矩阵第十五节及下方子任务为准。 + ### P0-05 触发器自有备份子任务进度 - `[x]` 复现自有备份丢失触发器,以及权限不足时隐藏触发器仍报告成功的问题。 @@ -108,6 +110,14 @@ - `[~]` 下一步验证 SQLite 并发与锁;上方触发器、例程和事件段中的缺口是各批历史状态,当前进展以本节为准。 - `[ ]` MySQL 其他编码/SQL 模式、并发 DDL/授权变化、独立发行验证、剩余三库/双平台及生产门禁;P0-05 保持 `[~]`。 +### P0-05 SQLite 并发与锁子任务进度 + +- `[x]` 逐连接初始化;短截止时间执行/查询/预处理/事务启动等待预算及配置恢复;不重试业务 SQL。 +- `[x]` 多连接、多连接池和三子进程实际锁竞争;隔离、快照、事务回滚、连接重建与文件库关闭重开。 +- `[x]` 活动 WAL 快照不包含未提交数据,提交后快照包含对应数据;专项、重复、竞态及相关后端回归通过。 +- `[~]` 无截止时间取消的原生等待边界、完整业务升级恢复和服务重启;已记录的 5 秒行为不是已修复证明。 +- `[ ]` 独立发行命令、Linux 实机、其余数据库复测及生产门禁;P0-05 不提升为完成。 + ## P0-06 建立统一领域模型 - 任务编号:P0-06;任务名称:建立统一领域模型;优先级:P0。 diff --git a/doc/构建版本与数据库支持矩阵.md b/doc/构建版本与数据库支持矩阵.md index fd95547..9116f53 100644 --- a/doc/构建版本与数据库支持矩阵.md +++ b/doc/构建版本与数据库支持矩阵.md @@ -1,6 +1,6 @@ # 构建版本与数据库支持矩阵 -核查日期:2026 年 9 月 27 日。本文区分代码支持、隔离测试和正式生产准入,不把驱动存在视为兼容性验收。 +核查日期:2026 年 9 月 27 日;SQLite 补充核查:2026 年 9 月 28 日,见第十五节。本文区分代码支持、隔离测试和正式生产准入,不把驱动存在视为兼容性验收。 ## 一、工具链与依赖 @@ -55,7 +55,7 @@ npm.cmd run build | 数据库 | 预期定位 | 代码现状 | 本轮验证 | 尚未满足的正式验收 | |---|---|---|---|---| -| SQLite | 单机、开发、轻量部署 | 驱动、初始化、迁移 1~9、CLI 备份恢复 | 临时独立库从版本 0~9 升级、重复迁移、非法历史和新版数据库拒绝 | 并发读写/锁、服务重启、完整业务数据升级恢复 | +| SQLite | 单机、开发、轻量部署 | 驱动、初始化、迁移 1~9、CLI 备份恢复、逐连接配置及截止时间等待预算 | 迁移证据保留;Windows SQLite 3.49.1 多连接/多进程、锁等待、回滚及活动 WAL 快照,专项与竞态各 42 个叶子用例通过,见第十五节 | 无截止时间取消边界、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 单元测试 | 当前版本真实集群、初始化、升级、失败回滚、备份恢复和业务回归 | @@ -511,3 +511,52 @@ go test -json -p 1 -count=1 -timeout=8m -run '^TestMySQLReal' ./internal/databas - `[x]` 本批视图导出/恢复、完整清单可见权限、官方互操作和失败保护实现及 Windows 隔离回归完成,等待完整范围复审。 - `[~]` 下一步推进原定 SQLite 并发与锁要求,核对多连接/多实例、写锁等待和取消、事务回滚及会话配置恢复。 - `[ ]` MySQL 其他编码/SQL 模式、跨服务器定义者、并发 DDL/授权变化、独立发行 CLI、Linux 实库、PostgreSQL 当前复测、三库完整业务与双平台生产门禁。 + +## 十五、SQLite 连接池、并发与锁 + +本批日期:2026 年 9 月 28 日。修改前检查点为 `6cab85d`,正式源码为 `af831ae`,均已推送。测试使用 Windows 本机临时独立文件库;引擎为 SQLite 3.49.1,驱动仍为 `modernc.org/sqlite v1.37.0`。未操作远端部署、生产数据库或真实 DNS,也没有重跑第十四节的 MySQL 实库专项。 + +### 失败复现与实现边界 + +- 原先仅通过连接池执行一次忙等待配置,扩容、零空闲连接、连接替换和 DSN 自带其他等待值时,新连接配置不一致;四类正式回归先失败,修复后通过。 +- 150 毫秒截止时间的写锁等待原先约 5.019 秒才返回,修复后约 153 毫秒返回。立即事务原先仅返回 SQLite BUSY,现保留底层错误并关联上下文超时信息。 +- 使用 `driver.Connector` 在每条物理连接入池前配置 WAL 和默认 5000 毫秒忙等待,保留正常连接池规模,不强制单连接掩盖竞争。 +- 调用剩余截止时间不足 5 秒时,临时缩短等待预算并在结束后恢复;覆盖普通及预处理执行/查询、事务启动、结果逐行读取和连接初始化中的 WAL 设置。 +- 配置失败或恢复失败时淘汰不确定连接,不重放业务 SQL;执行后的清理错误不转换为触发自动重试的 `ErrBadConn`。 + +### 正式回归范围 + +- 验证多连接、零空闲连接、连接替换、其他 DSN 参数保留、WAL 读写隔离和读事务快照。 +- 双连接池的 8 个并发工作协程完成 200 次原子递增;三个独立测试子进程就绪后释放父进程写锁,共完成 150 次写入,并核对关闭重开后的持久化结果。 +- 多进程测试复用正式 Go 测试二进制,没有生成辅助验收脚本;覆盖超时/回滚无错误写入副作用、连接继续使用及故障后不重放 SQL。 +- 调用产品 `backupSQLiteDatabase` 验证活动 WAL 快照:未提交数据不进入备份,提交后数据进入备份,并执行 `quick_check`。 + +### 提交后复核证据 + +证据目录为 `artifacts/sqlite-concurrency-20260928/`,日志保留在本地且不纳入 Git。JSONL 为 PowerShell UTF-16,可用 `Get-Content -Encoding Unicode` 读取。最终提交源码的顺序复核会话退出码为 0,并输出 `COMMITTED_SOURCE_ALL_CHECKS_PASSED`。 + +| 检查 | 最终证据 | 实际结果 | +|---|---|---| +| SQLite 专项 | `sqlite-commit-final.jsonl` | 42 个叶子用例、含父项 49 条通过,2 个包,0 失败、0 跳过 | +| SQLite 竞态检测 | `sqlite-race-commit-final.jsonl` | 同上,竞态检测通过 | +| 后端全量 | `backend-commit-final.jsonl` | 1355 个叶子用例、含父项 1472 条通过,28 个包,0 失败;43 项条件跳过不算实库通过 | +| 核心重复回归 | `sqlite-repeat-final.jsonl` | 26 个不同叶子用例各重复 10 次,260 次叶子通过、含父项 310 条,0 失败、0 跳过 | + +提交后前三项在 `backend/` 下执行的命令: + +```powershell +go test -json -count=1 -timeout=90s -run '^TestSQLite' ./internal/database ./internal/cli +go test -race -json -count=1 -timeout=3m -run '^TestSQLite' ./internal/database ./internal/cli +go test -json -count=1 -timeout=8m ./... +``` + +失败记录 `pool-before.jsonl`、`concurrency-review.jsonl`、`deadline-paths-review.jsonl` 分别保留连接配置、短截止时间等待超限及立即事务错误信息缺失的复现,不作为最终通过证据。此前的 `*-review.jsonl` 定向通过记录也不替代本节最终全量结果。 + +### 已知限制与任务状态 + +- `[x]` 本节逐连接配置、短截止时间等待、并发竞争、回滚及 WAL 快照的 Windows 隔离回归完成,等待完整范围复审。 +- `[~]` 没有截止时间的手动取消仍可能等待约 5 秒;较长截止时间调用中途手动取消也不能承诺立即退出当前原生忙等待。边界测试记录这一限制,不表示立即取消已修复。 +- `[ ]` 事务提交/回滚仍沿用驱动接口;不承诺任意多语句脚本整体原子性。完整业务升级恢复、真实服务重启、断电恢复和网络文件系统仍需验证。 +- `[ ]` Linux 原生运行、独立发行命令、其余数据库/平台和生产门禁继续保留;此前 Linux 测试包交叉编译不是 Linux 实机执行证据。 + +P0-05 总状态保持 `[~]`,全部 44 项范围不变;本批局部通过不提升为生产验收通过。第十四节末的“下一步”保留为上一批历史记录,当前 SQLite 进展以本节为准。 diff --git a/doc/生产部署与运维说明.md b/doc/生产部署与运维说明.md index bba5c80..f18229c 100644 --- a/doc/生产部署与运维说明.md +++ b/doc/生产部署与运维说明.md @@ -269,6 +269,10 @@ proxy_ssl_verify_depth 3; SQLite 使用 `VACUUM INTO` 创建一致性快照并执行 `PRAGMA quick_check`。清单记录相对路径、权限、大小和 SHA-256。日志和数据库审计记录默认保留 30 天;文件日志每天最多写入 5 MiB,超过后停止文件写入但保留标准输出日志。 +SQLite 文件库的每条物理连接(包括扩容和重建)均设置 WAL 与默认 5000 毫秒忙等待;不会把最大连接数强行改成 1 来绕过并发问题。带截止时间的数据库调用在剩余时间不足 5 秒时缩短本次原生等待预算,执行结束后恢复默认值;覆盖普通/预处理执行、查询、事务启动和结果读取。配置恢复失败会淘汰连接,不自动重放业务 SQL。其余 DSN 参数保留,忙等待和日志模式由产品控制。 + +重要限制:没有截止时间的手动取消仍依赖原生驱动中断,本批持锁测试在取消后约 5 秒返回;较长截止时间调用中途手动取消也不能承诺立即退出当前忙等待。事务提交/回滚沿用驱动接口,本批不承诺任意 SQL 脚本整体原子性或所有取消路径立即终止。Windows SQLite 3.49.1 已验证双连接池、三子进程竞争和活动 WAL 快照,但不代表网络文件系统、Linux 服务重启、断电恢复、完整业务数据恢复或多实例生产部署已经验收。证据及未完成项见《构建版本与数据库支持矩阵》第十五节。 + MySQL 账号和密码从加密数据库凭据引用读取,只在维护连接期间存在于内存,不写回普通配置或备份清单。恢复前固定当前可用账号用于快照、导入和失败回滚;数据库服务端账号本身的密码轮换仍需单独管理,恢复旧配置不能自动恢复数据库账户密码。 MySQL 完整备份先检查有效库级或全局 `SELECT`,不能用零散表级权限或过滤后的空清单证明对象完整。视图还要求有效 `SHOW VIEW`;失效视图或定义不可见时拒绝备份并保留原文件。视图按本库依赖排序,保留定义者、创建字符集和检查选项,不创建占位基础表,也不删除与视图同名的已有基础表。基础数据和例程先于视图,随后创建触发器、恢复外键检查,最后恢复事件;仍需管理员保证维护窗口内没有外部 DDL 或授权变化。