# go-sql-bak-st **Repository Path**: liubwlinux/go-sql-bak-st ## Basic Information - **Project Name**: go-sql-bak-st - **Description**: go-sql-bak - **Primary Language**: Unknown - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-02-08 - **Last Updated**: 2026-04-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # go-sql-bak-st 一个正在从单宿主进程逐步拆分为功能二进制的数据库运维工具,当前包含五条能力链路: - 逻辑全量备份:`db-backup` 单次执行器 + `db-backup-scheduler` 常驻调度服务,基于 Go 驱动直出 SQL,不依赖 `mysqldump` - 数据库导入:`db-import` 独立导入服务,或通过 `backup` 兼容宿主在 Web 管理台执行导入、取消、删除、清理 - 实时备份:`ob-realtime serve` 负责 OceanBase 社区版 MySQL 模式的基线快照 + 增量采集 - 时点恢复:`ob-realtime preflight / recover` 负责预检查、演练和回放;`recover` CLI 继续保留为兼容入口 - 数据库迁移:通过 `backup` 兼容宿主内置 `db-migrate v1` 任务化迁移,当前不单独发布 `cmd/db-migrate` ## 当前能力 - Go 驱动直出 SQL,核心策略为 `SHOW CREATE TABLE` + `SELECT *` - 支持 MySQL、OceanBase、PostgreSQL、OpenGauss、SQL Server、Oracle、达梦等驱动 - Cron 调度、运行态跟踪、压缩存储、保留清理 - Web 管理台:仪表盘、任务、备份、导入、迁移任务、上传资产、配置、日志 - 配置工作台支持在同一条任务下选择多个数据库一起备份,并支持表级精确备份(`scopes` 配置) - 导入模块支持 MySQL / OceanBase(MySQL 模式) 目标库 - 迁移模块支持 MySQL / OceanBase(MySQL 模式) 同构多库批量迁移,默认严格模式 - OceanBase 实时链路支持基线快照、checkpoint、segment、恢复预检查 - 下载接口限制在备份根目录内,避免路径穿越 ## 快速开始 1. 构建服务与恢复工具 ```bash go build -o db-backup ./cmd/db-backup go build -o db-backup-scheduler ./cmd/db-backup-scheduler go build -o db-import ./cmd/db-import go build -o ob-realtime ./cmd/ob-realtime go build -o backup ./cmd/backup go build -o recover ./cmd/recover go build -o export-table ./cmd/export-table ``` 2. 生成示例配置 ```bash go run ./cmd/tools/gen-config-example -out config.json ``` 3. 按需修改 `config.json` - 只使用占位符账号密码,不要把真实凭据写入仓库 - 常规备份至少要配置一个 `tasks[]` - 使用实时备份时,在对应任务下补充 `realtime` 4. 启动兼容宿主 ```bash ./backup -config ./config.json -config-dir ./configs ``` 默认 Web 地址:`http://127.0.0.1:5173` ## 命令入口 `db-backup` 单次备份执行器: ```bash ./db-backup -config ./config.json -task nightly-backup ``` - 只执行指定任务一次,然后退出 - 不启动 Cron、Web、导入或实时恢复子系统 `db-backup-scheduler` 常驻调度服务: ```bash ./db-backup-scheduler -config ./config.json -config-dir ./configs -run-on-startup=true ``` `backup` 兼容入口: ```bash ./backup -config ./config.json -config-dir ./configs -run-on-startup=true ``` - 新部署优先使用 `db-backup-scheduler` - `backup` 继续保留 Web、导入、迁移任务与实时恢复等宿主能力,主要用于兼容旧部署 - `db-migrate v1` 当前挂载在该兼容宿主内,不单独发布迁移二进制 `db-import` 独立导入服务: ```bash ./db-import -config ./config.json -listen 127.0.0.1:5174 -data-dir ./imports ``` - 只启动导入相关 HTTP 页面与 API - 不依赖备份调度器、备份历史页或实时恢复链路 - 配置热更新只刷新导入目录、上传大小限制和并行度;监听地址保持启动值 `ob-realtime` 统一实时备份与恢复入口: ```bash ./ob-realtime serve -config ./config.json -config-dir ./configs ./ob-realtime preflight -config ./config.json -task ob-prod -to "2026-03-16T20:30:00+08:00" -report-json ./release/recover-report.json ./ob-realtime recover -config ./config.json -task ob-prod -to "2026-03-16T20:30:00+08:00" -target-dsn ":@tcp(127.0.0.1:3306)/" ``` - `serve` 只负责实时采集与基线轮换,不启动 Web、导入或 Cron 备份调度 - `preflight` 只做恢复计划与段校验,适合演练和留档 - `recover` 在通过 preflight 后执行基线恢复与增量回放 `recover` 兼容 CLI: ```bash ./recover -config ./config.json -task ob-prod -to "2026-03-16T20:30:00+08:00" -dry-run ./recover -config ./config.json -task ob-prod -to "2026-03-16T20:30:00+08:00" -target-dsn ":@tcp(127.0.0.1:3306)/" ``` - 内部已委托到 `internal/apps/obrealtime` - 旧部署可继续使用,新部署优先切到 `ob-realtime` `export-table` CLI: ```bash go build -o export-table ./cmd/export-table ./export-table ``` - 仅支持 MySQL - 纯命令行交互输入实例地址、账号和密码 - 交互选择一个数据库和一张表 - 导出到当前目录,文件名自动生成为 `库名_表名_时间.sql` ## 运行目录 以下目录属于运行产物,启动后会自动生成,不应作为源码维护: - `backups/`:备份文件、manifest、实时基线和 segment - `imports/`:导入上传文件、任务状态持久化 - `migrations/`:迁移任务状态持久化 - `logs/`:服务日志 - `tmp/`:临时验证或本地调试目录 - `release/`:构建产物目录,由构建脚本生成 ## 项目结构 - `cmd/db-backup`:单次逻辑全量备份执行器 - `cmd/db-backup-scheduler`:常驻定时备份服务 - `cmd/db-import`:独立导入 HTTP 服务 - `cmd/ob-realtime`:OceanBase 实时备份 + 恢复统一入口 - `cmd/backup`:兼容入口,保留 Web、导入、迁移任务和实时恢复宿主 - `cmd/export-table`:MySQL 单表交互导出 CLI - `cmd/recover`:时点恢复兼容 CLI - `cmd/tools`:配置示例和静态资源辅助工具 - `e2e`:集成 smoke test - `internal/apps/backuprun`:单次逻辑全量备份应用层封装 - `internal/apps/backupscheduler`:定时备份应用层封装 - `internal/apps/importapp`:导入 HTTP 服务应用层封装 - `internal/apps/obrealtime`:实时备份 / preflight / 恢复应用层封装 - `internal/backup`:全量备份引擎 - `internal/database`:各数据库驱动的 SQL 直出逻辑 - `internal/importer`:上传、解析、导入任务和资产管理 - `internal/migrate`:迁移预检查、任务服务、执行器与目标端 SQL 应用 - `internal/realtime`:实时基线、增量采集、checkpoint、segment - `internal/recovery`:恢复计划、预检查、增量回放 - `internal/config`:配置加载、验证、持久化、热更新 - `internal/web`:管理台页面与 API - `internal/storage`:备份清理、manifest 和下载约束 ## 文档入口 - `TECH_DESIGN.md`:当前实现的技术细节,优先阅读 - `OPS.md`:部署、运维、恢复与排障手册 - `release/docs/RELEASE.md`:发布包目录与运行方式 - `PRD.md`:最初需求基线,已不覆盖后续导入/实时恢复扩展 - `UI_UX_EXT.md`:管理台 UI/UX 约束 ## 开发校验 ```bash go test ./... go build ./cmd/db-backup ./cmd/db-backup-scheduler ./cmd/db-import ./cmd/ob-realtime ./cmd/backup ./cmd/recover ./cmd/export-table ``` 需要真实 MySQL 冒烟验证时,可设置占位环境变量后执行: ```bash E2E_MYSQL_DSN_ROOT=":@tcp(127.0.0.1:3306)/?charset=utf8mb4&parseTime=true" go test -tags integration ./e2e -run TestMySQLBackupImportSmoke -v ``` 也可以直接使用脚本: - `scripts/e2e-smoke.ps1` - `scripts/e2e-smoke.sh`