数据同步工作台支持数据库备份。选择“数据库备份”,依次选择源连接、数据库、表、输出目录及运行方式,然后预检、保存并启用调度。
- 备份格式为 SQL,可选结构、数据或两者。无需目标数据库连接。
- 输出目录必须是本机已存在且可写的绝对路径,可在界面中通过目录选择器指定,也可手工填写。
- 备份按
输出目录/年/月/日/分层存放,同一天的所有运行落在同一个日期目录里增量累积:每次运行创建<输出目录>/2026/09/23/backup_2026-09-23_10:30:15.sql。目录名与文件名使用本机时区。文件名的时间部分用-而不是:,因为该文件名需要跨平台存在,NTFS 不接受冒号。 - 同一秒内的两次运行会撞名并自动让位为
...-2.sql、-3.sql。文件名由本进程以独占方式创建,已有备份在任何情况下都不会被覆盖。 - 导出先写临时文件,完成后原子提交;失败或取消不会发布不完整的 SQL 文件(占位文件会被清理)。进程被强制终止时可能遗留临时文件,不能作为成功备份使用。
- 成功记录包含备份路径。已有备份不会自动清理,需自行安排磁盘空间和保留策略。定时备份尤其要注意:目录写满会让后续运行失败,且此前不会给出预警。按日期分层便于直接对旧日期目录做保留策略。
- 这是表级逻辑备份,不提供多表同一时间点快照,也不包含数据库用户、权限、存储过程或服务器配置。关键业务应根据恢复要求选择数据库原生备份方案。
- SQL 备份支持现有 SQL 导出适配的关系型数据源;不支持的源在预检时阻止运行。文件备份限桌面运行模式。
桌面端以 sync-worker --data-root <目录> 启动同一可执行文件的无界面后台模式。桌面端管理任务和查询运行记录,后台进程负责执行。关闭桌面窗口不会关闭后台进程,也不会取消已开始的持久化任务。
后台与桌面共享任务 SQLite 存储,沿用调度租约、运行认领、心跳、连接指纹及生产写入审批。后台进程使用每个数据目录独立的进程锁,避免重复启动;凭据仍从已有连接存储读取,不写入系统调度命令。
启用定时任务时注册当前用户的登录启动:Windows 使用任务计划程序,macOS 使用 LaunchAgent,Linux 使用桌面自启动项。三平台注册失败都会阻止启用并给出错误;重新打开桌面端会重新检查已有启用任务。数据目录迁移前停止后台、等待运行释放资源并移除旧登录项,迁移后在新目录恢复。应用内更新也会先停止后台并等待资源释放,再启动安装程序;若安装未能启动或需要进一步确认,会恢复任务调度。更新成功后由重新启动的客户端恢复后台。
macOS 的 LaunchAgent 使用 KeepAlive 的 SuccessfulExit=false:后台进程异常退出(崩溃、被系统回收)时会自动重启,而维护停机与数据目录迁移这类正常退出不会被重新拉起。注册时若检测到应用正运行在 Gatekeeper 的 App Translocation 临时路径下会直接报错,需要先把 GoNavi 移入「应用程序」再启用调度。
macOS 注册会额外尝试立即加载后台(launchctl bootstrap)。加载失败时 plist 已写入,条目仍会在下次登录生效,此时会返回错误提示而非静默成功;在此之前 Ensure 已拉起的后台会继续执行,但一旦该进程退出,在下一次登录前不会有后台调度。
运行条件:
- 电脑保持唤醒,当前用户保持登录,数据库和备份目录可访问。
- 锁屏、关闭 GoNavi 窗口不影响运行;睡眠、关机期间不能执行。
- 本实现为用户后台进程,不是系统服务;不保证用户注销后继续运行。重新登录时自动启动,后续执行沿用已有调度器的错过执行处理。
- 暂停或归档任务会停止其调度,并通过已有取消机制结束活动运行。
- 本地后台健康接口只监听回环地址,以随机令牌鉴权,仅提供健康检查和维护停止,没有 SQL 或任意路径执行接口。
go test ./internal/syncworker ./internal/syncjob ./shared/i18n
go test -tags gonavi_sqlite_driver ./internal/app -run 'TestBackup|TestDataSyncJob|TestDataRoot'
npm --prefix frontend test -- --run src/components/data-syncSQLite 集成用例使用临时数据库和测试内驱动工厂,验证 SQL 导出后恢复、重复运行、失败清理、取消及连接指纹漂移。后台进程用例使用临时目录和测试子进程,不注册机器的真实自启动任务。