dump与xtra介绍

Mysqldump用于备份,不得不提两个关键的参数:
--single-transaction:在开始备份前,执行start transaction命令,以此来获取一致性备份,该参数仅对innodb存储引擎有效。
--master-data=2:主要用于记录一致性备份的位点。
理解Mysqldump工作原理,一定要将事务表(innodb)和非事务表(比如myisam)区别对待,因为备份的流程与此息息相关。而且,到目前为止,我们也无法规避myisam表,即使我们的所有业务表都是innodb,因为mysql库中系统表仍然采用的myisam表。备份的基本流程如下:
1.调用FTWRL(flush tables with read lock),全局禁止读写
2.开启快照读,获取此时的快照(仅对innodb表起作用)
3.备份非innodb表数据(*.frm,*.myi,*.myd等)
4.非innodb表备份完毕后,释放FTWRL锁
5.逐一备份innodb表数据
6.备份完成。
而5.6的mysqldump利用保存点机制,每备份完一个表就将一个表上的MDL锁释放,避免对一张表锁更长的时间。这里可以参考我之前的blog:FLUSH TABLE WITH READ LOCK
大家可能有一个疑问,为啥备份innodb表之前,就已经将锁释放掉了,这实际上是利用了innodb引擎的MVCC机制,开启快照读后,就能获取那个时间的一致的数据,无论需要备份多长时间,直到整个事务结束(commit)为止。

物理备份(Xtrabackup)
相对于逻辑备份利用查询提取数据中的所有记录,物理备份更直接,拷贝数据库文件和日志来完成备份,因此速度会更快。当然,无论是开源的Mydumper还是官方最新的备份工具(5.7.11的mysqlpump)都支持了多线程备份,所以速度差异可能会进一步缩小,至少从目前生产环境来看,物理备份使用还是比较多的。由于Xtrabackup支持备份innodb表,实际生产环境中我们使用的工具是innobackupex,它是对xtrabackup的一层封装。innobackupex 脚本用来备份非 InnoDB 表,同时会调用 xtrabackup 命令来备份 InnoDB 表,innobackupex的基本流程如下:
1.开启redo日志拷贝线程,从最新的检查点开始顺序拷贝redo日志;
2.开启idb文件拷贝线程,拷贝innodb表的数据
3.idb文件拷贝结束,通知调用FTWRL(flash tables with read lock),获取一致性位点
4.备份非innodb表(系统表)和frm文件
5.由于此时没有新事务提交,等待redo日志拷贝完成
6.最新的redo日志拷贝完成后,相当于此时的innodb表和非innodb表数据都是最新的
7.获取binlog位点,此时数据库的状态是一致的。
8.释放锁,备份结束。

LOCK TABLES FOR BACKUP
作用:备份数据
1.禁止非innodb表更新
2.禁止所有表的ddl
优化点:
1.不会被大查询堵塞(关闭表)
2.不会堵塞innodb表的读取和更新,这点非常重要,对于业务表全部是innodb的情况,则备份过程中DML完全不受损
UNLOCK TABLES

LOCK BINLOG FOR BACKUP
作用:获取一致性位点。
1.禁止对位点更新的操作
优化点:
1.允许DDl和更新,直到写binlog为止。
UNLOCK BINLOG

#####

对于INNODB,xtrabackup基于innodb的crash-recovery功能进行备份。

innodb维护了一个redo log(事务日志),包含了INNODB数据所有改动情况,INNODB启动时,先去检查datafile 和transaction log然后应用所有已提交的事务前滚

,未提交进行回滚。在备份过程中是不锁表,1页页复制数据。同时,XTRABACKUP还有另外一个线程监视着REDOLOG,一个监控线程会监视transaction log一旦变化,就会被复制走。 .xtrabackup工具备份到最后执行flash tables with read lock ,对数据库进行锁表以便进行一致性备份 保证数据的一致性。在全部数据文件完成之后,停止复制logfie

xtrabackup 采用内置的INNODB库以READ WRITE模式打开INNODB的数据文件。然后每次RW是1MB的数据,一页一页的查看,同时用INNODB的BUF_PAGE_IS_CORRUPTED()函数检查此页数据是否正常。如果正常,复制,不正常推出,最多读取10次,复制REDOLOG的原理也是一样的,只是每次读史512KB

xtrabackup工具备份到最后执行flash tables with read lock ,对数据库进行锁表以便进行一致性备份

增量备份原理:在完整备份和增量备份文件中都有一个文件,xtrabackup_checkpoints会记录备份完成时检查点LSN ,在进行新的增量备份时,XTRABACKUP会比较表空间中每页的LSN是否大于上次备份完成的LSN号,如果是备份,则备份,并记录当前的LSN号

时间: 2024-12-10 15:45:37

dump与xtra介绍的相关文章

python:Json模块dumps、loads、dump、load介绍

