范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

MySQL常用备份工具流程解析

  下面我们就看一下常见的备份工具,以及目前最流行的 Percona XtraBackup 的备份流程。一、备份工具介绍1.1 常见备份工具介绍
  MySQL 常见的备份工具主要分为三种:逻辑备份,包含 mysqldump 和 Mydumper ;物理备份,包含 Mysqlbackup和Percona XtraBackup;binlog 备份,包含 mysqlbinlog 。
  这里先说一下 binlog 备份,它只是把 binlog 又复制了一份,并且需要在逻辑备份或者物理备份的基础上才能进行数据恢复,无法单独进行数据恢复。(1)逻辑备份:mysqldump
  mysqldump 备份出的文件就是 sql 文件,其核心就是对每个表执行 select ,然后转化成相应的 insert 语句。mysqldump 的备份流程大致如下:对某个库下所有表加读锁;循环备份备份表数据;释放读锁;循环上面三个步骤;备份完毕。
  从上面可以看出在 mysqldump 备份期间,备份到某个数据库时,该数据库下的表都会处于只读状态,无法对表进行任何变更,直到该库下的表备份完毕,这对于线上环境一般是无法接受的。若是指定了--master-data或者 --dump-slave 则会在备份开始时加全局读锁(FLUSH TABLES WITH READ LOCK),直到备份结束。当然我们可以选一个从库进行备份,这样就不会影响线上业务。另外使用 mysqldump 备份还有一个最大的好处,因为备份出来的是 sql 语句,所以它支持跨平台和跨版本的数据迁移或者恢复,这是物理备份无法做到的。
  但是也正是因为 mysqldump 备份出来的是 sql 语句,在使用时要更加注意,否则可能会酿成大祸。例如,使用 mysqldump 常见的问题有:本来迁移部分数据到新实例,结果把原有数据删除了;由于时区问题,发现恢复出来的表和时间相关的数据不对;在主库导入备份数据后,发现从库没有同步;由于字符集问题,发现恢复后数据出现了乱码;...
  所以使用 mysqldump 时一定要了解各个选项的作用,以及确认备份出来的 sql 文件里会有什么操作,会对现有数据造成什么影响。
  Mydumper 原理与 Mysqldump 原理类似,最大的区别是引入了多线程备份,每个备份线程备份一部分表,当然并发粒度可以到行级,达到多线程备份的目的。这里不再单独介绍。(2)物理备份:Percona XtraBackup
  Percona XtraBackup 是 Percona 公司开发的一个用于 MySQL 数据库物理热备的备份工具,是基于 InnoDB 的崩溃恢复功能来实现的。它的基本工作原理如下:在启动时创建一个 redo log 拷贝进程,获取并记录当前的日志序列号 (LSN),从该位点开始持续拷贝有变化的 redo log ;开启 idb 文件拷贝线程,拷贝 ibdata1,undo tablespaces 及所有的 ibd 文件;ibd 文件拷贝结束,通知调用 FTWRL(或加备份锁);备份非 InnoDB 数据(.frm、.MRG、.MYD、.MYI ...... 等文件);备份 slave 和 binlog 相关信息;刷新日志,拷贝最新的 redo log 完成后退出日志拷贝线程;释放全局锁,记录备份元数据等,备份结束。
  Percona XtraBackup 在进行恢复时会应用拷贝的 redo log ,应用已提交的事务,回滚未提交的事物,将数据库恢复到一致性状态。因为 Percona XtraBackup 备份出来的是物理文件,所以在使用备份出的文件进行恢复或者迁移时,不会像 mysqldump 那样会存在很多问题。
  使用 XtraBackup 备份时根据备份参数设置不同,对数据库的变更会造成不同程度的影响,具体影响会在下文分析。(3)备份工具对比
  通过对比发现,XtraBackup 具有对数据库影响小,且能快速恢复的优点,在日常备份中是首选;mysqldump 使用相对更加灵活,但是使用是要注意对数据库原有数据的影响。1.2 备份策略
  备份策略主要有:全量备份和增量备份,再加上 binlog 备份。
  目前去哪儿网数据库备份主要采用 XtraBackup 全量备份 +binlog 备份。数据库的重要级别不同,全量备份的频率不同。备份程序主要架构如下:
  说明:备份调度程序会根据设置的备份策略来调度备份任务;数据库备份采用 XtraBackup 流式备份,直接传输到备份机;备份完成后 apply-log ,这样既可以验证备份的可用性,也在使用备份时减少了 apply-log 时间;压缩备份;binlog 备份是定时执行,使用 rsync 存储到 MFS 存储。二、 XtraBackup备份流程解析
  Percona XtraBackup 是目前备份 MySQL 使用最广泛的工具。在备份过程中,数据库可以进行正常的读写或者其他变更操作,但是偶尔也会遇见备份引起的元数据锁,或提交事务时发现被 binlog lock 阻塞等情况。下面我们就看一下 Percona XtraBackup 的备份流程和加锁时机。
  说明:以下对 Percona XtraBackup 的分析都是基于 2.4.23 的版本,其他版本会略有差别,但是关键步骤基本相同。2.1 拷贝redo日志
  XtraBackup 在备份开始时,会创建一个后台线程,专门用于拷贝数据库的 redo log 。首先 XtraBackup 会扫描每组 redo log 的头部,找出当前的 checkpoint lsn ,然后从该 lsn 后顺序拷贝所有的 redo log ,包括后续新产生的 redo log 。该线程会一直持续到将非事务表完全拷贝完成,才会安全退出。备份日志输出中会记录拷贝开始时的 checkpoint lsn 。日志输出如下:
  2.2 拷贝ibd文件
  在拷贝ibd文件之前,会先扫描数据库的数据文件目录,获取ibdata1,undo tablespaces及所有的ibd文件列表,并会记录相应的 space id,因为在恢复时需要这些 space id来找到对应 doublewrite buffer里页面的内容,以及对应的redo log条目。然后开始循环拷贝ibdata1,undo tablespaces及所有的ibd文件。
  这里可通过设置--parallel进行多线程备份,提高物理文件的拷贝效率。不设置则默认为1。2.3 拷贝非ibd文件
  在所有ibd文件拷贝完成后,XtraBackup开始备份非ibd文件。这一部分的逻辑比较复杂,因为备份非ibd文件前需要加锁,具体是否会加锁主要受到--no-lock 参数设置的影响。2.3.1 no-lock 选项参数说明
  若是设置了--no-lock为TRUE,则不会使用"FLUSH TABLES WITH READ LOCK"去加全局读锁,但是若备份过程中对non-InnoDB表执行了DDL或者DML操作, 这会导致备份的不一致,恢复出来的数据就会有问题。所以是不建议将--no-lock为TRUE,默认值是FALSE,也就是在不指定该选项的情况下会在备份非ibd文件前加全局读锁。
  下面我们结合源码来看看判断是否加全局锁这部分的具体流程逻辑:
  流程图如下:
  总结来看:
  1)若--no-lock为FALSE(默认值),则先施加全局读锁,然后再进行拷贝文件,另外若 --safe-slave-backup 设置为TRUE ,则会在加全局锁之前关闭SQL_THREAD线程;
  2)若--no-lock为TRUE,则不会施加锁,直接进行拷贝文件。2.3.2 加锁处理逻辑
  加锁的逻辑主要由lock_tables_maybe实现,先看一下lock_tables_maybe源代码,如下:
  lock_tables_maybe 函数简化处理流程如下:
  1)若备份实例上已经加锁( LOCK TABLES FOR BACKUP / FLUSH TABLES WITH READ LOCK)或者设置lock-ddl-per-table 则直接返回;
  2)若支持备份锁,则执行LOCK TABLES FOR BACKUP;
  3)若不支持备份锁,则执行 FLUSH TABLES WITH READ LOCK。根据相应选项设置,在执行该操作前会判断是否有执行中的DDL/DML,以及等待超时时间,是否kill 对应的未结束的事务等。
  从上文中我们还看到一个参数--safe-slave-backup ,该参数的主要作用是:
  若是在从库执行的备份操作时设置了该参数,可以防止因从库同步主库操作,而导致XtraBackup长时间请求不到锁而造成备份失败。
  若是设置了 --safe-slave-backup 为TRUE,那么会执行"STOP SLAVE SQL_THREAD",并等待Slave_open_temp_tables 为零才开始拷贝非 ibd 文件,Slave_open_temp_tables 为零说明SQL thread执行的事务都已经完成,这样就能保证备份的一致性。并且此时也不会有在执行的事务阻塞 XtraBackup 施加全局锁。2.4 备份slave和binlog信息
  备份完非 ibd 文件后,将会备份 slave 和 binlog 信息。如果命令行中指定了--slave-info ,则会执行 SHOW SLAVE STATUS 获取复制的相关信息并记录到xtrabackup_slave_info 文件中,主要包含从库同步到的主库的 binlog 位点(Relay_Master_Log_File,Exec_Master_Log_Pos)或者 GTID 值(Executed_Gtid_Set)等。下面是基于 GTID 复制备份时xtrabackup_slave_info 文件记录的复制相关信息:SET GLOBAL gtid_purged="6b7bda9f-15f0-11ec-ba14-fa163ea367a4:1-83, 9841546e-15f0-11ec-9557-fa163e736db4:1";CHANGE MASTER TO MASTER_AUTO_POSITION=1 复制代码如果命令行中指定了 --binlog-info ,则会执行 SHOW MASTER STATUS 获取 Binlog 的位置点信息,并记录到xtrabackup_binlog_info文件中。主要信息包含 当前的 binlog 文件名,binlog 位点以及当前的 GTID 。binlog-info 无需显式指定,因为它的默认值为 AUTO ,如果开启了 Binlog ,则为 ON 。xtrabackup_binlog_info 文件内容如下:
  mysql-bin.000004 2004 6b7bda9f-15f0-11ec-ba14-fa163ea367a4:1-83,9841546e-15f0-11ec-9557-fa163e736db4:1mysql-bin.000004 2004 6b7bda9f-15f0-11ec-ba14-fa163ea367a4:1-83,9841546e-15f0-11ec-9557-fa163e736db4:1 复制代码
  需要注意,在支持备份锁的实例上备份,指定了 --slave-info 或--binlog-info 均会先施加 binlog 备份锁( LOCK BINLOG FOR BACKUP),这会阻塞任何会更改 binlog 位点的操作。2.5 备份结束
  备份完数据库的所有文件和binlog等相关信息,备份工作就基本完成了,之后主要执行的操作如下:
  1)执行"FLUSH NO_WRITE_TO_BINLOG ENGINE LOGS",将所有的redo log刷盘;
  2)停止redo log复制线程;
  3)释放全局读锁(备份锁),binlog锁;
  4)开启SQL_THREAD;
  5)拷贝ib_buffer_pool和ib_lru_dump文件;
  6)生成配置文件backup-my.cnf;
  7)打印备份信息到xtrabackup_info文件,这些信息主要包含备份时使用的参数信息,备份起止时间,binlog位点信息,以及将会回到的lsn点。
  下面是xtrabackup_info记录的部分内容:
  三、Percona XtraBackup和锁相关的参数与操作3.1 相关参数--lock-ddl:若在支持备份锁的实例上指定该选项,则会在备份开始时执行" LOCK TABLES FOR BACKUP ",以阻止所有的 DDL 操作。加锁时间是在拷贝 redo log 的线程创建前,并持续加锁到 dump buffer pool 前释放锁。看一下相关的日志:
  --lock-ddl-per-table:在备份开始时对每个 innodb 表施加元数据锁,防止其上的 DDL 操作。加锁时间也是在拷贝 redo log 的线程创建前,持续到所有备份工作完成后才释放锁。看一下相关的备份日志:
  加锁对应的函数是 mdl_lock_tables ,释放锁对应的函数是 mdl_unlock_all,主要是执行COMMIT,结束 mdl_lock_tables 中开启的显式事务,来释放MDL锁。mdl_lock_tables 流程如下:
  --no-lock 详见 2.3.1 节内容
  上面参数--lock-ddl和--lock-ddl-per-table是在 Percona XtraBackup 2.4.8 之后添加的,因为 MySQL 5.7 新增了一个叫做 Sorted Index Builds 的功能,这会导致某些 DDL 操作不记录重做日志而导致备份失败。使用--lock-ddl或--lock-ddl-per-table 就会在备份开始时施加锁,阻止 DDL 操作。
  另外,若备份时指定了--lock-ddl或--lock-ddl-per-table,则在备份非 ibd 文件时就不是再有加锁操作。3.2 数据库中执行的加锁操作LOCK TABLES FOR BACKUP: 使用新的 MDL 类型锁,用于阻止所有非事务表的 DM L,以及所有类型表的 DDL 操作,但是不影响无锁情况的 select 操作和对事务表的 DML 操作。在 LOCK TABLES FOR BACKUP 下执行 DDL 或者对非事务表执行 DML ,则会被堵塞,执行 show processlist 可以看到被阻塞线程状态为 Waiting for backup lock 。LOCK BINLOG FOR BACKUP: 使用的是另一种新的 MDL 类型锁,用于阻止所有可能更改二进制日志位置或 Exec_Master_Log_Pos 或 Exec_Gtid_Set 的操作。在 LOCK BINLOG FOR BACKUP 下执行任何会更改 binlog 位点的操作都会被阻塞,执行 show processlist 可以看到被阻塞线程状态为 Waiting for binlog lock 。FLUSH TABLES WITH READ LOCK简称(FTWRL) :关闭所有打开的表并使用全局读锁锁定所有数据库的所有表,这时数据库处于只读状态,任何 DDL/DML 操作都会被阻塞。执行 show processlist 可以看到被阻塞线程状态为 Waiting for global read lock 。另外,由于 FTWRL 需要关闭表,如有大查询,会导致 FTWRL 等待,进而导致 DML/DDL 堵塞的时间变长。即使是备库,也有 SQL 线程在复制来源于主库的更新,上全局锁时,会导致主备库延迟。
  注意:LOCK TABLES FOR BACKUP和LOCK BINLOG FOR BACKUP 语句只有在支持备份锁的实例上才会执行,Percona Server for MySQL已经在 5.6.16-64.0 版本开始支持这种更加轻量的备份锁。四、思考
  Q1: 使用 XtraBackup 备份的文件进行恢复时,恢复到哪个时间点? A1:恢复到执行 LOCK BINLOG FOR BACKUP 或 FLUSH TABLES WITH READ LOCK 的时间点,因为这时任何改变 binlog 位点的操作都会被阻塞,redo log和binlog 是一致的。
  Q2: 在开启 binlog 的情况下,MySQL 的奔溃恢复是同时依赖 binlog 和 redo log 这两种日志的,为什么XtraBackup 不用备份binlog?
  A2:因为在备份中有执行LOCK BINLOG FOR BACKUP/FLUSH TABLES WITH READ LOCK,阻止了任何改变binlog位点的操作,这样只需要根据redo log将有commit log 的事务提交,没有commit log的事务进行回滚即可。
  Q3: 使用Percona XtraBackup备份完成后redo的位点是和binlog是一样还是比binlog多一些?
  A3:通过分析备份流程可以发现备份 binlog 位点信息(加binlog锁)是发生在停止 redo 拷贝线程前,而释放锁是在停止 redo 拷贝线之后,所以 redo log 会多一些。锁住了 binlog 保证了在该 binlog 位点前已经提交的事务的 redo log 都有 commit log 的信息,未提交的事物也就没有对应的 commit log 的信息,即便在锁住 binlog 后有 Innodb 表新的 DML 产生的 redo log ,但是事务无法提交,也就没有 commit log 的信息的,最后在回放的过程中对没有 commit log 的事务进行回滚就可以了。
  Q4:Percona XtraBackup什么时候会加锁,以及影响加锁时间长度的因素有哪些?
  A4:上面进行了分析,加锁操作只在备份非 ibd 文件时执行,加锁时长主要和非事务表的数量和大小有关,非事务表的数量越多,体积越大,拷贝文件所用的时间越长,那么加锁时间也就越长。也会和 redo log 生成的速度有关,只是 redo log 刷盘受到多个因素的影响,未及时刷盘的 redo log 一般很小。
  Q5:Percona XtraBackup 和mysqldump选择哪个更好?
  A5:通过上面的的解析,若是整个实例备份,首先选择 Percona XtraBackup ,因为对数据库的影响最小。若只是备份某个库表,这个就要视数据量而定,若数据量不大可以使用 mysqldump 。注意,对数据库做备份时最好选择业务连接最少的从库,因为备份也会消耗一定的资源,避免影响业务。

