用户申请注销,用户表里那条记录没了,客服系统里按邮箱还能搜到三千多条聊天记录,连手机号都还在。乍看像缓存或者权限的锅,追下去往往不是。
DELETE FROM cs_messages WHERE session_id IN ( SELECT id FROM cs_sessions WHERE user_id = 8821 ); DELETE FROM cs_sessions WHERE user_id = 8821;
追下去是这么回事:注销只触发了删除用户那一个钩子,客服会话存在独立表里,清理逻辑只删了用户元数据和订单备注。附件和检索索引也没跟着动。
「客服会话删除残留」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。
线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。
具体做法是,在删除用户的钩子里按用户编号和邮箱各删一遍会话表;附件目录按会话号建的,删记录前先把文件路径取出来;删完跑一条 count 确认是 0,别只看函数返回 true。
验收就看一点,注销一个测试账号,两张表按用户编号查都是 0 行,附件目录也空了。
