备份数据库表结构_sql备份表和恢复表

备份数据库表结构_sql备份表和恢复表##================================================================##需求场景:由于MySQL没有类似于SQLSERVER那样的系统表来存放备份记录,且大规模的MySQL服务器需要集中管理和查看。服务器出现性能问题或复制延迟时,需要先判断是否由数据备份引起。##===========================…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

##================================================================##

需求场景:

由于MySQL没有类似于SQL SERVER那样的系统表来存放备份记录,且大规模的MySQL服务器需要集中管理和查看。

服务器出现性能问题或复制延迟时,需要先判断是否由数据备份引起。

##================================================================##

第一版

按照需求,考虑到需要记录的备份信息有备份服务器信息、备份开始结束时间、备份是否成功等消息,于是设计出第一版表:

create table full_backup_log
(
    id bigint auto_increment primary key, ## 自增主键,业务无关
    host_ip varchar(50), ## 备份机IP
    host_port int, ## 备份机端口
    backup_type varchar(50), ## 备份类型,mysqldump和xtrabackup
    start_time datetime, ## 备份开始时间
    end_time datetime, ## 备份结束时间
    is_success int, ## 备份是否成功
    backup_message varchar(5000), ## 备份消息
    check_time datetime ##写入或更新记录的时间
);

##================================================================##

第二版

将backup_message弄得比较大, 主要是先把备份过程中的一些信息写进去,但仔细想想,该表不能很好地记录备份过程中的每一步,将所有信息放入到backup_message列中不利于查看,于是新增一个详细信息表:

create table full_backup_log_detail
(
    id bigint auto_increment primary key, ## 自增主键,业务无关
    full_backup_log_id bigint, ##关联full_backup_log表主键
    host_ip varchar(50), ## 备份机IP
    host_port int, ## 备份机端口
    backup_type varchar(50), ## 备份类型,mysqldump和xtrabackup
    backup_message varchar(5000), ## 备份消息
    check_time datetime ##写入或更新记录的时间
);

虽然full_backup_log表中存放有备份机和备份类型数据,可以通过full_backup_log_id关联来获取到,但是考虑full_backup_log_detail表数据数据日志性数据,写入后不会发生变化,因此通过冗余来减少关联,仅查询full_backup_log_detail即可看某台服务器的备份详情。

 

##================================================================##

第三版

通常DBA关心每个数据库最后一次备份成功时间,而表full_backup_log中存有is_success字段用来标识备份成功,可以通过以下SQL来获取:

select t1.* from full_backup_log as t1
inner join (
select host_ip,host_port,max(id) as max_id from full_backup_log
where is_success=1
group by host_ip,host_port
) as t2 on t1.id=t2.max_id

如果full_backup_log表数据量较大时,比如存放几千个实例的几年数据,表中数据几百万上千万时,上面查询即使有合适索引也不能高效执行。

由于DBA并不关心早前数据,可以通过数据结转来实现,但如果偶尔查询早前数据则需要当前表和历史表进行UNION,程序实现上还得判断数据是否结转,于是新增一表来存放最后一次成功备份记录:

## full_backup_info用来存放备份机最后一次成功备份的记录
create table full_backup_info
(
    id bigint auto_increment primary key, ## 自增主键,业务无关
    host_ip varchar(50), ## 备份机IP
    host_port int, ## 备份机端口
    backup_type varchar(50), ## 备份类型,mysqldump和xtrabackup
    start_time datetime, ## 备份开始时间
    end_time datetime, ## 备份结束时间
    backup_message varchar(5000), ## 备份消息
    check_time datetime ##写入或更新记录的时间
);

同样数据容易来减少表关联,虽然最后一次成功的备份记录肯定和full_backup_log表中的备份记录对应,但是因为保存数据已经全部冗余,就无需在表full_backup_info中增加字段与表full_backup_log进行关联

 

##================================================================##

第四版

当备份进程过度使用CPU和IO资源导致性能问题并报警后,DBA需要第一时间判断报警服务器是否处于备份过程中,需要查看那些服务器正在进行备份:

方法1:通过full_backup_log表的start_time和end_time来获取当前正在备份的服务器,需要对end_time来建索引,如果end_time默认为NULL,则WHERE end_time is null or end_time >now, 性能很容易因OR而受影响,可以考虑给end_time设置一个默认值如2199-01-01啥的,将查询改为 where end_time >now

方法2:将full_backup_log表中is_success列扩展来标识备份状态,如果1表示成功0表示失败-1表示正在备份,查询条件为where is_success=-1,需要为is_success列建索引,但是is_success列选择性太低,而MySQL又不支持过滤索引,容易生成不高效的执行计划。

解决办法:

新建一个表,专门存放正在备份的服务器记录,这样只需要查询该表便可以获取到所有正在备份的服务器列表,备份成功后立即删除该表记录。

