千万级大表如何更快速的创建索引_分享一份生产环境mysql数据库大表归档方案,值得收藏...
生活随笔
收集整理的這篇文章主要介紹了
千万级大表如何更快速的创建索引_分享一份生产环境mysql数据库大表归档方案,值得收藏...
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
概述
分享下最近做的一個(gè)mysql大表歸檔方案,僅供參考。
整體思路
一、明確哪些大表需做歸檔
1、數(shù)據(jù)庫(kù)表概要信息統(tǒng)計(jì)
SELECTt1.table_schema,t1.table_name,`ENGINE`,table_rows,CAST( data_length / 1024.0 / 1024.0 AS DECIMAL ( 10, 2 ) ) `data_size(M)`,CAST( index_length / 1024.0 / 1024.0 AS DECIMAL ( 10, 2 ) ) `index_size(M)`,t2.ct col_count,t3.ct idx_count,create_time,table_comment FROMinformation_schema.TABLES t1LEFT JOIN -- 字段總數(shù)( SELECT table_name, COUNT( 1 ) ct FROM information_schema.COLUMNS GROUP BY table_name ) t2 ON t1.table_name = t2.table_nameLEFT JOIN -- 索引總數(shù)( SELECT table_name, COUNT( DISTINCT index_name ) ct FROM information_schema.STATISTICS GROUP BY table_name ) t3 ON t1.table_name = t3.table_name WHEREt1.table_schema NOT IN ( 'mysql', 'information_schema', 'performance_schema' ) ORDER BYt1.data_length DESC;2、整理需備份的大表
二、備份大表
1、表定義
或者用navicat導(dǎo)出表結(jié)構(gòu)
?show create table 表名;2、表主鍵、外鍵
--查看表主鍵信息 SELECTt.TABLE_NAME,t.CONSTRAINT_TYPE,c.COLUMN_NAME,c.ORDINAL_POSITION FROMINFORMATION_SCHEMA.TABLE_CONSTRAINTS AS t,INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS c WHEREt.TABLE_NAME = c.TABLE_NAME AND t.CONSTRAINT_TYPE = 'PRIMARY KEY' AND t.TABLE_NAME = '' AND t.TABLE_SCHEMA = '';--外鍵定義SELECTC.TABLE_SCHEMA,C.REFERENCED_TABLE_NAME,C.REFERENCED_COLUMN_NAME,C.TABLE_NAME,C.COLUMN_NAME,C.CONSTRAINT_NAME,T.TABLE_COMMENT,R.UPDATE_RULE,R.DELETE_RULE FROMINFORMATION_SCHEMA.KEY_COLUMN_USAGE CJOIN INFORMATION_SCHEMA.TABLES T ON T.TABLE_NAME = C.TABLE_NAMEJOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS R ON R.TABLE_NAME = C.TABLE_NAME AND R.CONSTRAINT_NAME = C.CONSTRAINT_NAME AND R.REFERENCED_TABLE_NAME = C.REFERENCED_TABLE_NAME WHEREC.REFERENCED_TABLE_NAME = 'TABLE_NAME' or C.TABLE_NAME='TABLE_NAME';3、表觸發(fā)器
SELECT * FROM information_schema.triggers where event_object_table='table_name';show create trigger trigger_schema.trigger_name;4、表索引
?show index from 表名;三、歷史數(shù)據(jù)歸檔
1、建立歸檔庫(kù)及在歸檔庫(kù)中創(chuàng)建歸檔表
create database pas_arch default character set utf8mb4;create table pas_arch.t_att_work_hour_report_dmp1 as select * from pas_prod.t_att_work_hour_report where 1=2;2、歸檔歷史數(shù)據(jù)
將歷史數(shù)據(jù)插入到歸檔庫(kù)中的歸檔表
?insert into pas_arch.t_att_work_hour_report_dmp1 select * from pas_prod.t_att_work_hour_report where work_date3、確認(rèn)數(shù)據(jù)一致
?select count(*) from pas_prod.t_att_work_hour_report where work_date四、表切換
1、在原始庫(kù)創(chuàng)建中間表
create table pas_prod.t_att_work_hour_report_tmp as select * from pas_prod.t_att_work_hour_report where 1=2;2、分段insert
insert into pas_prod.t_att_work_hour_report_tmp select * from pas_prod.t_att_work_hour_report where work_date>='2020-01-01 00:00:00' and work_date='2020-03-13 00:00:00' and work_date3、切換表
理論上會(huì)影響業(yè)務(wù)一秒鐘,建議在業(yè)務(wù)空閑時(shí)間段進(jìn)行
alter table pas_prod.t_att_work_hour_report rename to pas_prod.t_att_work_hour_report_arch;alter table pas_prod.t_att_work_hour_report_tmp rename to pas_prod.t_att_work_hour_report;4、數(shù)據(jù)補(bǔ)錄
?insert into t_att_work_hour_report select * from t_att_work_hour_report_arch where work_date>='2020-07-13 00:00:00';5、依次添加主外鍵、觸發(fā)器、約束、索引及授權(quán)
6、業(yè)務(wù)測(cè)試
業(yè)務(wù)測(cè)試反饋正常。
上面的添加主外鍵、觸發(fā)器、約束、索引及授權(quán)步驟可以考慮在切換表之前,理論上影響業(yè)務(wù)一秒鐘。
后面會(huì)分享更多devops和DBA方面內(nèi)容,感興趣的朋友可以關(guān)注下~
總結(jié)
以上是生活随笔為你收集整理的千万级大表如何更快速的创建索引_分享一份生产环境mysql数据库大表归档方案,值得收藏...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 设计模式_2_单例模式
- 下一篇: python如何调用阿里云接口_Pyth