MySQL 對大表做歸檔

20170405發表於2020-09-14

  方案:為儘量降低對業務影響,決定採取下列方案。

  1、在主庫建立 2016、2017、2018、2019的4個歷史表結構。

  2、在從庫建立test庫,並建立 2016、2017、2018、2019的4個歷史表結構,在從庫的主表上用insert into語句根據時間欄位把資料插入test庫的2016、2017、2018、2019的歷史表裡面。分拆為2016、2017、2018、2019。

  3、用Navicat把 2016、2017、2018、2019匯出為SQL檔案,並生成主表的DELETE語句的TXT檔案。

  4、用Python指令碼把 SQL檔案和 TXT檔案進行處理,分批匯入到 2016、2017、2018、2019的4個歷史表,並刪除主錶的歷史資料。

  5、對主表進行收縮。

  完成歸檔。

  1、在主庫建立歷史表的表結構。

  CREATE TABLE `upload_order_header_2016` (

  `id` bigint(22) NOT NULL AUTO_INCREMENT COMMENT '自增id',

  `company` varchar(25) DEFAULT NULL COMMENT '貨主',

  PRIMARY KEY (`id`)  

  ) ENGINE=InnoDB DEFAULT CHARSET=utf8

  2、從庫建立test庫,同樣建立 歷史表的表結構。

  在從庫上用insert into語句把2016年的歷史資料插入test庫的2016年的歷史表。

  insert into test.upload_order_header_2016 select * from log_db.upload_order_header

  where add_time < unix_timestamp('2017-01-01 00:00:00');

  insert into test.upload_order_header_2017 select * from log_db.upload_order_header

  where add_time >= unix_timestamp('2017-01-01 00:00:00') and

  add_time < unix_timestamp('2018-01-01 00:00:00');


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69979119/viewspace-2719477/,如需轉載,請註明出處,否則將追究法律責任。

相關文章