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();
升级后验证
- 重启应用,检查是否自动创建新版 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; -- 检查引擎版本 SELECT * FROM ACT_GE_PROPERTY WHERE NAME_ = 'schema.version';
回滚方案
如果升级后出现问题,可快速回滚:
# 恢复备份数据
mysql -u [username] -p[password] [database_name] < flowable_upgrade_backup_[timestamp].sql
注意事项
- 生产环境执行前必须在测试环境验证
- 建议在低峰期操作
- 确保应用已完全停止后再执行删除操作
- 新版 Flowable 可能需要额外的数据库初始化脚本
- 检查应用配置中关于自动更新数据库的配置项:
# 通常设置为 true 或 create-drop spring.flowable.database-schema-update=true
本方案已考虑外键约束处理,通过 FOREIGN_KEY_CHECKS 临时禁用外键检查确保删除操作顺利完成。