如何在多台MAC电脑同步Chatwise数据库

AI 摘要: 本文介绍了作者在多台Mac电脑上使用Chatwise Chatbox进行跨设备同步的方案。由于Chatwise目前不支持云同步,作者通过分析其SQLite数据库存储结构,利用备份与恢复技术实现数据同步。作者详述了SQLite数据库文件的结构、手动备份恢复流程,以及利用脚本自动化同步的优势。该方案有效缓解了多台设备间的数据不同步问题,体现了在缺乏官方云同步支持情况下的实用解决思路,为类似软件用户提供了宝贵经验。

1. 背景

Chatwise 是我 25 年入手的一款 AI Chatbox 软件,Chatwise 支持使用主流的不同的 Provider 模型配置,同时支持 MCP、Search、思考开关特性,产品整体体验起来也很符合技术习惯,软件作者更新的也非常勤,整体下来使用起来比较 Nice。

因为比较高频的使用 Chatwise,之前有写过一篇 Mac 下快捷键文章: Hammerspoon - Mac 下非常好用的快捷键配置工具

chatwise截图

2. 跨设备同步问题

因为我有多台 Mac 电脑(公司/家庭),通常情况我会主要使用工作的电脑进行工作和学习,但偶尔也会使用家庭里面的 Mac 电脑进行一些资料查阅;

2.1. 如果需要跨设备使用,云同步通常会成为选购的依据之一

在 Mac 软件的选择上,我一般会倾向于使用支持多台机器可以无缝同步的(云同步),这里也 share 下我购买的一些软件:

我使用的一些Mac软件

2.2. Chatwise 的同步问题

Chatwise 是一款客户端软件,目前暂不支持云同步,仅支持手动导出+导入功能。

比如我在 Work 的 Mac 机器上 Chatwise 新增了一些配置或者 Prompt 角色,我需要按这套流程进行数据同步:Work Chatwise <-> iCloud <-> Home Chatwise,我之前不得不选择使用 Chatwise 的手动同步脚本;

3. 解决办法

在动手之前,相关几个同步方式都有利弊:

  1. 方案 1: 使用 iCloud 当成中心存储,有点类似 NFS 或分布式 FS -> 问题会有锁冲突的问题,比如多个 Chatise 不同使用都写了 WAL 文件,这时候就可能出现写冲突问题
  2. 方案 2: 使用脚本执行导出+导入的流程,仍然借助 iCloud 作为数据同步的介质;

3.1. SQlite 简介

我尝试简单 CR 了下 Chatwise 的 Library 文件内容,发现 Chatwise 使用的 SQlite 数据库存储的

因为自己之前也在写一些客户端软件,对 SQlite 嵌入式的数据库有一些了解,简言之 SQlite 是一款适合嵌入式的支持 RDBMS 的关系型数据库,非常适合客户端这种小中型数据库存储。

SQlite 会有 3 个主要的文件:

  1. app.db: 数据库核心存储文件,存储了核心数据、表结构、索引等
  2. app.db.wal: Write-Ahead-Log 增量日志文件,SQLite 为了高性能读写以及崩溃恢复,SQLite 会写会先写日志,当 WAL 文件容量满足特点条件就会 Sync 到 app.db 中
  3. app.db-shm: Share-Memory,协调多线程/进程在访问数据库的一些共享内存部分(比如索引)

3.2. 使用 DataGrip 查看 Sqlite 数据库内容

因为 SQlite 是嵌入式数据库,默认无需多用户鉴权,所以无需密码鉴权认证就可以访问:

Chatwise数据库内容

3.3. 测试了手动备份 SQLite DB

  1. 尝试手动修改数据,备份了 DB
  2. 恢复 DB,打开 Chatwise 查看数据,发现整体都符合预期

所以到这里就变成了 DB 离线备份+恢复的问题了。

所以想到了一个解决办法,即编写一个简单的同步脚本,实现快速实现 Work Chatwise <-> iCloud <-> Home Chatwise 这个流程:

1
2
3
4
5
// 将chatwise文件备份到iCloud默认目录
backup_chatwaise_sqlitedb.py backup

