docs: record Go 1.27.1 recovery rehearsals

This commit is contained in:
2026-09-20 16:16:52 +08:00
parent bf6f904346
commit 9c46022a32
5 changed files with 21 additions and 13 deletions

View File

@@ -1,14 +1,21 @@
# P6:隔离备份恢复演练
验证日期:2026-09-19。新增 `scripts/test-backup-restore.sh`,在两个一次性 MySQL 容器之间执行逻辑备份和恢复,恢复后用只读结构核验和核心记录计数确认结果。演练不连接已有数据库,也不修改生产数据。
验证日期:2026-09-20。新增 `scripts/test-backup-restore.sh`,在两个一次性 MySQL 容器之间执行逻辑备份和恢复,恢复后用只读结构核验和核心记录计数确认结果。演练不连接已有数据库,也不修改生产数据。
## 实际命令与环境
本轮使用 Docker `golang:1.27.1` 交叉构建 macOS arm64 的当前 Orbit 二进制,再在宿主机执行脚本:
```sh
DOCKER=/usr/local/bin/docker ORBIT_TEST_MYSQL_IMAGE=mysql:8.4 \
sh scripts/test-backup-restore.sh
docker run --rm -e GOOS=darwin -e GOARCH=arm64 -e CGO_ENABLED=0 -e GOWORK=off \
-v "$PWD:/workspace" -v /tmp/orbit-go127-darwin:/out \
golang:1.27.1 sh -c 'cd /workspace && go build -o /out/orbit ./cmd/orbit && go build -o /out/orbit-migrate ./cmd/orbit-migrate && go build -o /out/orbit-admin ./cmd/orbit-admin'
ORBIT_BIN=/tmp/orbit-go127-darwin/orbit ORBIT_MIGRATE_BIN=/tmp/orbit-go127-darwin/orbit-migrate ORBIT_ADMIN_BIN=/tmp/orbit-go127-darwin/orbit-admin \
ORBIT_TEST_MYSQL_IMAGE=mysql:8.4 sh scripts/test-backup-restore.sh
```
实际运行的构建使用 Go 1.27.1 的共享缓存目录,输出为当前提交对应的 Darwin arm64 二进制;脚本自身仍只创建一次性容器和临时文件。
源库和恢复库分别使用随机 root 密码、随机映射端口和独立数据库名。源库运行当前 `bin/orbit-migrate`,再通过 `bin/orbit-admin bootstrap` 写入一个通用应用、命名空间、凭据和队列;`mysqldump --single-transaction --routines --triggers --events --hex-blob --no-tablespaces` 导出后,通过容器内 MySQL 客户端导入恢复库。退出清理两个容器和临时凭据文件。
## 实际结果
@@ -21,4 +28,4 @@ DOCKER=/usr/local/bin/docker ORBIT_TEST_MYSQL_IMAGE=mysql:8.4 \
## 验收边界
本次证明同版本 MySQL 的一次逻辑备份可以恢复为可被当前二进制读取的数据库,并保持无外键结构。它没有证明备份介质持久性、备份窗口内的大库锁/IO影响、跨版本升级恢复、复制切换、跨故障域部署、生产密钥托管、外部业务副作用核对或 RPO/RTO;这些仍需目标生产拓扑中的独立演练。恢复库也没有被接入 Worker 或业务流量,避免把恢复演练误当成恢复后的生产接管证明。
本次证明 Go 1.27.1 构建的当前二进制可以读取同版本 MySQL 的逻辑恢复库,并保持无外键结构。它没有证明备份介质持久性、备份窗口内的大库锁/IO影响、跨版本升级恢复、复制切换、跨故障域部署、生产密钥托管、外部业务副作用核对或 RPO/RTO;这些仍需目标生产拓扑中的独立演练。恢复库也没有被接入 Worker 或业务流量,避免把恢复演练误当成恢复后的生产接管证明。