## full_backup_in_process用来存放正在备份的服务器信息
create table full_backup_in_process
(
    id bigint auto_increment primary key, ## 自增主键,业务无关
    host_ip varchar(50), ## 备份机IP
    host_port int, ## 备份机端口
    backup_type varchar(50), ## 备份类型,mysqldump和xtrabackup
    start_time datetime, ## 备份开始时间
    check_time datetime ##写入或更新记录的时间
);

 

##================================================================##

总结:

部分研发同事在进行设计时,随着需求变化不停地修改表,通过在原表上新增字段来解决新需求,导致表字段过多,同一表处理不同需求,或通过复杂的SQL来实现,逼着DBA去优化SQL或创建一堆的低效索引,且美名其曰“业务需求”。但很多需求其实可以曲线处理,往往优化业务需求和优化实现方式才能最终解决性能问题。

曾经有研发同事让帮其优化SQL,发现其业务需求是对几千万数据进行排序分页然后取TOP,几十秒都无法返回结果,建议其去除排序,被告知部分数据需要优先处理,而这部分需要优先处理的数据极少极少,最终解决办法是将优先处理的数据分拆出来让单独的程序进行处理,其他普通数据不排序查询正常处理,完美解决。

虽然开个拖拉机,可以拉货,可以耕田,也能代步,家里没电还能当个发电机,但是人生不能一个拖拉机就解决了吧!

##================================================================##

 依旧是妹子镇压帖子!

备份数据库表结构_sql备份表和恢复表

推女郎艾栗栗,拿走不谢!

转载于:https://www.cnblogs.com/TeyGao/p/7095901.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/194005.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 【转】java对象转JSONObject、JSONObject转java对象及String转JSONObject

    【转】java对象转JSONObject、JSONObject转java对象及String转JSONObjectJSONObjectjo=(JSONObject)JSONObject.toJSON(javaBean);Studentstu=JSONObject.parseObject(jo,Student.class);JSONObjectjo=JSON.parseObject(str);原文:https://blog.csdn.net/qq_42407917/article/details/100151588

  • 素数判断算法(高效率)「建议收藏」

    素数判断算法(高效率)「建议收藏」chuanbindeng的素数判断算法关于素数的算法是信息学竞赛和程序设计竞赛中常考的数论知识,在这里我跟大家讲一下寻找一定范围内素数的几个算法。看了以后相信对大家一定有帮助。   正如大家都知道的那样,一个数n如果是合数,那么它的所有的因子不超过sqrt(n)–n的开方,那么我们可以用这个性质用最直观的方法来求出小于等于n的所有的素数。   num=0;

  • Android preference_android studio preview

    Android preference_android studio preview以前我们经常使用PreferenceActivity来显示给用户一个选项设置的界面,而现在Google推荐用PreferenceFragment来代替使用.先来看看官方文档的描述:Thepreferencehierarchycanbeformedinmultipleways:FromanXMLfilespecifyingthehierarchyFro

  • tpshop带微分销_TPshop微分销商城有什么作用[通俗易懂]

    tpshop带微分销_TPshop微分销商城有什么作用[通俗易懂]TPshop微分销商城有什么作用?据你所了解的有多少?一、可以简化商品的购物流程我们都知道的是在实体店进行购买的时候,我们可以直接看到商品,并且能够摸到产品的质量如何,并且在最后,假如并不合适的时候,是可以找商家进行退还的,但是网上购买就有所不同,有的时候还有些复杂,所以微商分销商品也着力于这一点进行考虑。适当的简化了商品的购物流程,让整个购物旅程更加美好。二、通过这一点吸引了浩繁的粉丝进行了最低…

  • 树莓派Python教程:树莓派能做什么

    树莓派Python教程:树莓派能做什么第一课:什么是树莓派第二课:树莓派能做什么第三课:购买您的第一个树莓派第四课:如何安装树莓派系统1~4课如果看过C语言版本的,请掠过…第二课:树莓派能做什么树莓派能做什么,莫过于来看一遍树莓派的10个经典项目的视频了,我们先以图片的形式过一遍。NO.1树莓派实现VR注意这个人头上戴的是一个虚拟3D眼镜,他看到的场景是树莓派上安装的两个摄像头,这两个摄像头就相当于人的两只眼睛,把视频传到这个眼镜,然后通过openGl渲染一个场景出来,从而控制这个机器人去做一些事情,这个机器人就是用树莓派

  • 如何免费下载百度文库文档「建议收藏」

    许多学校都已经先后开学,学生们也都开始准备新学期的学习了,除了书本上的知识,当然还需要网络上的资源来帮忙,如百度文库和豆丁网都提供了许多学习文档,但是下载这些资料往往都需要积分,如何才能免费下载这些文库中的文档呢?方法一:WAP版网页曲线复制以百度文库为例,打开需要复制的百度文库页面,将该页面的完整路径复制下来,接着重新打开一个浏览器窗口,将刚才复制的文档地址粘贴到地址栏上,然

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号