浅析MySQL 备份与恢复
知识点掌握了,还需要不断练习才能熟练运用。下面golang学习网给大家带来一个数据库开发实战,手把手教大家学习《浅析MySQL 备份与恢复》,在实现功能的过程中也带大家重新温习相关知识点,温故而知新,回头看看说不定又有不一样的感悟!
1、简介
数据无价,MySQL作为一个数据库系统,其备份自然也是非常重要且有必要去做。备份的理由千千万,预防故障,安全需求,回滚,审计,删了又改的需求等等,备份的重要性不言而喻。除了备份本身, 如何使用备份来恢复 服务也是一项重点内容,不能用来恢复的备份没有意义。本文主要会针对备份和恢复这两方面做一些简单的介绍。
本文为《高性能MySQL》备份相关章节的读书笔记。
2、备份和恢复的简单定义
正如简介所说,备份人尽皆知,也很容易引起人的重视。根据需求写定期脚本,或者使用其他方式都是比较常见的。但是恢复就没有那么引人注目了。比如说,也许会每周/每天定期进行自动备份。但是多久会进行一次备份的恢复测试?备份的内容是否完成?是否可用于恢复?如果出现故障,恢复的流程是否易操作?
备份只是数据源, 如何使用数据源 , 彻底恢复系统 这个过程。也非常重要。备份与恢复,都是MySQL运维中需要掌握的内容。
备份的意义在于恢复。如果不能恢复,那就不叫备份(比如RAID阵列不是备份,如果DROP DATABASE,RAID阵列不能恢复)
[还原] 和 [恢复] 的区别:
- 还原:仅指将备份文件中的内容提取出来并加载。
- 恢复:包括还原备份文件在内的一系列措施,目的是让服务恢复正常运行,比如重启MySQL,修改配置等其他操作 。
也就是说,恢复是要恢复到异常出前,采取的所有操作(比如修改参数,重启服务等)。不仅仅只是还原备份。
3、恢复计划需要考虑的几个因素
恢复计划在设计的时候,需要考虑一些因素,从而根据不同的需求进行更好的规划。可以根据RPO(恢复点目标)和RTO(恢复时间目标)这两个需求来协助制定合适的恢复策略。
- RPO(恢复点目标):可以容忍丢失多少数据?(需要恢复所有数据,还是能容忍上一次备份以来的数据丢失?)
- RTO(恢复时间目标):需要等待多久将数据恢复?(用户能接受到什么程度)
也许还需考虑:需要恢复什么?(整个服务器,单个库,单个表,还是事务)
其次,恢复计划需要定期进行测试,抽出数据测试备份确实有效、实际进行一次完整的备份恢复,熟悉整个恢复流程,确保真正发生问题时,可以有条不紊的完成恢复。
4、备份
4.1、备份内容包括什么?
最简单的策略就是 只备份数据和表定义 。但是恢复数据库需要更多内容,如果能备份的越充足,那么恢复起来也就更容易。(主要还是 根据需求 )
比如可以根据实际情况,考虑备份如下内容:
1、Binlog和InnoDB事务日志。
2、主/从库配置文件。
3、数据库操作系统配置(cron、脚本、内核参数)
或者说,根据需要进行备份内容的扩展。如果对于数据库恢复、甚至重建有很高需求(比如要求更快恢复),那么备份更多的内容也必不可少。如果需要有从0恢复数据库的能力,那需要做更多工作。
4.2、物理备份与逻辑备份
备份种类 | 逻辑备份 | 物理备份 |
---|---|---|
简介 | 利用mysqldump等命令实现备份 | 直接复制数据库文件 |
优点 | 可以文本编辑,恢复简单,使用mysqldump备份灵活。 | 足够直观,备份和恢复过程,本质上就是文件的移动。恢复速度更快。MySQL服务器几乎不需要执行操作。 |
缺点 | 备份和恢复都需要MySQL服务参与、且占用CPU资源。有可能很慢 | InnoDB的原始文件通常比逻辑备份大得多。 |
物理备份和逻辑备份的一点抉择:
- 对于大数据库,必须有物理备份。逻辑备份太慢,也可考虑基于快照的备份做辅助。
- 对于小数据库,逻辑备份几乎就可以了。
物理备份简单高效,逻辑备份尽量也要做。【两者都要有,看具体需求和资源分配】
其次:除非经过测试,否则不能假设备份可用。比如使用 mysqlcheck -A 测试数据库。
4.3、Binlog备份
Binlog也是备份中的重要一环,因为基于时间点的恢复需要用到它。而且Binlog一般很小,频繁的备份也较容易实现。如果有某个时间点的数据备份,加上自那以后的所有Binlog,就可以回滚所有变动。
4.3.1、备份Binlog的一些策略
FLUSH LOGS --log_slave_updata
需要注意的是,expire_log_days是通过 日志文件的修改时间 来判断的,而不是内容。(如果一直只有一个Binlog文件,可能就不会清理)。所以一定要使用 FLUSH LOGS 定期刷新Binlog。
4.3.2、老Binlog的清理
最好使用expire_log_days来进行自动的清理,保留一定天数。如果需要用cron清理。那么 不要使用 find+rm配置的cron清理日志。
0 3 * * * /usr/bin/mysql /var/log/mysql -mtime +N -name "mysql-bin.[0-9]"* | xargs rm
使用如下cron代替:
0 3 * * * /usr/bin/mysql -e "PURGE MASTER LOGS BEFORE CURRENT_DATE - INTERVAL N DAY"
4.3.3、Binlog备份的几点注意事项
- 增长保存时间只是一种配置,不代表Binlog本身就不需要备份。Binlog仍然需要定期备份,以便可以结合最近的备份使用。
- 需要注意的是,从库也使用Binlog。所以需要 区分从库和备份的Binlog管理 。
4.4、增量备份与差异备份
增量备份:自任意类型备份后,改动的所有内容的备份。
差异备份:特指自上次 全备份 之后,改动的所有内容的备份。
也就是说,差异备份基于全备份。而增量备份基于任意备份(比如某一个指定的差异备份。
差异备份可选项:
- 不要备份没有改变的表。
- 不要备份没有改变的行
虽然这样做差异备份可以提高恢复速度。但是全备份还是很有必要的。( 全备份可以频率低,但是必须有 )。
4.5、从库备份
在从库中备份,有时候是一个 可选项 ,不会干扰到主库,避免给主库增加更多的负载。其次,当计划从从库备份的时候,要保存更多信息,比如从库相对于主库的位置(偏移)等。
首先 从库不等于备份 ,从库和主库数据不匹配是很常见的。其次、从从库备份确实可以减轻主库备份时的负载,但是不够好。稳定起见,还是建议进行主库备份、全备份。
4.6、其他注意事项
4.6.1、在线备份与离线备份
离线备份是最简单最安全的。也是一致性最好的。问题就是,大部分数据库不能接受停机备份。所以基本还是用在线备份,或者说不停机备份
可以考虑在业务低峰期进行在线备份,即使负载增大也不会有太大影响。
4.6.2、数据一致性
数据一致性:对于多个表之间数据的一致性要求。(比如两个逻辑相关的操作分在了两个事务内,而备份在两个事务之间执行,就会导致数据不一致)
InnoDB可以在转储一组相关表的时候,开始一个事务,这样可以很大程度上保证数据的一致性。
但是也要注意,如果事务设置的不合理,比如一组相关表的修改分在了两个事务内,这仍然会导致数据不一致。( 一组表的相关操作需要确保在一个事务内 )
4.6.3、定期进行备份恢复测试,确认整个恢复过程需要的资源
能恢复的备份才有价值,不是有备份就可以
小结
本文讲解了一些备份的基本知识和概念,包括一些基本概念、恢复的重要性、备份和恢复的简单策略。还提及到了备份内容的选择、差异/增量备份、Binlog备份等。后续还需要继续学习,了解备份和恢复的具体操作方法和实践。
终于介绍完啦!小伙伴们,这篇关于《浅析MySQL 备份与恢复》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布数据库相关知识,快来关注吧!

- 上一篇
- MySQL存储过程及常用函数代码解析

- 下一篇
- MySQL 如何查询当前最新事务ID
-
- 俏皮的画板
- 这篇技术文章真是及时雨啊,太详细了,真优秀,mark,关注老哥了!希望老哥能多写数据库相关的文章。
- 2023-03-23 19:27:34
-
- 陶醉的水池
- 这篇技术文章真及时,太细致了,很有用,mark,关注老哥了!希望老哥能多写数据库相关的文章。
- 2023-01-29 02:32:57
-
- 朴实的战斗机
- 很好,一直没懂这个问题,但其实工作中常常有遇到...不过今天到这,看完之后很有帮助,总算是懂了,感谢up主分享博文!
- 2023-01-10 09:22:16
-
- 雪白的发卡
- 细节满满,码起来,感谢作者的这篇文章,我会继续支持!
- 2023-01-10 06:50:04
-
- 儒雅的月饼
- 这篇技术贴真及时,很详细,很有用,收藏了,关注老哥了!希望老哥能多写数据库相关的文章。
- 2023-01-09 22:43:05
-
- 数据库 · MySQL | 1小时前 | 外键 主键 ForeignKey CREATETABLE PRIMARYKEY
- mysql主外键创建语法详解与示例
- 397浏览 收藏
-
- 数据库 · MySQL | 6小时前 |
- mysql增删改查命令一览速查手册
- 182浏览 收藏
-
- 数据库 · MySQL | 10小时前 | Python 自动化 环境变量 mysql--version sudosystemctlstatusmysql
- 验证MySQL安装的三种快速方法
- 403浏览 收藏
-
- 数据库 · MySQL | 12小时前 |
- MySQL必备20个基础操作指令大全
- 166浏览 收藏
-
- 数据库 · MySQL | 12小时前 |
- MySQL基础教程:案例解析掌握基本操作
- 143浏览 收藏
-
- 数据库 · MySQL | 13小时前 | 备份数据 DROPTABLE TRUNCATETABLE IFEXISTS 外键检查
- MySQLdroptable命令详解与表结构删除技巧
- 463浏览 收藏
-
- 数据库 · MySQL | 13小时前 |
- MySQL新手必备命令大全及操作攻略
- 110浏览 收藏
-
- 数据库 · MySQL | 13小时前 |
- MySQL中as关键字别名功能深度解析
- 483浏览 收藏
-
- 数据库 · MySQL | 13小时前 |
- mysql基础20条指令及使用详解
- 273浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 508次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 484次学习
-
- PPTFake答辩PPT生成器
- PPTFake答辩PPT生成器,专为答辩准备设计,极致高效生成PPT与自述稿。智能解析内容,提供多样模板,数据可视化,贴心配套服务,灵活自主编辑,降低制作门槛,适用于各类答辩场景。
- 13次使用
-
- Lovart
- SEO摘要探索Lovart AI,这款专注于设计领域的AI智能体,通过多模态模型集成和智能任务拆解,实现全链路设计自动化。无论是品牌全案设计、广告与视频制作,还是文创内容创作,Lovart AI都能满足您的需求,提升设计效率,降低成本。
- 14次使用
-
- 美图AI抠图
- 美图AI抠图,依托CVPR 2024竞赛亚军技术,提供顶尖的图像处理解决方案。适用于证件照、商品、毛发等多场景,支持批量处理,3秒出图,零PS基础也能轻松操作,满足个人与商业需求。
- 27次使用
-
- PetGPT
- SEO摘要PetGPT 是一款基于 Python 和 PyQt 开发的智能桌面宠物程序,集成了 OpenAI 的 GPT 模型,提供上下文感知对话和主动聊天功能。用户可高度自定义宠物的外观和行为,支持插件热更新和二次开发。适用于需要陪伴和效率辅助的办公族、学生及 AI 技术爱好者。
- 26次使用
-
- 可图AI图片生成
- 探索快手旗下可灵AI2.0发布的可图AI2.0图像生成大模型,体验从文本生成图像、图像编辑到风格转绘的全链路创作。了解其技术突破、功能创新及在广告、影视、非遗等领域的应用,领先于Midjourney、DALL-E等竞品。
- 53次使用
-
- mysql 中的备份恢复,分区分表,主从复制,读写分离
- 2023-02-23 402浏览
-
- MySQL命令行方式进行数据备份与恢复
- 2023-01-07 416浏览
-
- Mysql如何通过binlog日志恢复数据详解
- 2022-12-30 381浏览
-
- mysql利用mysqlbinlog命令恢复误删除数据的实现
- 2022-12-28 293浏览
-
- 详解Mysql之mysqlbackup备份与恢复实践
- 2023-01-01 422浏览