如何将NextCloud用户数据迁移给另一用户?

Cloud storage

1 前言

一个问题,一篇文章,一出故事。
笔者发现NextCloud官方提供的如下数据迁移命令不是十分理想,

occ files:transfer-ownership '00323401-c56f11e5-a663eb63-06a7ea03' 'will@cmdschool.org'”

该命令支持将用户“00323401-c56f11e5-a663eb63-06a7ea03”的数据迁移到用户“will@cmdschool.org”目录下,于是笔者决定直接修改非结构化数据(文件)和结构化数据(MySQL数据库)实现NextCloud迁移用户的数据。

2 最佳实践

2.1 迁移前的准备

2.1.1 搜索用户

occ ldap:search will
occ user:info will@cmdschool.org

注:该操作是确认新用户的目录结构自动创建

2.1.2 获取旧用户的Quota设置

SELECT * FROM nextcloud.oc_preferences WHERE configkey = 'quota' and userid = '00323401-c56f11e5-a663eb63-06a7ea03';

2.1.3 根据旧用户的设置修改新用户的Quota

INSERT INTO nextcloud.oc_preferences (`userid`, `appid`, `configkey`, `configvalue`) VALUES('will@cmdschool.org', 'files', 'quota', 'none');

2.1.4 确认新用户Quota设置

SELECT * FROM nextcloud.oc_preferences WHERE configkey = 'quota' and userid = 'will@cmdschool.org';

2.2 手动迁移用户文件

2.2.1 迁移非结构化数据

mv /data/nextcloud-data/00323401-c56f11e5-a663eb63-06a7ea03/* /data/nextcloud-data/will@cmdschool.org/

2.2.2 获取用户的存储ID

SELECT numeric_id FROM nextcloud.oc_storages WHERE id LIKE '%00323401-c56f11e5-a663eb63-06a7ea03';
SELECT numeric_id FROM nextcloud.oc_storages WHERE id LIKE '%will%';

注:以上查询结果旧用户存储ID为“3”,新用户存储ID为“62704”

2.2.3 查询存储ID当前的文件

SELECT * FROM nextcloud.oc_filecache WHERE storage = 62704;
SELECT * FROM nextcloud.oc_filecache WHERE storage = 3;

2.2.4 清空新用户存储的元数据(谨慎操作)

DELETE FROM nextcloud.oc_filecache WHERE storage = 62704;

注:笔者假设该用户为未使用过的账号

2.2.5 将旧用户的元数据更新为新用户的元数据

UPDATE nextcloud.oc_filecache SET storage = 62704 WHERE storage = 3 and path != "";

然后,你可以使用如下命令确认更新,

SELECT * FROM nextcloud.oc_filecache WHERE storage = 62704;
SELECT * FROM nextcloud.oc_filecache WHERE storage = 3;

2.3 手动更新用户分享

2.3.1 查找老用户相关的分享

查询老用户的分享,

SELECT * FROM  nextcloud.oc_share WHERE uid_owner = '00323401-c56f11e5-a663eb63-06a7ea03';

查询初始分享为老用户的分享,

SELECT * FROM  nextcloud.oc_share WHERE uid_initiator = '00323401-c56f11e5-a663eb63-06a7ea03';

查询分享给老用户的分享,

SELECT * FROM  nextcloud.oc_share WHERE share_with = '00323401-c56f11e5-a663eb63-06a7ea03';

2.3.2 与老用户相关分享更改为新用户

修改老用户的分享,将分享人修改为新用户,

UPDATE nextcloud.oc_share SET uid_owner = "will@cmdschool.org" WHERE uid_owner= '00323401-c56f11e5-a663eb63-06a7ea03';

修改初始分享为老用户的分享,将初始分享人修改为新用户,

UPDATE nextcloud.oc_share SET uid_initiator = "will@cmdschool.org" WHERE uid_initiator= '00323401-c56f11e5-a663eb63-06a7ea03';

修改分享给老用户的分享,将接受分享人修改为新用户,

UPDATE nextcloud.oc_share SET share_with = "will@cmdschool.org" WHERE share_with = '00323401-c56f11e5-a663eb63-06a7ea03';

然后,你可以使用如下命令确认分享变更,确认老用户分享修改给新用户,

SELECT * FROM  nextcloud.oc_share WHERE uid_owner = 'will@cmdschool.org';

确认初始分享为老用户修改给新用户,

SELECT * FROM  nextcloud.oc_share WHERE uid_initiator = 'will@cmdschool.org';

确认分享给老用户的分享修改给新用户,

SELECT * FROM  nextcloud.oc_share WHERE share_with = 'will@cmdschool.org';
没有评论

发表回复

Cloud storage
如何输出NextCloud函数参数到日志?

1 前言 一个问题,一篇文章,一出故事。 笔者最近需要调试NextCloud的代码,因为需要监视参数 …

Cloud storage
如何使用Token认证API登录NextCloud?

1 前言 一个问题,一篇文章,一出故事。 笔者最近因为更换域名迁移用户而引发NextCloud客户端 …

Cloud storage
如何用命令别名缩写NextCloud的OCC命令?

1 前言 一个问题,一篇文章,一出故事。 NextCloud的occ命令是NextCloud提供的非 …