Flowable 版本升级数据库表清理方案

159 阅读2分钟

Flowable 版本升级数据库表清理方案

问题背景

由于系统框架升级了 Flowable 工作流引擎版本,新旧版本之间的数据库表结构存在冲突,导致项目启动失败。现需要在测试环境清理旧版 Flowable 表结构,完全使用新版表结构。

操作方案

1. 数据库备份(必须步骤)

-- 备份整个数据库(推荐)
mysqldump -u [username] -p[password] [database_name] > flowable_upgrade_backup_$(date +%Y%m%d_%H%M%S).sql

-- 或仅备份 Flowable 相关表
mysqldump -u [username] -p[password] [database_name] \
  $(mysql -u [username] -p[password] -Nse \
  "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES \
   WHERE (TABLE_NAME LIKE 'act_%' OR TABLE_NAME LIKE 'flw_%') \
   AND TABLE_SCHEMA=DATABASE()") \
  > flowable_tables_backup.sql

2. 查询待删除表清单

-- 查看所有 Flowable 相关表
SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES 
WHERE (TABLE_NAME LIKE 'act_%' OR TABLE_NAME LIKE 'flw_%') 
AND TABLE_SCHEMA = DATABASE()
ORDER BY TABLE_NAME;

3. 安全删除方案

方案A:生成删除脚本(推荐)
-- 生成删除脚本(先查看不执行)
SELECT CONCAT('DROP TABLE IF EXISTS `', TABLE_NAME, '`;') AS drop_statement
FROM INFORMATION_SCHEMA.TABLES
WHERE (TABLE_NAME LIKE 'act_%' OR TABLE_NAME LIKE 'flw_%')
AND TABLE_SCHEMA = DATABASE();

升级后验证

  1. 重启应用,检查是否自动创建新版 Flowable 表结构
  2. 验证基础工作流功能:
    -- 检查新版表是否存在
    SELECT TABLE_NAME 
    FROM INFORMATION_SCHEMA.TABLES 
    WHERE (TABLE_NAME LIKE 'act_%' OR TABLE_NAME LIKE 'flw_%') 
    AND TABLE_SCHEMA = DATABASE()
    ORDER BY TABLE_NAME;
    
    -- 检查引擎版本
    SELECT * FROM ACT_GE_PROPERTY WHERE NAME_ = 'schema.version';
    

回滚方案

如果升级后出现问题,可快速回滚:

# 恢复备份数据
mysql -u [username] -p[password] [database_name] < flowable_upgrade_backup_[timestamp].sql

注意事项

  1. 生产环境执行前必须在测试环境验证
  2. 建议在低峰期操作
  3. 确保应用已完全停止后再执行删除操作
  4. 新版 Flowable 可能需要额外的数据库初始化脚本
  5. 检查应用配置中关于自动更新数据库的配置项:
    # 通常设置为 true 或 create-drop
    spring.flowable.database-schema-update=true
    

本方案已考虑外键约束处理,通过 FOREIGN_KEY_CHECKS 临时禁用外键检查确保删除操作顺利完成。