由上篇文章(python3+requests:get/post请求)涉及到的json.dumps()扩展 1.json.dumps()用于将dict类型的数据转成str 备注:文件路径前面加上 r 是为了避免转义 1 import json 2 3 dict = {'a': 'wo', 'b': 'zai', 'c': 'zhe', 'd': 'li'} 4 string = json.dumps(dict) 5 print(dict) 6 print(string) 7 print(type(

linux服务器备份工具(tar,cpio,dump)

Linux下的备份技术 1.备份前因考虑的因素 ● 可移植性(即在Red Hat Linux系统下执行的备份在另外一个系统上恢复的能力). ● 是否自动备份. ● 执行备份的周期. ● 需要把归档的备份保存多长时间. ● 用户界面的友好性(决定是否需要选择基于GUI界面的工具还是基于文本的). ● 是否需要使用压缩技术.直接复制或者加密技术. ● 备份介质(需要从价格.性能.存储能力上考虑). ● 是否远程备份或网络备份. ● 是保存一个文件.一个子目录还是整个系统. 2.备份选择的策略 需要确

数据库 之 Mysql存储引擎介绍

1  存储引擎概念介绍 存储引擎其实就是如何实现存储数据,如何为存储的数据建立索引以及如何更新,查询数据等技术实现的方法.数据库中的存储引擎其实是对使用了该引擎的表进行某种设置,数据库中的表设定了什么存储引擎,那么该表在数据存储方式.数据更新方式.数据查询性能以及是否支持索引等方面就会有不同的"效果". 通过选择不同的存储引擎,获得额外的速度或者功能,从而改善服务器的应用的整体功能.例如,如果你在研究大量的临时数据,你也许需要使用内存MySQL存储引擎.内存存储引擎能够在内存中存储所有

dump命令详解

基础命令学习目录首页 原文链接:http://mip.xuexila.com/diannao/xitong/linux/3609675.html linux系统下我们可以使用备份命令dump对系统文件进行备份,以免数据丢失.下面由学习啦小编为大家整理了linux下备份命令dump的相关知识,希望大家喜欢! linux备份命令dump详解 语 法: dump [-cnu][-0123456789][-b <区块大小>][-B <区块数目>][-d <密度>][-f <

Python 基础 - Day 4 Learning Note - 模块 - Json &amp; Pickle

Json和Pickle的区别 在python的序列化的两个模块中,json模块是用于字符串和python数据类型间进行转换:另一个pickle模块,是用于python特有的类型(所有数据类型和python的数据类型间进行转换.json是可以在不同语言之间交换数据的,而pickle只在python之间使用.json只能序列化最基本的数据类型,json只能把常用的数据类型序列化(列表.字典.列表.字符串.数字.),比如日期格式.类对象!josn就不行了.而pickle可以序列化所有的数据类型,包括类

JVM监控与调优

一.JVM内存及参数设置 -Xmn新生代内存大小的最大值,包括E区和两个S区的总和,使用方法如:-Xmn65535,-Xmn1024k,-Xmn512m,-Xmn1g (-Xms,-Xmx也是种写法)-Xmn只能使用在JDK1.4或之后的版本中,(之前的1.3/1.4版本中,可使用-XX:NewSize设置年轻代大小,用-XX:MaxNewSize设置年轻代最大值):如果同时设置了-Xmn和-XX:NewSize,-XX:MaxNewSize,则谁设置在后面,谁就生效:如果同时设置了-XX:Ne

linux服务器备份

Linux下的备份技术 1.备份前因考虑的因素 ● 可移植性(即在Red Hat Linux系统下执行的备份在另外一个系统上恢复的能力). ● 是否自动备份. ● 执行备份的周期. ● 需要把归档的备份保存多长时间. ● 用户界面的友好性(决定是否需要选择基于GUI界面的工具还是基于文本的). ● 是否需要使用压缩技术.直接复制或者加密技术. ● 备份介质(需要从价格.性能.存储能力上考虑). ● 是否远程备份或网络备份. ● 是保存一个文件.一个子目录还是整个系统. 2.备份选择的策略 需要确

Java系列笔记 - JVM监控与调优

光说不练假把式,学习Java GC机制的目的是为了实用,也就是为了在JVM出现问题时分析原因并解决之.通过学习,我觉得JVM监控与调优主要的着眼点在于如何配置.如何监控.如何优化3点上.下面就将针对这3点进行学习. (如果您对Java的内存区域划分和内存回收机制尚不明确,那在阅读本文前,请先阅读我的前一篇博客<Java系列笔记(3) - Java 内存区域和GC机制>,在该博客中,详细叙述了Java HotSpot虚拟机(Sun/Oracle JDK系列默认的虚拟机)的内存分配和垃圾回收机制.

python的json模块的dumps,loads,dump,load方法介绍

#Auther Bob#--*--conding:utf-8 --*-- #jshon这个模块就是做序列化处理的,主要用到json模块的四种方法 #1.dumps#2.loads#3.dump#4.load #先介绍dumps方法#通过jshon的dumps的模块可以把特定的对象序列化处理为字符串# import json # l1 = [1,2,3,454]# d1 = {'k1':'v1'}# ret = json.dumps(l1)# print(type(ret))# ret = jso