更新UUID到BIGINT的迁移脚本,优化备份和回滚说明

This commit is contained in:
wuweihua
2026-11-14 00:40:16 +08:00
parent 0094e4aaff
commit 4f2f2db20f
3 changed files with 13 additions and 27 deletions
@@ -3,7 +3,7 @@
-- 范围 PK:prc_order_bill.bill_id / prc_income_bill.income_bill_id / prc_income_bill_fee.fee_id / prc_pay_bill.pay_bill_id / prc_pay_bill_fee.fee_id -- 范围 PK:prc_order_bill.bill_id / prc_income_bill.income_bill_id / prc_income_bill_fee.fee_id / prc_pay_bill.pay_bill_id / prc_pay_bill_fee.fee_id
-- 范围 FK/引用:prc_order_bill_ext、income/pay 上 bill_id、prc_billing_task、ar_bill_detail*、ar_bill_generate_task、pay_bill_line/log/diff -- 范围 FK/引用:prc_order_bill_ext、income/pay 上 bill_id、prc_billing_task、ar_bill_detail*、ar_bill_generate_task、pay_bill_line/log/diff
-- 不动:ar_bill 等已 bigint;prc_quote* 报价 UUID;任务 taskId -- 不动:ar_bill 等已 bigint;prc_quote* 报价 UUID;任务 taskId
-- 回滚:见文末;更稳妥为整库备份恢复 + 旧后端包 -- 回滚:用宝塔/整库备份恢复 + 旧后端包(本脚本不再做同库 *_bak_uuid 拷贝)
-- --
-- FK盘点: fk_income_bill_order_bill, fk_income_bill_fee_order, fk_order_bill_ext_bill, fk_pay_bill_order_bill, fk_pay_bill_fee_order -- FK盘点: fk_income_bill_order_bill, fk_income_bill_fee_order, fk_order_bill_ext_bill, fk_pay_bill_order_bill, fk_pay_bill_fee_order
SET NAMES utf8mb4; SET NAMES utf8mb4;
@@ -25,19 +25,8 @@ WHERE TABLE_SCHEMA = DATABASE()
AND REFERENCED_TABLE_NAME IN ('prc_order_bill','prc_income_bill','prc_income_bill_fee','prc_pay_bill','prc_pay_bill_fee') AND REFERENCED_TABLE_NAME IN ('prc_order_bill','prc_income_bill','prc_income_bill_fee','prc_pay_bill','prc_pay_bill_fee')
ORDER BY TABLE_NAME, CONSTRAINT_NAME; ORDER BY TABLE_NAME, CONSTRAINT_NAME;
-- ========== 1. 备份关键表 ========== -- ========== 1. 跳过同库 bak(已在宝塔做整库备份,避免再拷一份占盘/耗时) ==========
DROP TABLE IF EXISTS `prc_order_bill_bak_uuid`; -- 回滚请用宝塔备份恢复,不再依赖 *_bak_uuid
CREATE TABLE `prc_order_bill_bak_uuid` AS SELECT * FROM `prc_order_bill`;
DROP TABLE IF EXISTS `prc_order_bill_ext_bak_uuid`;
CREATE TABLE `prc_order_bill_ext_bak_uuid` AS SELECT * FROM `prc_order_bill_ext`;
DROP TABLE IF EXISTS `prc_income_bill_bak_uuid`;
CREATE TABLE `prc_income_bill_bak_uuid` AS SELECT * FROM `prc_income_bill`;
DROP TABLE IF EXISTS `prc_income_bill_fee_bak_uuid`;
CREATE TABLE `prc_income_bill_fee_bak_uuid` AS SELECT * FROM `prc_income_bill_fee`;
DROP TABLE IF EXISTS `prc_pay_bill_bak_uuid`;
CREATE TABLE `prc_pay_bill_bak_uuid` AS SELECT * FROM `prc_pay_bill`;
DROP TABLE IF EXISTS `prc_pay_bill_fee_bak_uuid`;
CREATE TABLE `prc_pay_bill_fee_bak_uuid` AS SELECT * FROM `prc_pay_bill_fee`;
-- ========== 2. 映射表 ========== -- ========== 2. 映射表 ==========
DROP TABLE IF EXISTS `mig_map_order_bill`; DROP TABLE IF EXISTS `mig_map_order_bill`;
@@ -397,13 +386,11 @@ SELECT d.detail_id, d.prc_order_bill_id, o.order_no FROM ar_bill_detail d JOIN p
SELECT f.detail_fee_id, f.prc_income_bill_fee_id, i.fee_type FROM ar_bill_detail_fee f JOIN prc_income_bill_fee i ON i.fee_id = f.prc_income_bill_fee_id LIMIT 5; SELECT f.detail_fee_id, f.prc_income_bill_fee_id, i.fee_type FROM ar_bill_detail_fee f JOIN prc_income_bill_fee i ON i.fee_id = f.prc_income_bill_fee_id LIMIT 5;
-- ========== 9. 回滚说明(勿自动执行) ========== -- ========== 9. 回滚说明(勿自动执行) ==========
-- 推荐:整库从备份恢复 + 部署旧后端包 -- 用宝塔/整库备份恢复 + 部署旧后端包
-- 或:SET FOREIGN_KEY_CHECKS=0; RENAME 把 *_bak_uuid 换回主表名(引用列需另外恢复)
-- --
-- ========== 10. 次日清理 ========== -- ========== 10. 次日清理 ==========
-- DROP TABLE IF EXISTS prc_order_bill_old_uuid, prc_order_bill_bak_uuid, prc_income_bill_old_uuid, prc_income_bill_bak_uuid, -- DROP TABLE IF EXISTS prc_order_bill_old_uuid, prc_income_bill_old_uuid,
-- prc_income_bill_fee_old_uuid, prc_income_bill_fee_bak_uuid, prc_pay_bill_old_uuid, prc_pay_bill_bak_uuid, -- prc_income_bill_fee_old_uuid, prc_pay_bill_old_uuid, prc_pay_bill_fee_old_uuid;
-- prc_pay_bill_fee_old_uuid, prc_pay_bill_fee_bak_uuid, prc_order_bill_ext_bak_uuid;
-- DROP TABLE IF EXISTS mig_map_order_bill, mig_map_income_bill, mig_map_income_fee, mig_map_pay_bill, mig_map_pay_fee; -- DROP TABLE IF EXISTS mig_map_order_bill, mig_map_income_bill, mig_map_income_fee, mig_map_pay_bill, mig_map_pay_fee;
-- --
-- 冒烟:1)新建/重计费 2)出应收 3)查应付费用 4)旧 AR 明细关联订单 -- 冒烟:1)新建/重计费 2)出应收 3)查应付费用 4)旧 AR 明细关联订单
+2 -2
View File
@@ -52,7 +52,7 @@ echo
echo "【必须】先停 Java / BMS,再执行本脚本。" echo "【必须】先停 Java / BMS,再执行本脚本。"
echo "执行前请确认:" echo "执行前请确认:"
echo " 1) Java / BMS 应用与异步 worker 已全部停掉(不要边跑边迁)" echo " 1) Java / BMS 应用与异步 worker 已全部停掉(不要边跑边迁)"
echo " 2) 已做全库/关键表备份" echo " 2) 已在宝塔做整库备份(SQL 不再同库拷份)"
echo " 3) 磅盘空间足够(建议 >= 订单+ext+费用表 2~3 倍)" echo " 3) 磅盘空间足够(建议 >= 订单+ext+费用表 2~3 倍)"
echo " 4) SQL 成功后,再部署 Long 版后端并启动" echo " 4) SQL 成功后,再部署 Long 版后端并启动"
echo echo
@@ -104,7 +104,7 @@ ELAPSED=$((END_TS - START_TS))
if [[ "${RC}" -ne 0 ]]; then if [[ "${RC}" -ne 0 ]]; then
echo "[$(date '+%F %T')] 失败 exit=${RC} 耗时=${ELAPSED}s,请查日志: ${LOG_FILE}" | tee -a "${LOG_FILE}" echo "[$(date '+%F %T')] 失败 exit=${RC} 耗时=${ELAPSED}s,请查日志: ${LOG_FILE}" | tee -a "${LOG_FILE}"
echo "若已换表中途失败:优先整库备份恢复,不要部署新后端" echo "若已换表中途失败:用宝塔备份恢复,不要部署新后端"
exit "${RC}" exit "${RC}"
fi fi
@@ -5,7 +5,7 @@
## 必须顺序(不要飞) ## 必须顺序(不要飞)
1. **先停 Java / BMS 服务**(含计费、出账、导出等异步 worker) 1. **先停 Java / BMS 服务**(含计费、出账、导出等异步 worker)
2. 全库或关键表备份 2. **宝塔整库备份**(SQL 不再做同库 *_bak_uuid 拷贝)
3. 在服务器执行 SQL(下面一键脚本) 3. 在服务器执行 SQL(下面一键脚本)
4. SQL 成功后,再部署 **Long 版** 后端并启动 4. SQL 成功后,再部署 **Long 版** 后端并启动
5. 冒烟 5. 冒烟
@@ -36,7 +36,7 @@ chmod +x 20261113_uuid_to_bigint_run.sh
## 执行前 ## 执行前
1. **已停 Java / BMS**(含计费/出账/导出异步) 1. **已停 Java / BMS**(含计费/出账/导出异步)
2. 全库备份(或至少:prc_order_bill*、prc_income*、prc_pay_bill*、ar_bill_detail*、prc_billing_task、pay_bill_line) 2. **已在宝塔做整库备份**
3. 建议在从库/备份库先干跑校验 3. 建议在从库/备份库先干跑校验
4. 准备好 Long 版后端包(SQL 成功后再发) 4. 准备好 Long 版后端包(SQL 成功后再发)
@@ -56,9 +56,8 @@ chmod +x 20261113_uuid_to_bigint_run.sh
## 回滚 ## 回滚
1. 停新包 1. 停新包
2. **推荐**:整库从备份恢复 2. **用宝塔整库备份恢复**
3. 或:`SET FOREIGN_KEY_CHECKS=0` 后将 `*_bak_uuid` RENAME 回主表名(引用列需额外处理) 3. 部署旧后端包
4. 部署旧后端包
## 次日 ## 次日
- 确认无误后 DROP `*_old_uuid` / `*_bak_uuid` / `mig_map_*` - 确认无误后 DROP `*_old_uuid` / `mig_map_*`