千万级大表如何更快速的创建索引_分享一份生产环境mysql数据库大表归档方案,值得收藏...

概述

分享下最近做的一个mysql大表归档方案,仅供参考。


整体思路

e923497b4a4d9eb2b30bd7457186e287.png

一、明确哪些大表需做归档

1、数据库表概要信息统计

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 -- 字段总数( SELECT table_name, COUNT( 1 ) ct FROM information_schema.COLUMNS GROUP BY table_name ) t2 ON t1.table_name = t2.table_nameLEFT JOIN -- 索引总数( 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、整理需备份的大表

8b9fc547475a0e209de1b1be947c5bb4.png

二、备份大表

1、表定义

或者用navicat导出表结构

 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、表触发器

SELECT * FROM information_schema.triggers where event_object_table='table_name';show create trigger trigger_schema.trigger_name;

4、表索引

 show index from 表名;

三、历史数据归档

1、建立归档库及在归档库中创建归档表

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、归档历史数据

将历史数据插入到归档库中的归档表

 insert into pas_arch.t_att_work_hour_report_dmp1 select * from  pas_prod.t_att_work_hour_report  where work_date
c184e08d79f65e3a118f02f423d2e50d.png

3、确认数据一致

 select count(*) from pas_prod.t_att_work_hour_report where work_date

四、表切换

1、在原始库创建中间表

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_date
318041846dd06990ee255855ca8ab0e4.png

3、切换表

理论上会影响业务一秒钟,建议在业务空闲时间段进行

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;
357b2d85c877d8b2cdc79a52a2dd99a1.png

4、数据补录

 insert into t_att_work_hour_report select * from t_att_work_hour_report_arch where work_date>='2020-07-13 00:00:00';
85e37881afd2b8026f7cd9c3757c1488.png

5、依次添加主外键、触发器、约束、索引及授权

a737bb9626491f53fffd0f03633866b0.png

6、业务测试

业务测试反馈正常。


上面的添加主外键、触发器、约束、索引及授权步骤可以考虑在切换表之前,理论上影响业务一秒钟。

后面会分享更多devops和DBA方面内容,感兴趣的朋友可以关注下~

75b6566393d5ae9a78633a3f7535c121.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/468149.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

载波和LoRa

最近lora这个很火,火的原因是因为国家出了一个政策,这个政策呢,有很多人解读了,我身边也有好几个朋友做这方面的,然后我今天找他们聊了下,得到的结果是,这个政策肯定是或多或少对现在的行情和市…

imread函数 matlab_【MATLAB图像处理学习】1.读取和显示图片

CHAPTER2 图像处理的基础函数【使用的教材:冈萨雷斯 数字图像处理MATLAB(Digital image processing with Matlab】【原书图片下载地址:点这里】先介绍三个MATLAB中图片基本操作:imread imshow imwrite2.2读取图片imread(filename)imread是读取…

一场不能只看结果的较量

林书豪的比赛看得真的很舒服,虽然输掉了比赛,但是看到两边不断改变打法,不断试图侵犯对方的夺取分数,就好比看了一场战争电影,过程酣畅淋漓,结果差点令人满意。第一节广东的双后卫给北京制造了非常多的麻烦…

嘻哈帝国第一季/全集Empire迅雷下载

英文译名Empire,第1季(2015-01-08)FOX.本季看点:《嘻哈帝国》卢西奥斯莱恩是一名超级音乐明星兼Empire娱乐公司的创始人,故事讲述了他如何在困境和失败中运营公司的故事。拥有庞大帝国的老板得了绝症,于是他决定培养继承人&#x…

cassandra可视化工具_一位数据科学家的私房工具清单

作为一位万人敬仰的数据科学家,不但需要培育一棵参天技能树,私人武器库里没有一票玩得转的大火力工具也是没法在江湖中呼风唤雨的。近日北卡来罗纳大学CTO,一位数据科学家Jefferson Heard分享了多年来收集沉淀的数据分析工具集:处…

Dev C++,一个好玩的猜数字游戏

周末了,看了一点代码,发现有一个好玩的数字游戏,贡献给大家,个人觉得还是挺好玩的。说个题外话,之前写的文章,都是零散的,主要是时间的原因,最近事情有点杂,一说到这个事…

[BZOJ 2500] 幸福的道路

照例先贴题面(汪汪汪) 2500: 幸福的道路 Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 368 Solved: 145[Submit][Status][Discuss]Description 小T与小L终于决定走在一起,他们不想浪费在一起的每一分每一秒,所以他们决定每天早上一同晨练来享受在一…

你手上的PCB怎么制作的?几张动图揭晓工厂生产流程

在PCB出现之前,电路是通过点到点的接线组成的。这种方法的可靠性很低,因为随着电路的老化,线路的破裂会导致线路节点的断路或者短路。绕线技术是电路技术的一个重大进步,这种方法通过将小口径线材绕在连接点的柱子上,提…

linux开发板作为蓝牙音箱,USB 蓝牙适配器在ARM 开发板下的使用

4、可能出现的问题和解决方案:4.1 编译dbus 时出现:1checking for accept4... yeschecking abstract socket namespace... nochecking for pkg-config... (cached) /usr/local/bin/pkg-configchecking pkg-config is at least version 0.9.0... yescheck…

细丝极恐的华为251事件

事情的来龙去脉我就不再详细描述了,我提几个问题点,觉得有点疑惑,也是自己对这个事件的看法。1、李洪元于2005年入职华为,2018年1月离职,在2016年11月21日向公司的投诉邮箱发了一份匿名邮件,至于发邮件的东…

mysql set语句_mysql--乱码解决(6)

1.字符集介绍mysql数据库字符集包括字符集(character)和校对规则(collation)两个概念,其中字符集是用来定义mysql数据字符串的存储方式,而校对规则则是定义比较字符串的方式。2.常见字符集3.解决中文乱码思想:保持linux、服务端、库、表、客户…

C 语言,你真的懂递归了吗?

什么是递归?要说到递归如果不说栈的话,我觉得有点不合适,递归特点就是不断的调用同一个函数,如果这个函数没有一个递归界限,那么就是死循环了,所以讨论递归,就必须要讨论递归的界限,…

github page hexo博客gitee_利用Github和hexo搭建个人免费博客

利用Github和hexo搭建个人免费博客详细过程:概述:详细的介绍了利用github和hexo搭建免费的博客,内容详细,浅显易懂,容易上手,大家一起进来看看吧!1、配置Github相关操作:​ ①新建一…

漫画:三种 “奇葩” 的排序算法

在算法的世界里,有许多高效率的排序算法,比如快速排序、归并排序、桶排序......它们大大提高了程序的性能。但是,也有一些比较奇葩的排序算法,它们既不能做到高效率,也没有很好的可读性。那它们存在的意义是什么呢&…

常用c语言小程序,c语言经典小程序汇总大全

网上有很多的人说编程有多么多么无聊,其实:不要管别人怎么说,别人说什么,做你自己喜欢做的事就好。坚持下来,你会发现编程的乐趣的。当然,如果你觉得学习编程语言很痛苦,坚持了一段时间后无果&a…

opencv 二值化_Python-OpenCV获取图像轮廓的图像处理方法

一、引言在《OpenCV阈值处理函数threshold处理32位彩色图像的案例》介绍了threshold 函数,但threshold 的图像阈值处理对于某些光照不均的图像,这种全局阈值分割的方法并不能得到好的效果。图像阈值化操作中,我们更关心的是从二值化图像中分离…

让你不再害怕指针.pdf

今天推荐一本书,是讲解指针的,C 语言理解指针应该算一个重点,也算是一个难点,这个pdf 文章总结非常好,推荐给大家。想获取书籍Pdf的同学,请在公众号后台回复 「指针」,希望这本书籍让你们不再害…

revit如何根据坐标进行画线_在工程设计中如何根据工艺阀门的结构与特点来进行设计呢?...

在工程设计的实践中发现,因为阀门的种类繁多,每种阀门都有自己的特点,工程设计人员,尤其年轻的设计者由于不太了解阀门的结构和特点往往选错阀门,造成设计失误。系统的了解阀门,对工程设计人员(不是阀门设计…

c语言中二维数组中产生随机数,C语言中是如何进行随机数生成的[多图]

C语言中是如何进行随机数生成的.C语言是编程人员经常会到的一款计算机编程语言,有的朋友想知道怎样使用C语言进行随机数生成,那么就快随小编一起来看看这篇C语言中是如何进行随机数生成的吧!其中不仅为大家介绍了生成随机数的函数,还提供了测试代码!同时为大家附带了随机数字生…

一文带你了解V4L2

1、什么是v4l2V4L2(Video4Linux的缩写)是Linux下关于视频采集相关设备的驱动框架,为驱动和应用程序提供了一套统一的接口规范。V4L2支持的设备十分广泛,但是其中只有很少一部分在本质上是真正的视频设备:•Video captu…