2016 - 2024

感恩一路有你

mysql还原备份数据不完整 Mysql实时备份实现方法?

浏览量:2916 时间:2023-03-29 09:56:35 作者:采采

Mysql实时备份实现方法?

数据备份是数据容灾的最后一道防线。即使是两地三中心的架构,备份依然重要。如果备份出现问题,备份过程中交易业务会受到影响,备份数据无法恢复,这也是企业无法承受的。因此,选择合适的备份工具尤为重要。

每个企业数据库都有自己的备份工具。MEB(MySQL企业备份)是MySQL企业版中最重要的工具之一,是面向企业客户的数据备份方案。

Xtrabackup一直作为MEB的开源备胎存在,从MySQL 8.0开始情况可能会有所不同。

由于MySQL 8.0的新功能,如备份锁、重做日志归档和页面跟踪,MEB备份/恢复体验将会更好。目前xtrabackup还不支持这些功能。

MySQL企业版还有哪些功能?

功能1:备份锁

在8.0之前,xtrabackup或MEB用于物理备份。为了确保备份期间InnoDB引擎表与其他引擎数据文件和binlog日志的一致性,我们设置了一个全局读锁,然后复制非InnoDB文件。在此期间,MySQL将变为只读,数据无法写入。桌子越多,花费的时间就越长。如果在没有rsync参数的情况下使用xtrabackup,frm文件会被一个一个的复制,加锁时间会更长,对业务影响很大。

我曾经遇到过在一个虚拟机中部署超过12,000个表的情况。当时用的是xtrabackup,备份脚本被锁了十几分钟,但是MEB没有这样的问题。

MySQL 8.0支持轻量级备份锁lock实例进行备份,数据字典由InnoDB重构存储。如果没有创建非InnoDB表,MEB会默认使用备份锁获取binlog日志的一致性位置,阻止DDL操作,但不会影响DML操作。

只有InnoDB表,只有备份锁。

如果有一个非InnoDB表,请将其全局锁定。

功能2:重做日志归档

MEB可以做在线热备,备份时不影响数据库读写。这样使用InnoDB事务日志在备份过程中持续监控重做日志的变化,读取增量变化,写入ibbackup_logfile,这样就不需要锁定,保证备份的一致性。(非InnoDB文件需要读锁定副本)

如果备份时数据库写负载特别重,而ibbackup_logfile写速度慢,重做日志大小不大,就很有可能出现。ibbackup _ logfile can 跟不上重做日志记录的生成速度。如果重做日志空间不够,日志文件需要被覆盖,所以可以 t写入ibbackup_logfile将会丢失,导致备份失败。

MEB 4.1对此进行了优化,将重做日志的处理线程拆分成多线程进行协作,提高了处理重做日志的效率,降低了重做日志覆盖导致备份失败的概率。但是重做日志的添加速度和ibbackup_logfile的写入速度差距太大,问题还是会出现。

MySQL 8.0.17支持重做日志归档,彻底解决了这个问题。备份前,设置innodb_redo_log_archive_dirs,并指定重做日志归档目录。备份MEB时,会自动启动日志归档,检查点时会将旧记录归档到该目录,然后从归档文件中读取重做日志记录,从而避免可能因覆盖而导致的重做记录丢失。

注意:innodb_redo_log_archive_dirs不能在数据目录中,目录权限要求是700。

功能3:页面跟踪

页面跟踪是为了优化增量备份的效率,减少不必要的数据页面扫描。

增量备份目前有三种扫描模式:

Page-track:使用LSN来精确地跟踪自上次备份以来修改过的页面,并且只复制这些页面,这是最快的。

Optimal:扫描自上次备份以来修改过的InnoDB数据文件,找出并复制修改过的页面。根据系统时间的不同,使用时会有一些限制。

全扫描:扫描所有InnoDB数据文件,找出并复制自上次备份以来修改过的页面是最慢的。

1.使用页面跟踪增量备份,您需要首先安装备份组件。

2.在完全准备好之前打开页面跟踪。

3.完全备份后,进行增量备份时,指定如果满足页面跟踪条件,则默认使用page-track模式,否则使用全扫描模式,也可以指定- incrementalpage-track。

增量基础有三个选项。

Last_backup:在之前备份的基础上,之前的备份可以是附加备份,也可以是完全备份。这样所有的备份之间可能会有多次添加,每次的增量可能都比较小,但是恢复的时候需要一次一次的合并。

Last_full_backup:基于之前的完整备份,添加的。这样以后备份会更大,但恢复时只需要合并最后一次增量备份。

Dir:基于以前的备份目录。之前的备份可以是附加备份,也可以是完整备份。

与全扫描和页跟踪相比,当改变的页数小于总页数的50%时,备份效率至少可以提高一倍。

Page-track模式磁盘读写平衡,表示读写都是修改页面。

全扫描模式磁盘读写差别很大,表示读取了很多未修改的页面。

mysql删除的数据库怎么还原?

在求解过程中,进行了以下尝试:

1.如果开启了日志,mysqlbinlog可以直接使用日志进行恢复。

2.如果删除了整个表而不是表中的部分数据,可以尝试在删除后立即用磁盘数据恢复软件恢复。

(因为删除表后会删除文件,表的部分数据也会被删除,但是文件还是存在的。)

3.找一家数据恢复公司,用工具分析ibdata1。(分析过程一页一页的参考,看有没有历史记录。在了解数据表结构的前提下,当数据库损坏,除了ibdata1外无常使用时,应尝试使用ibdata1恢复数据,而不是删除表数据后再恢复。

(实际上,该文件用于存储现有的表数据,但也可以设置为每个表一个文件。)

有两个文件,ib_logfile0和ib_logfile1。其实这两个文件记录了Mysql的一些事务日志,是Mysql自己使用的。这个文件用文本工具打开后,有大量,但是可以找到少量删除数据的插入记录。几个通过前后语句找出原文,最后通过事务日志恢复被删除的文件。注意:使用事务日志进行恢复有几个先决条件。

1.知道被删除数据的大概位置,不要 不要看这里,新的数据不断地入那里。

2.因为有大量,所以适合找少量数据,而不是用于大量数据的恢复,浪费体力。

3.如果二进制日志没有打开,也没有备份,那么只能用这种恢复。

备份 日志 数据 文件 MEB

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。