1. 概述

该工具 提供 如下功能:

  • 删除用户表用户数据。
  • 删除用户关联关系( IDMapping )数据。


用户数据删除是不可逆操作,请严格审查执行参数,并谨慎执行。


2. 用户数据删除

2.1. 操作指令


horizonadmin profile_delete_op execute
BASH


2.2. 参数列表

#参数名必传(Y/N)取值举例含义注意
1-pY"default"项目英文名称用户数据删除的对应 项目的英文名。
2-fY~/user_id_list.txt需要删除的 id 列表文件各 id 使用换行符分隔,批量进行删除时使用。
3-mNall / identity / record

删除模式

all – 用户关联数据以及用户表数据均删除

identity – 仅用户关联数据

record – 仅用户表中数据

默认为all


2.3. 输出示例

正常情况下会打印执行日志,没有异常信息抛出。若发生异常时会将错误打印在控制台。


日志目录: $SENSORS_DATA_HORIZON_HOME/logs/admintools

日志文件: $SENSORS_DATA_HORIZON_HOME/logs/admintools/profile_delete_tool.log


2.4. 指令样例

# 删除 default 项目 导出为 user_id_list.txt 文件的 用户数据+ 关联关系
horizonadmin profile_delete_op execute -p default -f ~/user_id_list.txt 
 
# 删除 default 项目 导出为 user_id_list.txt 文件的 用户关联关系,不删除用户数据
horizonadmin profile_delete_op execute -p default -f ~/user_id_list.txt  -m identity

# 删除 default 项目 导出为 user_id_list.txt 文件的 用户数据,不删除关联关系
horizonadmin profile_delete_op execute -p default -f ~/user_id_list.txt  -m record
BASH


3. 注意事项

3.1. 仅支持使用用户 id 进行删除

  • 仅支持使用用户 id 进行删除,不支持使用用户的其他属性(如 $identity_login_id) 。


3.2. 文件形式指定待删除列表

仅支持传递文件的形式删除用户id 列表,请先导出需要删除的用户id列表到文件中。

用户id在文件中,通过换行符进行分隔,下面是一个文件内容的例子。

[dev (v.v) sa_cluster@hybrid01 ~]$ cat user_ids.txt
-7728141872922209600
-7660638567722139504
-7352492845935040512
-7106740156496285907
-5786169409694690518
-5742451790944212950
-5737899435956369341
-5670215097386421597
-4955909436253670063
-4902763608074261158
CODE


3.3. 执行模式

该工具提供三种删除模式,通过 -m 参数指定:

  • 删除用户关联用户信息(users 表中的用户记录)。
  • 仅删除用户关联信息。
  • 仅删除用户信息(users 表中的用户记录)。

默认行为是删除用户关联用户信息(users 表中的用户记录)。


3.4. 执行幂等

该命令执行是幂等的,即对同一个待删除的 用户id 列表,执行多次,输出日志都会一致,具体原理:

  • 1500条用户id,第一次执行命令删除了1000条。
  • 第二次继续执行时,仍然会去尝试删除前1000条,发现已被删除会进行跳过,继续删除后面500条。
  • 第三次执行,因为1500条都已执行完成,程序也会返回删除成功1500条,但实际上都进行跳过了。



4. 最佳实践


4.1. 切换到 sa_cluster 用户

su - sa_cluster
CODE


4.2. 开启一个 screen 窗口

开启 screen 窗口可以避免因为与远程服务器断开连接、突然没有网络等情况,导致操作失败。

screen -S profile_delete
CODE


4.3. 统计用户表数据量

先查询用户表当前用户数量,注意下面的项目表需要进行修改。

select count(*) from horizon_default_1.users
BASH


4.4. 导出需要删除的用户 id 列表

明确需要删除的 id,可通过一定的条件查询用户表获取到这个 id 然后导入到指定文件, 如:user_id_list.txt。

select id from horizon_default_1.users where xxx in (xxx) limit 100000
BASH


4.5. 执行命令删除

指定上一步导出的 id 列表的文件名,执行命令进行删除。注意根据需求选择 -m 指定具体删除内容,包括用户表数据和用户关联数据。

horizonadmin profile_delete_op execute -p default -e user -f user_id_list.txt
BASH

注意

执行命令后,执行删除操作逻辑在当前进程内允许,请注意不要中断该进程。

该命令是幂等的,如遇执行失败可重新执行。


执行完毕查询用户表总行数:

select count(*) horizon_default_1.users
BASH

通过以上步骤就可以成功删除指定的用户id 数据。