-- 补进"只存在于副本"的行(六库合一的唯一数据搬运动作) -- -- 由 sql/tools/gen_migration_sql.py 生成 —— 列清单现算,不要手改本文件 -- 判定依据见 ../merge-conflict-plan.md §2.2 / §2.3 / §5 -- -- 🚫 **抽样镜像(SAMPLE=N)不要跑本文件。** 它的前提是"保留侧已被完整灌入"—— -- 抽样镜像里保留侧只抽了几百行,此时往丢弃侧取"目标库还没有的行",取到的会是 -- 几乎所有行(几亿行里的绝大部分),既没有意义也可能把开发库撑爆。 -- -- 前提:本文件在**目标库所在实例**上执行,且六个源库还在同一实例上 -- (六库同实例已实测,见 ../legacy-db-actual.md §1) -- 顺序:先按 10_dump_legacy.sh 把保留侧灌进 parking_cloud,再执行本文件 -- -- ⚠️ **执行时机(别当成一个可以随便穿插的步骤)** -- -- 本文件的判据是"**丢弃侧**里目标库还没有的行"(NOT EXISTS)。也就是说: -- 本文件跑完之后,谁再往丢弃侧写一行,那行就永远不会进目标库—— -- 而这正是它要搬的那 29 行客户数据同一类的漏。 -- -- 所以正确顺序是: -- 停写/切流 → ③ load → ④ 本文件 → ⑤ 99 校验(+ 98 全表对账)→ 放流量到新库 -- 不是"搬完随手跑一下"。绝不能在写流量还指向老库副本时先跑一遍了事。 -- -- ⚠️ td_b_wx_config 含微信支付密钥。本文件只有列名、没有任何值—— -- 密钥值由 INSERT ... SELECT 在库间直接流动,不落盘。 -- 请勿"为了方便"改成带值的 INSERT。 -- --------------------------------------------------------------------------- -- td_c_cust_person:把只存在于 zt_order_n.td_c_cust_person 的行补进 parking_cloud.td_c_cust_person -- 判重键 cust_id(两侧 id 空间不同,不能按 id 判重,也不能带 id 插入) -- 可插入列 35 个(= 两侧交集 − auto_increment 的 id) -- --------------------------------------------------------------------------- INSERT INTO `parking_cloud`.`td_c_cust_person` (`cust_id`, `cust_name`, `cust_nickname`, `user_name`, `user_password`, `user_phone`, `sex`, `email`, `cust_type`, `parent_id`, `cer_type`, `cer_number`, `deivce_type`, `device_no`, `token_id`, `prov_id`, `city_id`, `area_id`, `alias`, `remark`, `petty_pay_state`, `petty_pay_pass`, `petty_pay_amount`, `msg_push_state`, `direct_debit_state`, `data_state`, `create_empid`, `create_date`, `modfiy_empid`, `modfiy_date`, `address`, `head_pic_url`, `birth_date`, `org_id`, `org_name`) SELECT d.`cust_id`, d.`cust_name`, d.`cust_nickname`, d.`user_name`, d.`user_password`, d.`user_phone`, d.`sex`, d.`email`, d.`cust_type`, d.`parent_id`, d.`cer_type`, d.`cer_number`, d.`deivce_type`, d.`device_no`, d.`token_id`, d.`prov_id`, d.`city_id`, d.`area_id`, d.`alias`, d.`remark`, d.`petty_pay_state`, d.`petty_pay_pass`, d.`petty_pay_amount`, d.`msg_push_state`, d.`direct_debit_state`, d.`data_state`, d.`create_empid`, d.`create_date`, d.`modfiy_empid`, d.`modfiy_date`, d.`address`, d.`head_pic_url`, d.`birth_date`, d.`org_id`, d.`org_name` FROM `zt_order_n`.`td_c_cust_person` d WHERE NOT EXISTS ( SELECT 1 FROM `parking_cloud`.`td_c_cust_person` k WHERE k.`cust_id` = d.`cust_id` ); -- --------------------------------------------------------------------------- -- td_b_wx_config:把只存在于 zt_order.td_b_wx_config 的行补进 parking_cloud.td_b_wx_config -- 判重键 appid(两侧 id 空间不同,不能按 id 判重,也不能带 id 插入) -- 可插入列 14 个(= 两侧交集 − auto_increment 的 id) -- --------------------------------------------------------------------------- INSERT INTO `parking_cloud`.`td_b_wx_config` (`appid`, `app_secret`, `is_encrypt_message`, `encoding_aes_key`, `mchid`, `pay_api_secret`, `data_state`, `is_pay_noCredit`, `org_id`, `remark`, `create_op`, `create_date`, `modify_op`, `modify_date`) SELECT d.`appid`, d.`app_secret`, d.`is_encrypt_message`, d.`encoding_aes_key`, d.`mchid`, d.`pay_api_secret`, d.`data_state`, d.`is_pay_noCredit`, d.`org_id`, d.`remark`, d.`create_op`, d.`create_date`, d.`modify_op`, d.`modify_date` FROM `zt_order`.`td_b_wx_config` d WHERE NOT EXISTS ( SELECT 1 FROM `parking_cloud`.`td_b_wx_config` k WHERE k.`appid` = d.`appid` );