// 从iCloud默认目录选择最新的文件恢复到chatwise到app.db文件
backup_chatwaise_sqlitedb.py restore

4. 使用 Claude Code 编写下 Python 同步脚本

下载地址

  • 备份 python 文件下载: 备份 Chatwise 的 SQlite 脚本

  • 前提条件:你的两台 Mac 电脑都开启了 iCloud 同步,注意修改下 DEFAULT_BACKUP_DIR iCloud 存储位置

1
2
3
4
# 默认配置
DEFAULT_DB_PATH = os.path.expanduser("~/Library/Application Support/app.chatwise/app.db")
DEFAULT_BACKUP_DIR = os.path.expanduser("~/Library/Mobile Documents/com~apple~CloudDocs/SoftwareData/chatwise")
MAX_BACKUPS = 10  # 最多保留的备份文件数量

4.1. 备份&恢复的 Python 脚本工具

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
usage: backup_chatwise_sqlitedb.py [-h] {backup,restore} ...

SQLite数据库备份恢复工具

positional arguments:
  {backup,restore}  可用命令
    backup          备份SQLite数据库
    restore         恢复SQLite数据库

options:
  -h, --help        show this help message and exit

示例:
  # 使用默认配置备份ChatWise数据库到/tmp目录
  backup_chatwise_sqlitedb.py backup

  # 备份数据库到指定文件
  backup_chatwise_sqlitedb.py backup --source /path/to/app.db --dest /path/to/backup.db

  # 备份数据库到目录(自动添加时间戳)
  backup_chatwise_sqlitedb.py backup --source /path/to/app.db --dest /path/to/backup_dir/

  # 强制覆盖备份
  backup_chatwise_sqlitedb.py backup --source /path/to/app.db --dest /path/to/backup.db -f

  # 使用默认配置恢复(从最新备份恢复到默认路径)
  backup_chatwise_sqlitedb.py restore

  # 恢复数据库到指定目录
  backup_chatwise_sqlitedb.py restore --source /path/to/backup.db --dest /path/to/restore_dir/

  # 强制覆盖恢复
  backup_chatwise_sqlitedb.py restore --source /path/to/backup.db --dest /path/to/restore_dir/ -f

默认配置:
  源数据库: ~/Library/Application Support/app.chatwise/app.db
  备份目录: ~/Library/Mobile Documents/com~apple~CloudDocs/SoftwareData/chatwise
  最大备份数: 10

4.2. 简要测试

1
2
3
4
5
6
$ backup_chatwise_sqlitedb.py backup -f
备份成功: /Users/lupingguo/Library/Application Support/app.chatwise/app.db -> /Users/lupingguo/Library/Mobile Documents/com~apple~CloudDocs/SoftwareData/chatwise/app_backup_20260117.db

$ backup_chatwise_sqlitedb.py restore -f
使用最新备份: /Users/lupingguo/Library/Mobile Documents/com~apple~CloudDocs/SoftwareData/chatwise/app_backup_20260117.db
恢复成功: /Users/lupingguo/Library/Mobile Documents/com~apple~CloudDocs/SoftwareData/chatwise/app_backup_20260117.db -> /Users/lupingguo/Library/Application Support/app.chatwise/app.db

4.3. 剩余的数据导出导入的时许问题

默认情况,如果按 Work Chatwise backup-> iCloud ->restore Home ChatwiseWork Chatwise restore <- iCloud <-backup Home Chatwise 进行数据同步一般不会有问题。

不过细心的用户可能发现,实际仍然会可能出现两台机器数据可能同时有数据更新,比如 Work 和 Home Mac 都有写 iCloud 的问题:

  1. Work Mac 写 iCloud -> app.db
  2. Home Mac 写 iCloud -> app.db'

这个时候,我一般是根据备份的日期时间、数据情况来决策是否使用备份数据覆盖掉本地的 Chatwise 数据。

5. 小结

总之,这套同步方式一定程度缓解了我在多台 Mac 机器上使用 Chatwise 数据同步的问题,如果你有类似问题,希望对你也有帮助!