事情經過
有天, 我們公司外區的一個銷售C說他8月3號以前的工作流記錄找不到了。 問清緣由, 原來是更新了微信號(我們公司的工作流是基於企業微信開發的)。 經過分析, 微信號和流程資料並沒什麼關係, 所以初步得出結論:本來只需要更新微信號的, 結果我們公司的流程系統管理員把使用者先刪除, 再創建了新的用戶。
解決過程
1、首先想到的是直接從定時備份資料裡面找回原來的使用者ID, 結果發現系統只備份了十天的記錄, 而工作流系統上顯示銷售C只有8月3號以後的流程記錄, 距今已經40多天,
2、所以, 只能從資料庫的二進位記錄裡分析了。 進入MySQL資料存放的目錄。
3、通過分析檔修改時間, 得知刪除操作的動作在mysql-bin.000014檔裡面記錄。
4、因為日誌檔是二進位的, 所以匯出日誌為sql檔:
mysqlbinlog --no-defaults mysql-bin.000014 > workflow_operator.sql
5、日誌記錄比較大, 匯出後有132M, 壓縮打包檔並下載到本地, 只有15.2M
tar -czvf workflow_operator.tar.gz workflow_operator.sql
6、在本地使用文本工具, 查找所有的刪除用戶的操作:
最後定位刪除銷售C的動作在127766行(雖然日誌記錄行數比較多, 但是刪除用戶的動作比較少, 所以好排查)
7、用戶ID找到了, 所幸的是, 因為只刪除了使用者, 沒有刪除流程資料(因為流程資料是要存檔的), 所以只要把銷售C的舊流程資料user_id換成新的user_id就可以了, 流程表比較多, 通過體力勞動, 找出有舊ID的表, 然後再使用update語句一起更新,
(最後四位由於涉及隱私, 使用XXX代替)
update flow_fr_borrow set user_id = 'e76cb8bccaf74f32b94d17f74437xxxx' where user_id = '66adfd032ccf428d9e20e864f729xxxx';
update flow_fr_cost set user_id = 'e76cb8bccaf74f32b94d17f74437xxxx' where user_id = '66adfd032ccf428d9e20e864f729xxxx';
update flow_fr_fixedasset set user_id = 'e76cb8bccaf74f32b94d17f74437xxxx' where user_id = '66adfd032ccf428d9e20e864f729xxxx';
update flow_fr_house_lease set user_id = 'e76cb8bccaf74f32b94d17f74437xxxx' where user_id = '66adfd032ccf428d9e20e864f729xxxx';
update flow_fr_purchase set user_id = 'e76cb8bccaf74f32b94d17f74437xxxx' where user_id = '66adfd032ccf428d9e20e864f729xxxx';
update flow_fr_travel set user_id = 'e76cb8bccaf74f32b94d17f74437xxxx' where user_id = '66adfd032ccf428d9e20e864f729xxxx';
update flow_hr_positive set user_id = 'e76cb8bccaf74f32b94d17f74437xxxx' where user_id = '66adfd032ccf428d9e20e864f729xxxx';
update flow_pr_equip_borrow_sale set user_id = 'e76cb8bccaf74f32b94d17f74437xxxx' where user_id = '66adfd032ccf428d9e20e864f729xxxx';
update flow_pr_equip_return set user_id = 'e76cb8bccaf74f32b94d17f74437xxxx' where user_id = '66adfd032ccf428d9e20e864f729xxxx';
update flow_sa_tepe set user_id = 'e76cb8bccaf74f32b94d17f74437xxxx' where user_id = '66adfd032ccf428d9e20e864f729xxxx';
update flow_sa_safore set user_id = 'e76cb8bccaf74f32b94d17f74437xxxx' where user_id = '66adfd032ccf428d9e20e864f729xxxx';
update flow_sa_authorize set user_id = 'e76cb8bccaf74f32b94d17f74437xxxx' where user_id = '66adfd032ccf428d9e20e864f729xxxx';
update flow_sa_business set user_id = 'e76cb8bccaf74f32b94d17f74437xxxx' where user_id = '66adfd032ccf428d9e20e864f729xxxx';
update flow_hr_trial set sel_user_id = 'e76cb8bccaf74f32b94d17f74437xxxx' where sel_user_id = '66adfd032ccf428d9e20e864f729xxxx' ;
update wf_hist_order set creator = 'e76cb8bccaf74f32b94d17f74437xxxx' where creator = '66adfd032ccf428d9e20e864f729xxxx';
update wf_hist_task set operator = 'e76cb8bccaf74f32b94d17f74437xxxx' where operator = '66adfd032ccf428d9e20e864f729xxxx';
update wf_order set creator = 'e76cb8bccaf74f32b94d17f74437xxxx' where creator = '66adfd032ccf428d9e20e864f729xxxx';
update wf_hist_task_actor set actor_Id = 'e76cb8bccaf74f32b94d17f74437xxxx' where actor_Id = '66adfd032ccf428d9e20e864f729xxxx';