高性能MySQL之【第十五章 备份与恢复】学习记录
- 在不导致严重后果的情况下,可以容忍丢失多少数据?需要故障恢复,还是可以接受自从上次日常备份后所有的工作全部丢失?是否有法律法规的要求?
- 恢复需要在多长时间内完成?哪种类型的宕机是可以接受的?哪些影响(例如,部分服务不可用)是应用和用户可以接受的?当那些场景发生时,又该如何持续服务?
- 需要恢复什么?常见的需求是恢复整个服务器,单个数据库,单个表,或仅仅是特定的事务或语句
- 在生产实践中,大数据库来说,物理备份是必须的:逻辑备份太慢并且受资源限制,逻辑备份中恢复需要很长时间。基于快照的备份,例如Perconna XtraBackup和MySQL Enterprise Backup是最好的选择。
- 保留多个备份集
- 定期从逻辑备份(或者物理备份)中抽取数据进行恢复测试
- 保存二进制日志以用于基于故障时间点的恢复。expire_logs_days应该设置的足够长.至少大于全量备份的间隔时间。
- 完不借助备份工具本身来监控备份和备份的过程。需要另外验证备份是否正常。
- 通过演练整个恢复过程来测试备份和恢复。测算恢复所需要的资源(CPU、磁盘空间、实际时间,以及网络带宽等)
- 对安全性要仔细考虑。
- 锁时间:需要持有锁多长时间,例如备份期间持有的全局FLUSH TABLES WITH READ LOCK?
- 备份时间: 复制备份到目的地需要多久
- 备份负载:在复制备份到目的地时对服务器性能的影响有多少
- 恢复时间:把备份镜像从存储位置复制到MySQL服务器,重放二进制日志需要多久?
- 逻辑备份可以使用编辑器或grep和sed之类的命令查看和操作的普通文件。
- 恢复非常简单。直接导入。
- 可以通过网络来备份和恢复
- 可以在类似Amazon RDS这样不能访问底层文件系统中使用
- 非常灵活,因为mysqldump大部分人喜欢的工具.
- 与存储引擎无关
- 有助于避免数据损坏,物理备份可能磁盘损坏
- 必须由数据库服务器完成生成逻辑备份的工作,因此要使用更多的cpu周期
- 逻辑备份在某些场景下笔数据库文件本身更大
- 无法保证到处后再还原出俩的一定是同样的数据
- 从逻辑备份中还原需要MySQL加载和解释语句,转化为存储格式,并重建索引,所有这一切会很慢
- 基于文件的物理备份,只需要将需要的文件复制到其他地方即可完成备份。不需要其他额外的工作来生成原始文件
- 恢复更简单,取决于存储引擎。对于MyISAM复制到目的地即可。InnoDB需要停止数据库服务采取其他的步骤
- InnoDB和MyISAM的物理备份非常容易跨平台、操作系统和MySQL版本
- 从屋里备份中恢复会更快,因为不需要执行任何SQL或构建索引
- InnoDB的原始文件通常比相应的逻辑备份要大的多。InnoDB的表空间包含很多未使用的空间。还有很多空间被用来做存储数据意外的用途(插入缓冲、回滚段等)
- 物理备份不总是可以跨平台、操作系统以及MySQL版本。文件名大小写敏感和浮点格式是可能会遇到的麻烦。很可能因浮点格式不同而不能移动文件到另一个系统
- 非显著数据: 容易被忽略的数据,例如二进制日志和InnoDB事务日志
- 代码 : 触发器和存储过程
- 复制配置: 有复制关系的。二进制日志、中继日志、日志索引文件和info文件
- 服务器配置: 配置文件
- 选定的操作系统文件管理脚本等
- 使用Percona XtraBackup和MySQL Enterprise Backup中的增量备份特性
- 备份二进制日志。
- 不要备份没有改变的表。
- 不要备份没有改变的行
- 某些数据根本不需要备份
- 备份所有的数据,然后发送到一个有去重特性的目的地。
- schema和数据存储在一起
- 巨大的SQL语句
- 单个巨大的文件
- 逻辑备份的成本很高
- 只能备份到运行MySQL服务器的机器上的文件中
- 运行MySQL的系统用户必须有文件目录的写权限,因为是由MySQL服务器来执行文件的写入,而不是运行SQL命令的用户。
- 出于安全原因,不能覆盖已经存在的文件,不管文件权限如何
- 停止MySQL服务器
- 记录服务器的配置和文件权限
- 将数据从备份中移到MySQL数据目录
- 改变配置
- 改变文件权限
- 以限制访问模式重启服务器,等待完成启动
- 载入逻辑备份文件
- 检查和重放二进制日志
- 检测已经还原的数据
- 以完全权限重启服务器
- 二级索引损坏: 一般可以用optimize table 来修复损坏的二级索引;也可以使用select into outfile,删除和重建表,然后 LOAD DATA INFILE的方法。这些都是通过构建一个新表受影响的索引,来修复损坏的索引数据。
- 聚簇索引损坏:也许只能使用 innodb_force_recovery选项导出表.笔者就曾遇到过不止一次,都是因为意外断电导致,或者存储挂掉。
- 损坏系统结构:包括InnoDB事务日志、表空间的撤销日志(undo log)区域和数据字典。这种损坏可能需要整个数据库的导出和还原,因为InnoDB内部绝大部分的工作都可能受到影响。
- MySQL Enterprise Backup : 之前叫做InnoDB Hot Backup 或ibbackup。备份不需要停止MySQL,也不需要设置锁或中断正常的数据库活动。支持类似压缩备份、增量备份和到其他服务器的流备份特性。官方的备份工具
- Percona XtraBackup: 开源并且免费,支持类似流、增量、压缩和多线程(并行)备份操作。工作方式是在后台线程不断追踪InnoDB日志文件尾部,然后复制InnoDB数据文件。这是个轻量级的侵入过程,依靠特别的检测机制确保复制的数据是一致的。 还有XtraBack Manager项目:http://code.google.com/p/xtrabackup-manager
- mylvmbackup: http://lenz.homelinux.org/mylvmbackup 是一个perl脚本,通过LVM快照帮助MySQL自动备份。此工具首先获全局读锁,创建快照,释放锁。然后通过tar压缩数据并移除快照。它通过备份时的时间戳命名压缩包。
- Zmanda Recovery Manager: http://www.zmanda.com。配置、备份、验证、恢复、报告和调度,分免费和商业两种版本。
- mydumper: mysqldump的替代品。多线程备份和还原: http://www.mydumper.org
- mysqldump: 与mysql一起发行的程序。最常见。
高性能MySQL之【第十五章 备份与恢复】学习记录的更多相关文章
- Gradle 1.12用户指南翻译——第三十五章. Sonar 插件
本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- 15第十五章UDF用户自定义函数(转载)
15第十五章UDF用户自定义函数 待补上 原文链接 本文由豆约翰博客备份专家远程一键发布
- 《Linux命令行与shell脚本编程大全》 第十五章 学习笔记
第十五章:控制脚本 处理信号 重温Linux信号 信号 名称 描述 1 HUP 挂起 2 INT 中断 3 QUIT 结束运行 9 KILL 无条件终止 11 SEGV 段错误 15 TERM 尽可能 ...
- 【原创】构建高性能ASP.NET站点 第五章—性能调优综述(后篇)
原文:[原创]构建高性能ASP.NET站点 第五章-性能调优综述(后篇) 构建高性能ASP.NET站点 第五章—性能调优综述(后篇) 前言:本篇主要讲述如何根据一些简单的工具和简单的现象来粗布的定位站 ...
- CSS3秘笈复习:十三章&十四章&十五章&十六章&十七章
第十三章 1.在使用浮动时,源代码的顺序非常重要.浮动元素的HTML必须处在要包围它的元素的HTML之前. 2.清楚浮动: (1).在外围div的底部添加一个清除元素:clear属性可以防止元素包围浮 ...
- Gradle 1.12用户指南翻译——第四十五章. 应用程序插件
本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- Gradle 1.12 翻译——第十五章. 任务详述
有关其他已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或访问:http://gradledoc.qiniudn.com ...
- Gradle 1.12用户指南翻译——第二十五章. Scala 插件
其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...
- “全栈2019”Java多线程第三十五章:如何获取线程被等待的时间?
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
随机推荐
- [leetcode-485-Max Consecutive Ones]
Given a binary array, find the maximum number of consecutive 1s in this array. Example 1: Input: [1, ...
- [leetcode-521-Longest Uncommon Subsequence I]
Given a group of two strings, you need to find the longest uncommon subsequence of this group of two ...
- 12.js如何将明文转为MD5
1.先下载MD5.JS 2.引入,使用hex_md5(str)即可
- 弹出浮层css+JQuery
先来张效果图: HTML代码如下: <body> <div class="bg" id="bg" style="display: n ...
- JAVA - 工厂模式
1. 简单工厂违背OCP(Open Close Principle)原则 , 即对增加开放,对修改关闭.如果要符合OCP原则,要针对接口编程. //简单工厂模式,违反了OCP原则 public cla ...
- 面向对象15.3String类-常见功能-获取-2
public class String_APImethod {/* * 1.4获取字符串中的一部分字符串,也叫字符串 * String substring(int beginIndex, int en ...
- Java开发中碰到的Map的坑
这属于我在开发中碰过的坑 ,容器中存放者对象,当clear()的时候,出现的奇葩问题.好了,直接看代码: package com.DataType.yinyong; import java.util. ...
- poj_1845: Sumdiv
题目链接 先将A^B分解质因数,可以通过先分解A,再把对应的幂次*B.之后用下面这个式子求解就可以了 #include<vector> #include<iostream> u ...
- nyoj_83:迷宫寻宝(二)(计算几何)
题目链接 枚举所有墙的2n个端点与宝物的位置作为一条线段(墙的端点必定与边界重合), 求出与之相交的最少线段数(判断线段相交时用跨立实验的方法),+1即为结果. #include<bits/st ...
- Hadoop-2.7.2集群的搭建——集群学习日记
前言 因为比赛的限制是使用Hadoop2.7.2,估在此文章下面的也是使用Hadoop2.7.2,具体下载地址为Hadoop2.7.2 开始的准备 目前在我的实验室上有三台Linux主机,因为需要参加 ...