手机越来越不耐电,只是因为电池老化?或许还跟你这3种习惯有关对于现如今的人们来说,手机是一个具有重要作用的物件,毕竟人们的通讯社交以及多种生活服务都需要通过手机才能完成,手机不仅给人们带来了很大生活的便利,更提高了人们的生活效率。不过由于手机会来了,资金扎堆涌入自动驾驶赛道万亿元市值可期2月28日,自动驾驶卡车技术与运营公司嬴彻科技宣布已完成1。88亿美元的B轮股权融资。红杉中国君联资本联合领投,周大福沄柏资本物产中大集团美团蔚来资本斯道资本博华资本等跟投。嬴彻科自学5个月Java找到了9K的工作,我的方式值得大家借鉴我是去年9月22日才正式学习Java的,因为在国营单位工作了4年,在天津一个月工资只有5000块,而且看不到任何晋升的希望,如果想要往上走,那背后就一定要有关系才行。而且国营单位的想买二手苹果手机怕被坑?教你如何验机想买二手手机怕被坑,看这里就行啦二手手机到底应该怎么验?我花了10分钟写了下面的经验。常用软件爱思或者沙漏,可以从里面看出来问题一般大部分机器都会换电池和前后摄像头,这些都是正常的11。98万起售,搭载插电式混合动力,油耗1。2L,带你看缤越PHEV考虑到使用成本,购车预算,多数消费者都会考虑购买小排量车型,这也是为什么有的车型会推出1。5L1。6L1。2T1。3T1。4T小排量车型的原因。如今市场在向新能源靠拢,不断攻克新的beegovalidation简单使用直接使用packagemainimport(github。comastaxiebeegovalidationlog)typeUserstructNamestringAgeintfu重要!重要!JeecgBoot3。1。0版本发布,快来试试吧项目介绍JeecgBoot是一款企业级的低代码平台!前后端分离架构SpringBoot2。x,SpringCloud,AntDesignVue,Mybatisplus,Shiro,红米note11Epro上架,这价格,红米你变了红米note系列一直是红米最具有性价比的系列,也是红米的销量大头,如今红米note11系列又新增了一位成员,那就是红米note11epro,该机型售价1699元起。该机型一共有三种你知道华为这么多旗舰机中,哪款的综合性能最高吗?现在华为的旗舰机已经发布很多部了,像华为mate系列,华为p系列,华为magic系列,都非常不错。现在我先拿华为最具代表的华为mate40Pro和华为p40Pro对比。华为mate红米Note9上手续航强劲用料良心的合格百元机在2022年5G手机铺天盖地的情况下,于一年前发布的红米Note94G是否能够胜任现在的时代,作为工作机备用机主力机学生机它能不能行。我们来一起看看屏幕方面红米note94G正面是金一南将军讲述任正非真实创业历程,想不到华为是这样的公司作为一家国内外闻名的华为公司老板,金一南将军是这样说的像任正非这样的人,哪儿去找?有多好的运气?他是国家百千万工程吗?他是哪级政府重点扶持他了?他都没有。老任说了我就不会做生意,市
迷你投影仪值不值得买?看完这篇你就知道了近些年,很多人对于投影仪都有需求。只是不确定到底买哪一种更合适?了解了很多的投影知识之后,才发现迷你投影仪是个宝藏产品。它不但体积小巧,方便携带,功能也是非常大。那么在什么地方更适迷你投影仪哪款好?四款迷你投影仪良心推荐随着投影仪迅速发展,投影仪的分类也越来越精细,今天小编偶然在微博上看到有网友在问迷你投影仪什么牌子好迷你投影仪有哪些好的推荐?等等问题,所以今天小编整理了四款比较好用的迷你投影仪,坑!被早教班骗了几万块钱,效果还比不上的百元课前段时间江苏淮安一名1岁多的宝宝近视100多度刷爆网络,原因是父母过早的给孩子用电视进行早教。望子成龙望女成凤是每位父母心底最热切的期盼。早教机构抓住了这个心理,动辄几万块钱的早教鸿蒙OS智能座舱系统发布赛力斯问界M5率先搭载10月22日,华为开发者大会2021(Together)在东莞松山湖举办,期间HarmonyOS3开发者预览版正式发布。同时华为常务董事消费者业务CEO智能汽车解决方案BUCEO余迷你投影仪排行榜TOP10,你最看好哪一款?迷你投影仪最大的特点就是小巧便携,同时非常受欢迎。大多数迷你投影仪的价格在千元左右,几百元的基本只能看个亮,听个响,就不算在内了。迷你投影仪优点多多,可以代替电视电脑的功能,那么迷微型投影仪哪款好?看完这篇你就知道了微型投影仪一般具有便携化微小化娱乐化实用化这些特点。非常贴近人们的生活和娱乐,亲民的价格足以令人心动。其中,微型投影仪主要集中在智能互联网品牌,如当贝坚果小火等,微型投影仪哪款好?最受欢迎的网红投影仪哪款好?看完这篇你就知道了不得不说,随着新兴媒体尤其是互联网的发达与普及,网红的出现以及传播热度的持续走高,进而对人们的生活方式产生了一定的影响。类似于网红餐厅网红同款衣服网红景点网红投影仪等赚足了人们的眼双十一极米投影仪涨价,欺客垃圾骚操作,玩不起就别玩下面是最近双十一买极米投影的网友反馈,问题主要集中在价格上,双十一极米投影仪涨价,比平时还要贵,实在是太恶心了。极米投影垃圾骚操作,这样欺骗消费者真的好吗?只能说极米真的玩不起,做上汽大众ID。3传降价曝其终端价格混乱产品遭退订近日,大众ID。家族销量再创新高,交付量突破1万辆,增长势头强劲,然而,上汽大众ID。系列新车被曝出优惠信息后,这一话题随之被推至舆论风口浪尖。据悉,上汽大众10月经销商混乱降价行为什么年轻人刷剧喜欢快进,倍速播放的优势在哪里?年轻人一般用坐地铁午饭时间或者是睡觉前1小时追剧,为了省时间用倍速播放已经成为常态。倍速播放,是近几年视频网站新添加的功能,用户可使用播放软件加快或减慢视频播放速率,一般在0。5倍产品力不虚AirPods3,OPPOEncoX双十一最香国产降噪耳机10月19日凌晨一点,苹果举办了秋季第二场特别活动,AirPods3正式登场。新款的AirPods3支持空间音频和自适应均衡,尽管AirPods3的实力不错,但1399元的定价还是