首页 > 其他分享 >Xtrabackup 不备份 binlog 怎么保证一致性?

Xtrabackup 不备份 binlog 怎么保证一致性?

时间:2024-05-24 09:10:22浏览次数:17  
标签:binlog 事务 58 备份 00 Xtrabackup 08

公司大佬出的考核题中有个有意思的问题:

已知:

MySQL 的内部两阶段提交,是为了解决 binlog 和 redo log 的一致性(在 crash recovery 的过程中, 如果发现某个事务的 redo log 已经完成 prepare 阶段, 但未完成 commit,那么会验证该事务是否在 binlog 中,如存在,则进行提交,否则进行回滚)。

又已知:

Xtrabackup 在恢复备份后,会进行类似于 crash recovery 的动作(将备份的 redo log 的内容回放到数据中, 并对事务进行提交/回滚)。

问题:

那么Xtrabackup 为什么不需要备份 binlog 文件?想了一下好像不是能一句话说清楚的,我来尝试解答下。

解答:

备份时全局锁阶段做的操作:

2020-08-17T09:58:36.167905+08:00         2116 Query     FLUSH TABLES WITH READ LOCK
2020-08-17T09:58:36.490928+08:00 2116 Query SHOW VARIABLES
2020-08-17T09:58:36.498670+08:00 2116 Query SHOW SLAVE STATUS
2020-08-17T09:58:36.499435+08:00 2116 Query SHOW MASTER STATUS
2020-08-17T09:58:36.499747+08:00 2116 Query SHOW VARIABLES
2020-08-17T09:58:36.503341+08:00 2116 Query FLUSH NO_WRITE_TO_BINLOG ENGINE LOGS
2020-08-17T09:58:36.704273+08:00 2116 Query UNLOCK TABLES

这里最主要是要保证两点:

1、非事务数据之间一致性;

2、数据和 binlog 位点的一致性。

其中 FLUSH NO_WRITE_TO_BINLOG ENGINE LOGS,是防止 innodb_flush_log_at_trx_commit 不等于 1 ,redo log没有刷到磁盘。而 SHOW MASTER STATUS 则是为了获取 binlog 位点。

关键在:xtrabackup 只需要保证“数据和 binlog 位点的一致”,而不是“数据和 binlog 的一致”。crash recovery 过程要保证“数据和binlog的一致”,因为 crash 后不能出现事务重做提交而 binlog 没记录的情况,这样会导致从库丢失数据。

那备份需要考虑的是什么?有两点:

1、备份恢复后,再基于 binlog 做精确恢复时,–start-position 的位置是正确的,不会重放、漏掉事物;

2、备份恢复后,作为从库向主库复制数据时,复制起始位置是正确的,不会重放、漏掉事物。

其实这两点都一样,就是要保证备份时 “数据和 binlog 位点的一致”。xtrabackup 是怎么实现的呢?首先我们得知道事务二阶段提交过程中的3个队列 flush、sync、commit 都有排他锁,一个大事务 commit 可能需要几秒钟,那么此时执行 FTWRL 是会被阻塞的,commit 结束后才能取得全局锁,取得全局锁后,执行 commit 会被阻塞:

 

 

这保证了 xtrabackup 备份的 redo log 中只有两种事务:已经完成提交的,和还没开始提交的(未执行 commit 的事务可能被后台线程刷盘),不会出现 prepare 状态的事务。另外还有一个知识点:GTID 的生成和写 binlog 缓存是在二阶段提交的 binlog flush 阶段做的。结合起来则说明:FTWRL 后 执行 show master status 获取 binlog 位点,只有完成提交的事务才会在其中,所以这保证了 binlog 位点和 binlog 的一致。

所以在 xtrabackup 的恢复过程,不需要处理 prepare 状态的事务,也就不需要再验证该事务是否在 binlog 中了。

来源:

http://www.shujuyr.com/2752.html

标签:binlog,事务,58,备份,00,Xtrabackup,08
From: https://www.cnblogs.com/shujuyr/p/18209863

