seafile清理数据库

清理数据库

Seahub

Session

从 5.0 版本开始,我们提供了清除 Seahub 数据库中过期 session 记录的命令

cd <install-path>/seafile-server-latest
./seahub.sh python-env python3 seahub/manage.py clearsessions

文件活动 (Activity)

要清理文件活动表,登录到 MySQL/MariaDB,然后使用以下命令:

use seahub_db;
DELETE FROM Event WHERE to_days(now()) - to_days(timestamp) > 90;

当删除Event表中的外键时,MariaDB会自动删除UserEvent中对应的项。

7.0 版本开始,使用 Activity 表取代了 Event 表。因此,如果您使用的是 7.0.x 及其以后的版本,应该使用如下命令:

use seahub_db;
DELETE FROM Activity WHERE to_days(now()) - to_days(timestamp) > 90;

当删除 Activity 表中的外键时,MariaDB将自动删除 UserActivity 中的相应项目。

登录

要清理登录记录,请登录 MySQL/MariaDB 并使用以下命令:

use seahub_db;
DELETE FROM sysadmin_extra_userloginlog WHERE to_days(now()) - to_days(login_date) > 90;

文件访问

要清理文件访问记录,请登录 MySQL/MariaDB 并使用以下命令:

use seahub_db;
DELETE FROM FileAudit WHERE to_days(now()) - to_days(timestamp) > 90;

文件更新

要清除文件更新记录,请登录 MySQL/MariaDB 并使用以下命令:

use seahub_db;
DELETE FROM FileUpdate WHERE to_days(now()) - to_days(timestamp) > 90;

权限

要清除权限记录,请登录 MySQL/MariaDB 并使用以下命令:

use seahub_db;
DELETE FROM PermAudit WHERE to_days(now()) - to_days(timestamp) > 90;

文件历史

要清除文件历史记录,请登录 MySQL/MariaDB 并使用以下命令:

use seahub_db;
DELETE FROM FileHistory WHERE to_days(now()) - to_days(timestamp) > 90;

clean_db_records 命令

从 8.0 开始,可以使用如下命令同时清理 Activity、sysadmin_extra_userloginlog、FileAudit、FileUpdate、FileHistory、PermAudit 这 6 个表 90 天以前的记录

cd <install-path>/seafile-server-latest
./seahub.sh python-env python3 seahub/manage.py clean_db_records

过时的资料库数据

从 6.2 版本开始,我们提供了清除 Seahub 数据库中过时的资料库记录的命令。过期的记录包括资料库里的外链记录等。这是因为用户可以恢复已删除的库,因此我们无法在库删除时删除这些记录。

cd <install-path>/seafile-server-latest
./seahub.sh python-env seahub/manage.py clear_invalid_repo_data

资料库同步 Token

Seafile 数据库中有两个表与库同步 Token 相关。

  • RepoUserToken 包含用于资料库同步的身份验证 Token 。 请注意,为每个客户端(包括同步客户端和 SeaDrive)创建了一个单独的 Token。

  • RepoTokenPeerInfo 包含有关每个客户端 Token 的更多信息,例如客户端名称、IP 地址、上次同步时间等。

当您有许多同步客户端连接到服务器时,这两个表就会产生大量的数据。其中许多已不再使用。 您可以通过以下 SQL 查询清除近期未使用的 Token :

delete t,i from RepoUserToken t, RepoTokenPeerInfo i where t.token=i.token and sync_time < xxxx;

注:xxxx 是 Token 将被删除之前的 UNIX 时间戳。 为安全起见,您可以先检查将删除多少 Token :

select * from RepoUserToken t, RepoTokenPeerInfo i where t.token=i.token and sync_time < xxxx;