docs: 记录服务器接管与 Kingbase 原生一致性备份
This commit is contained in:
1 parent
b94ac7f05a
commit
ba5dc7a6af
3 files changed
+125
-18
No files matched your search
@@ -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/部署。
|
||||
@@ -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),
|
||||
|
||||
Reference in new issue
Block a user