相关文章

  • Ubuntu下(跨机)文件、文件夹的拷贝、删除、重命名、移动、备份
    同机操作拷贝命令格式:cp-r源文件目的文件1示例操作:cp-r/home/folderA/usr参数r是指连同源文件中的子目录一同拷贝,就把folderA拷贝到了usr下面2示例操作:cp-r/home/folderA/*/usr/folderA操作将文件夹/home/folderA下面的所有文件全部拷贝到了/usr/folderA......
  • LTO磁带备份存储器每一代制造年份
    LTO(LinearTape-Open)磁带机器是一种用于数据存储的磁带技术。以下是不同LTO代的发布时间:1.LTO-1:2000年2.LTO-2:2003年3.LTO-3:2005年4.LTO-4:2007年5.LTO-5:2010年6.LTO-6:2012年7.LTO-7:2015年8.LTO-8:2017年9.LTO-9:2020年请注意,随着技术的发展,LTO技术的新一代产品......
  • 如何自动(定时/间隔/重复)执行 同步文件、备份打包加密压缩文件
    首先,需要用到的这个工具:度娘网盘提取码:qwu2蓝奏云提取码:2r1z 参考下列两个之前发布的教程结合使用即可:《快捷自由定时重启、注销、关机》《如何从多个文件夹内转移全部文件(忽略文件夹的结构)(进行复制)(再打包)》就是先设定好勾选对'来源路径’Zip打包,并且勾选备份模式备份......
  • SQL Server 2012提供了多种备份和还原数据库的方法,包括以下几种:
    SQLServer2012提供了多种备份和还原数据库的方法,包括以下几种:SQLServerManagementStudio(SSMS):SSMS是一个支持图形用户界面的工具,可以通过它备份和还原整个数据库或特定的数据表、视图等。在SSMS中,可以通过右键单击数据库并选择“任务”>“备份”或“还原”来完成操作......
  • vsftp2配置文件备份
    vsftp2文件:#/etc/pam.d/vsftpd#%PAM-1.0#这一行是注释,以%开头#PAM配置的版本号authrequiredpam_unix.so#使用系统密码文件进行认证accountrequiredpam_unix.so#使用系统密码文件进行账户管理vsftp.conf文件:#/etc/vsftpd.conf#允许匿名用......
  • Centos Mysql 主从备份
    1、主库设置my.cnfserver_id=2必须唯一binlog-do-db=abo-assist备份的数据库log-bin=mysql-bin开启binlog创建同步账号并授权CREATEUSER'repl'@'%'IDENTIFIEDWITH'mysql_native_password'BY'123456';GRANTREPLICATIONSLAVEON.TO&#......
  • LDAP数据备份与恢复
    一、命令形式以整体备份(迁移)来示范1.1说明使用命令:导出---slapcat导入---slapaddopenldap的数据目录是/var/lib/ldap/备份可以通过直接备份/var/lib/ldap/文件夹,恢复也是直接使用备份的文件夹替换就行,此处不做演示下面使用命令行形式进行演示1.2导出数据文件]......
  • 容灾与备份区别、灾备技术、容灾体系规划
    1.容灾备份的区别容灾(DisasterTolerance):就是在上述的灾难发生时,在保证生产系统的数据尽量少丢失的情况下,保持生存系统的业务不间断地运行。容错(FaultTolerance):指在计算机系统的软件、硬件发生故障时,保证计算机系统中仍能工作的能力。区别:容错可以通过硬件冗余、错误检查和......
  • mysql容器的定时备份脚本,有二种方法
    mysqldump[root@localhostnode]#cat/root/mysqlbeifen.sh#!/bin/bash#定义参数CONTAINER_NAME="mysql"HOST_BACKUP_DIR="/bak"REMOTE_MACHINE_IP="192.168.0.29"REMOTE_TARGET_DIR="/bak/cd"MYSQL_USER="root"M......
  • ElasticSearch系列---【备份或重命名索引】
    备份或重命名1.问题描述我们原有的索引main-data-202403,字段不足,需要新加入字段,原有索引不用了,但怕后面业务又需要这些数,所以我们需要新建一个索引bak-main-data-202403,把main-data-202403迁移过去,删除原索引main-data-202403,再新建加入了新字段的同名索引main-data-202403,其......