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