如何将NextCloud用户数据迁移给另一用户?
- By : Will
- Category : Cloud storage
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';
没有评论