針對指定庫、指定表清單,自動生成「導出 TSV → TRUNCATE 清空 → LOAD DATA 還原」三步驟 SQL,適用於表結構調整、碎片整理、跨例項遷移等場景。
SELECT CONCAT(
'SELECT * FROM `', TABLE_SCHEMA, '`.`', TABLE_NAME, '` INTO OUTFILE ',
'\'/work/opdir/repair/', TABLE_SCHEMA, '.', TABLE_NAME, '.tsv\'; ',
'TRUNCATE TABLE `', TABLE_SCHEMA, '`.`', TABLE_NAME, '`; ',
'LOAD DATA INFILE ',
'\'/work/opdir/repair/', TABLE_SCHEMA, '.', TABLE_NAME, '.tsv\' ',
'INTO TABLE `', TABLE_SCHEMA, '`.`', TABLE_NAME, '` ',
'CHARACTER SET utf8mb4;'
) AS ExeSql
FROM information_schema.TABLES t
WHERE t.TABLE_TYPE = 'BASE TABLE'
AND t.TABLE_SCHEMA IN ('BCReport_Sync') -- 目標庫,可擴展
AND t.TABLE_NAME NOT LIKE '%Log%'
AND t.TABLE_NAME NOT LIKE '%bak%'
AND t.TABLE_NAME NOT LIKE '%History%'
AND t.TABLE_NAME NOT LIKE '%Tmp_%'
AND t.TABLE_NAME NOT LIKE '%Monitor%'
AND t.TABLE_NAME NOT LIKE '%backup%'
AND t.TABLE_NAME NOT LIKE '%_BK'
AND t.TABLE_NAME NOT LIKE '%_Temp'
AND t.TABLE_NAME NOT LIKE '%2013%'
AND t.TABLE_NAME NOT LIKE '%2012%'
AND t.TABLE_NAME NOT LIKE '%2014%'
AND CONCAT(t.TABLE_SCHEMA, '.', t.TABLE_NAME) IN (
'AdConversions.DataInbound_TaskSchedule',
'AdConversions.DeviceForComparison',
'AdConversions.Fact_Realtime_Conversion',
'AdDataCenter.Ad_Account_Mirror',
'AdDataCenter.Ad_Account',
'AdDataCenter.Ad_AdGroup_AdAction_Mobisage',
'AdDataCenter.Ad_AdGroup_BidPrice',
'AdDataCenter.Ad_AdGroup_Property',
'AdDataCenter.Ad_AdGroup_WeekTimePeriod',
'AdDataCenter.Ad_AdGroup',
'AdDataCenter.Ad_Campaign_BudgetList',
'AdDataCenter.Ad_Campaign_DockingProduct_Mapping',
'AdDataCenter.Ad_Campaign_GeoTargeting',
'AdDataCenter.Ad_Campaign',
'AdDataCenter.Ad_Creative_Additional',
'AdDataCenter.Ad_Creative_ImageAd',
'AdDataCenter.Ad_Creative_Offerwall',
'AdDataCenter.Ad_Creative_Template',
'AdDataCenter.Ad_Creative',
'AdDataCenter.Ad_Targeting_Mobisage_AppIncluded',
'AdDataCenter.Ad_Targeting_Mobisage',
'AdDataCenter.Ad_Targeting',
'AdDataCenter.AdCreativeTemplate_SlotSize_Mapping',
'AdDataCenter.AdSync_AdCreative',
'AdDataCenter.App_MediaType_Mapping',
'AdDataCenter.AppOfferwall_Category_Mapping',
'AdDataCenter.Bill_AdAccount_Recharge_Daily',
'AdDataCenter.Bill_AdAccount_Spend_Daily',
'AdDataCenter.Dim_App',
'AdDataCenter.Dim_Slot',
'AdDataCenter.Docking_Product',
'AdDataCenter.Offerwall_AppBuckleScale_Mapping',
'AdDataCenter.Plugin_AdGroup',
'AdDataCenter.Slot_Affiliate_Business_Ratio',
'AdSync.Ad_Campaign_RealtimeControl',
'BCSourceData_Sync.Data_TaskSchedule',
'BCSourceData_Sync.Source_Fact_AccountHourlySpend',
'BCSourceData_Sync.Source_Fact_AdCreative_App_Usage_ThirdPartPlatform'
);
/work/opdir/repair/ 需提前建立,且 MySQL 進程擁有寫入權限(受 secure_file_priv 限制)。CHARACTER SET utf8mb4,防止編碼錯位。TRUNCATE 重建表、釋放空間、重置自增 ID,速度極快;但不可回滾、不觸發 Trigger。SOURCE 執行,或用 Shell 迴圈逐條執行。secure_file_priv 允許目標目錄或設為空(需重啟)。FLUSH TABLES WITH READ LOCK 確保一致性(會阻塞寫入)。mysqldump 邏輯備份,雙重保險。pt-archiver 或 mysqldump --tab 並行導出。SHOW TABLE STATUS 的 Auto_increment,導入後 ALTER TABLE t AUTO_INCREMENT = xxx。