更新UUID到BIGINT的迁移脚本,优化备份和回滚说明
This commit is contained in:
@@ -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 明细关联订单
|
||||||
|
|||||||
@@ -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_*`
|
||||||
|
|||||||
Reference in New Issue
Block a user