- connections: params (JSON) merged into connection URL query string, applied to both sling env.yaml and atlas URLs; user's foreign_key_checks overrides the default =0 - pipelines: env map written to replication yaml top-level env: - UI: key=value textarea in connection dialog and pipeline form (new/edit) - docs: TiDB Error 8048 (SERIALIZABLE) troubleshooting — set tidb_skip_isolation_level_check=1 as a connection param |
||
|---|---|---|
| app | ||
| components | ||
| docs | ||
| lib | ||
| public | ||
| .gitignore | ||
| AGENTS.md | ||
| CLAUDE.md | ||
| README.md | ||
| components.json | ||
| eslint.config.mjs | ||
| next.config.ts | ||
| package.json | ||
| pnpm-lock.yaml | ||
| postcss.config.mjs | ||
| tsconfig.json | ||
README.md
sling-ui
一个本地运行的 Web UI,把「测试环境 → 本地 dev 库」的数据同步流程自动化:
第一阶段支持 MySQL / MariaDB / TiDB。
前置依赖
- Node.js 20+ 与 pnpm
slingCLI(curl -LO 'https://github.com/slingdata-io/sling-cli/releases/latest/download/sling_darwin_arm64.tar.gz' ...,见官方文档;需要官方构建,conns discover在 OSS 自编译版不可用)atlasCLI:brew install ariga/tap/atlas
启动后应用会在顶部 banner 检测这两个二进制是否可用。
启动
pnpm install
pnpm dev # 或 pnpm build && pnpm start
使用流程
- Connections:新建源(测试环境)和目标(本地 dev)连接,点「测试连接」确认可用。
- Pipelines → 新建流水线:选源/目标连接、mode、是否开启 schema sync,「加载表」勾选要迁移的表。
- 流水线详情:
- 「Schema Diff 预览」查看 Atlas dry-run 生成的 DDL;
- 「运行」执行迁移:先
atlas schema apply(同步表结构,含索引/约束),再sling run(灌数据),日志实时流式展示。
- Runs:全部运行历史与日志回放。
mode 说明
schema_sync开启时,Atlas 负责目标端表结构;此时即使选择full-refresh,实际执行会翻译为truncate(保留 Atlas 建的表结构重灌全量数据,避免 sling drop+重建丢掉索引/约束)。incremental需要为每张表配置primary_key和update_key。- sling 连接 URL 自动带
foreign_key_checks=0(会话级),避免外键顺序问题;约束定义本身保留。 - 连接支持自定义「连接参数」(URL query string,sling/Atlas 均生效),流水线支持自定义「环境变量」(写入 replication 的
env:)。
已知问题
- TiDB 目标库报
Error 8048: isolation level 'SERIALIZABLE' is not supported:见 docs/tidb-serializable-isolation.md,给连接加参数tidb_skip_isolation_level_check=1即可。
数据与安全说明
- 所有应用数据在项目根
data/目录(已 gitignore):SQLite(sling-ui.db)、生成的 slingenv.yaml、replication yaml、运行日志。 - 连接密码以明文存储在本地 SQLite;运行日志中的命令行已做密码脱敏,但 sling/atlas 自身的输出可能仍含连接信息。本工具定位为本地单人使用,请勿暴露到网络。
- Atlas 需要一个 dev database 做 schema 规范化:实现为在目标服务器上创建专用 scratch schema
sling_ui_atlas_dev(自动创建,保持干净),不依赖 docker。 - sling 使用应用自管的 home 目录(
data/sling-home),不会读写你的~/.sling。
技术栈
Next.js 16(App Router)+ TypeScript + Tailwind 4 + shadcn/ui + better-sqlite3;通过 shell 调用 sling / atlas 二进制,SLING_LOGGING=JSON 解析结构化日志,SSE 实时推送。
路线图
- PostgreSQL 支持(连接类型 + pg_dump/Atlas 均已抽象)
- 流水线编辑 UI、定时调度、运行并发队列