清理数据库

Session
使用以下命令清理 Seahub 数据库中过期的会话记录:
cdseafile-server-latest
./seahub.shpython-envpython3seahub/manage.pyclearsessions
提示:如果是docker部署,需要进入docker容器内的/opt/seafile/seafile-server-latest目录执行命令。
使用clean_db_records 命令清理 seahub_db
使用以下命令可以同时清理 Activity、sysadmin_extra_userloginlog、FileAudit、FileUpdate、FileHistory、PermAudit、FileTrash 表中 90 天前的记录:
./seahub.shpython-envpython3seahub/manage.pyclean_db_records
如果你愿意,也可以手动清理这些表,如下所示。
文件活动 (Activity)
使用以下命令清理活动记录:
useseahub_db;
DELETEFROMActivityWHEREto_days(now())-to_days(timestamp)>90;
DELETEFROMUserActivityWHEREto_days(now())-to_days(timestamp)>90;
登录
使用以下命令清理登录记录:
use seahub_db;
DELETE FROM sysadmin_extra_userloginlog WHERE to_days(now()) - to_days(login_date) > 90;
文件访问
使用以下命令清理文件访问记录:
useseahub_db;
DELETEFROMsysadmin_extra_userloginlogWHEREto_days(now())-to_days(login_date)>90;
文件访问
使用以下命令清理文件访问记录:
useseahub_db;
DELETEFROMFileAuditWHEREto_days(now())-to_days(timestamp)>90;
文件更新
使用以下命令清除文件更新记录:
useseahub_db;
DELETEFROMFileUpdateWHEREto_days(now())-to_days(timestamp)>90;
权限
使用以下命令清理权限更改审核记录:
useseahub_db;
DELETEFROMPermAuditWHEREto_days(now())-to_days(timestamp)>90;
文件历史
使用以下命令清理文件历史记录:
useseahub_db;
DELETEFROMFileHistoryWHEREto_days(now())-to_days(timestamp)>90;
清理过期的资料库数据
自 6.2 版本起,我们提供了清理 Seafile 数据库中过期资料库记录的命令,例如在资料库被删除后未立即删除的记录。这是因为用户可能会恢复已删除的资料库,所以在删除资料库时不能立即清除这些记录。
./seahub.shpython-envpython3seahub/manage.pyclear_invalid_repo_data
该命令在 10.0 版本中得到了改进,包括:
  1. 它会以小批量方式清理无效数据,避免在短时间内占用过多数据库资源。
  2. Dry-run 模式:如果你只想查看有多少无效数据可以被删除,而不实际删除任何数据,可以使用 dry-run 选项,例如:
./seahub.shpython-envpython3seahub/manage.pyclear_invalid_repo_data--dry-run=true
清理资料库同步 Token
在 Seafile 数据库中有两个与资料库同步令牌相关的表:
  • RepoUserToken 包含用于资料库同步的认证令牌。注意,每个客户端(包括同步客户端和 SeaDrive)都会生成一个单独的令牌。
  • RepoTokenPeerInfo 包含关于每个客户端令牌的更多信息,例如客户端名称、IP 地址、最后同步时间等。
当你有许多同步客户端连接到服务器时,这两个表可能会包含大量记录。其中许多记录可能已不再使用。你可以通过以下 SQL 清理在最近一段时间未使用的令牌:
deletet,ifromRepoUserTokent,RepoTokenPeerInfoiwheret.token=i.tokenandsync_time<xxxx;
xxxx 是 UNIX 时间戳,表示要删除该时间之前的令牌。
为了安全起见,你可以先检查将要删除多少令牌:
select*fromRepoUserTokent,RepoTokenPeerInfoiwheret.token=i.tokenandsync_time<xxxx;
​