docs: 记录服务器接管与 Kingbase 原生一致性备份

This commit is contained in:
wangzhibiao committed 2026-10-14 16:16:53 +08:00
1 parent b94ac7f05a
commit ba5dc7a6af
3 files changed
+125 -18

No files matched your search

+98
View File
@@ -0,0 +1,98 @@
# Round 5V-3 — SSH接管、原生备份完成,独立恢复仍待解阻
日期:2026-10-14;工作分支 `fix/iot-safety-hardening`;开始提交
`b94ac7f05aef80e092fddcf3d6ff3ac0a1a890b3`。本轮没有重新运行H2或源码安全审计。
凭据仅用于SSH认证输入,未写入工程、命令行参数、报告或凭据文件。
## 1. 实际服务器和共机边界
- 实际登录 `root@192.168.139.218:22`,hostname为`localhost.localdomain`,
NFSChina Server4.0,Linux4.19.113-72.nfs4.x86_64,UID0。
- 4321由docker-proxy映射至现有`kingbase`容器54321。
镜像`kingbase_v009r003c018b0003_single_x86:v1`,现有容器用户kingbase。
- 同机GitLab、MySQL、MongoDB及其他应用持续运行。Kingbase和GitLab的启动时间
均保持2026-10-06,未重启、改配置、改端口、改防火墙或安装软件。
- 根分区约余535–536GiB;可用内存约372000MiB;备份前load约0.56/0.66/0.71。
原生备份单进程、低压缩等级1,无并发dump,无新容器或数据库。
## 2. Kingbase及权限实际核验
- 工具目录:容器`/home/kingbase/install/kingbase/bin/`。
`sys_dump --version`、`sys_restore --version`、`ksql --version`均为V009R003C018。
- 数据目录:容器`/home/kingbase/userdata/data`;宿主机bind源
`/opt/kingbase-docker/data`,配置文件为数据目录内kingbase.conf。
- 使用现有OS用户kingbase的容器本地连接,实际数据库角色kingbase、rolsuper=true。
没有新建管理账号或给fusion_qa_app授予额外权限;没有复用SSH口令猜测数据库口令。
- 数据库显式限定`railwaysystem_fusion_qa_20261013`,数据库大小23005379字节。
App账号只读核验也成功:public54表、iotlocks9表;学员47、参训57、住宿34、
授权10、命令15。5S执行元数据仍缺失,005没有执行。
- 宿主机root和容器kingbase用户crontab未发现sys_dump/sys_rman相关条目;
这不等于已排除外部备份平台或其他调度策略,不能宣称原先存在可靠恢复保障。
## 3. 已完成的原生一致性备份(不是恢复演练)
主备份:
- 服务器目录:`/opt/railway-fusion-qa-backup-20261014.YLjmJ0/`
- 本机独立副本:`/Users/wzb/railway-fusion-qa-backup-20261014.6cgPn7/`
- 主文件:`fusion-qa-pre005-v2.dump`,380907字节。
- SHA256:`caa62bc985bd433b5d428b36e34d684b557c82576b69e5e5d9d348edfdf316b4`。
- 两端目录0700、备份及清单文件0600,均在Git工作树外。备份含敏感业务数据,
不提交、不打印、不上传公共服务;保留原始备份和清单,不自动清理。
实际过程:
1. 在目标QA库开启`REPEATABLE READ READ ONLY`事务,设置会话局部5分钟空闲事务、
30秒语句及5秒锁超时,导出快照;事务在备份及清单完成前保持有效。
2. 匹配版本sys_dump使用custom格式、压缩等级1、5秒锁等待和**同一个导出快照**,
显式`-d railwaysystem_fusion_qa_20261013`。未使用--create/--clean,未导出其他库。
3. 原生sys_restore读取TOC,并用`--exit-on-error --file=/dev/null`完整解码归档。
两步exit0;dump、TOC读取、完整读取的stderr均0字节。
4. 清单来自相同快照:63张表均有唯一schema-qualified名称及行数,归档含63个TABLE
和63个TABLE DATA对象。授权/命令的整表排序指纹与备份前、备份后保持一致。
5. 同步到本机独立副本后SHA256一致。源只读快照事务均显式ROLLBACK并退出,
最终没有本任务遗留的idle-in-transaction连接。
辅助证据文件:`archive-toc-v2.list`、`source-table-counts-v2.tsv`;服务器另保留
`dump-v2.stderr`、`toc-v2.stderr`、`archive-read-v2.stderr`(均空)。
首次草稿的清单使用`||`拼接,在当前SQL兼容模式下生成了错误的布尔标签;已经
改用concat,并重新做整套同快照备份/清单。主证据明确采用v2,初稿保留但不用于
表名对账。这个普通SQL兼容问题未通过提权或修改数据库模式解决。
**归档读取通过仅证明文件可读取,不是把数据真正恢复到独立Kingbase的证明。**
## 4. 当前独立恢复门禁
- 运行中及停止容器清单只发现一个Kingbase V9容器,即正在承载共享业务的实例。
同实例的旧QA/备份数据库不是独立恢复实例,未连接它们执行业务查询或恢复。
- 宿主机存在`/opt/Kingbase/ES/V8/data`旧目录;未确认其为可用、获准且兼容的
V9恢复环境,因此没有启动它、覆盖它或把它当作恢复证明。
- 本机Docker守护进程不可用;已有SSH别名wzbmatebook的主机MateBook14上,
PATH未找到Kingbase/Docker工具,未报告Kingbase/Postgres进程或所检查安装根。
没有尝试在该主机安装软件或初始化实例。
- 没有取得其他已存在且获准写入的独立V9恢复目标及其受保护连接配置。
ISOLATED_RESTORE_VERIFIED=BLOCKED,所以005迁移、DDL失败回滚演练、实际Kingbase
业务事务、新Spring Boot启动及完整Chrome E2E全部保持BLOCKED。
## 5. 最小解阻方案(需用户选择/批准,不自动执行)
优先方案:提供**已有且获准操作**的独立V009R003C018恢复实例、预建空恢复库及
受保护连接配置。先确认不属于共享源实例、没有业务对象及活动业务写入,再恢复
本备份并对照63表结构/计数和授权命令指纹,检查完整恢复日志。不要在聊天中发口令。
如无现成环境,可单独批准以下新增操作:在当前服务器使用已有同版本授权镜像,
创建一个仅用于恢复演练的独立容器/实例和专用恢复数据库。建议资源上限2CPU、
2GiB内存,至少5GiB独立存储;不发布宿主机端口,network none,仅docker exec
访问。数据卷绝不复用`/opt/kingbase-docker/data`。先核实许可允许该验证实例,
认证信息用受保护方式注入。创建实例、数据库和容器均超出当前授权,**现在没有做**。
验证后保留证据和环境,删除/销毁也需明确批准,不自动清理。
获得恢复目标授权后:原生恢复使用错误即停及单事务策略,不使用--create/--clean,
不覆盖源库。恢复目标角色/ACL映射需审核,不自动创建角色或扩大权限。恢复和
DDL回滚验证都通过后,才按005已批准范围对目标QA执行16列和4索引,随后连续
完成真实Service/Mapper事务、Java21启动与Chrome软件联动,不重做整个架构。
本轮实际完成:SSH接管、原生工具/容量/身份确认、一致性备份及双端保护校验。
本轮未完成:真正独立恢复、迁移、Kingbase业务恢复测试、后端及浏览器完整验收。
真实设备写入仍false;未连接真实MQTT控制或人脸服务,未Push/Merge/部署。
+15 -11
View File
@@ -1,16 +1,20 @@
# Round 5V — isolated Kingbase migration and rollback gate
## Current Round 5V-2 decision
## Current Round 5V-3 decision
The user explicitly authorized migration 005 **only** on
`railwaysystem_fusion_qa_20261013`, together with protected backup and isolated
restore rehearsal. Scope SHA256 remains
`90648b6ac67470f9a14f0795c4479dfb4811d4907e41a13ee5eeada16582b87f`.
Authorization is no longer missing. Status: `MIGRATION_AUTHORIZED_BLOCKED_RESTORE`.
No DDL or business data writes have been performed because native backup and
actual isolated restore cannot yet be proved. Existing two-table XML snapshots
are not an acceptable substitute. Do not create a database or elevate privileges
to overcome this gate. See [current evidence](ROUND5V2_ACCEPTANCE.md).
Authorization is no longer missing. Status:
`MIGRATION_AUTHORIZED_BLOCKED_ISOLATED_RESTORE`.
SSH access, matching native tools, existing management-role access and consistent
native backup are now verified. Actual independent database restore is still
unverified. No DDL or business DML has been performed. Do not create a database,
initialize an instance, start a new container or elevate privileges to overcome
this gate without separate authorization. See [current evidence and minimal
resource proposal](ROUND5V3_SERVER_BACKUP.md). The previous Round5V2 report remains
historical evidence, not the current infrastructure status.
## Scope and observed prestate
@@ -57,13 +61,13 @@ the global/database/user search path or accidentally query system `sys_user` vie
transaction, private WebRowSet XML and SHA256 manifest under `.qa-runtime/`.
These contain credentials/personal data from rows: never commit, print or upload.
This is an affected-table snapshot, **not a native full-database backup**.
4. Before executing DDL, the administrator must also produce an authorized native
Kingbase full QA backup (schema/data/sequences/ACLs) using the matching licensed
vendor tools and validate it in an approved isolated restore destination. No
native backup utility or restore destination is assumed or provisioned here.
4. Before executing DDL, produce an authorized native Kingbase full QA backup
(schema/data/sequences/ACLs) using matching licensed vendor tools and validate
it in an approved isolated restore destination. Round5V3 completed the native
backup; the restore destination is still neither confirmed nor provisioned.
Do not use a mismatched PostgreSQL client or restore into any shared database.
## Execution and failure rollback (authorized, blocked on backup/restore)
## Execution and failure rollback (authorized, blocked on isolated restore)
With an approved migration account, enforce `current_database()` equals the exact
target before any change. Begin a transaction, set a local lock timeout (5s),