MySQL物理备份——xtrabackup工具

本文详细介绍了如何安装xtabackup软件,包括依赖安装和软件安装步骤。接着,文章阐述了xtrabackup的全量备份过程,包括权限设置、备份命令和处理mysql.sock文件的方法。还提到了全库恢复的步骤,强调了恢复前的数据目录清理和权限设置。此外,文章也讨论了增量备份的流程,以及xtrabackup备份和恢复的基本原理。
摘要由CSDN通过智能技术生成

一、xtabackup软件的安装

工具下载网站域名:http://www.percona.com
第一步,安装依赖

 rpm -ivh libev-4.15-3.el7.x86_64.rpm

第二步,安装xrtabackup软件

yum install percona-xtrabackup-24-2.4.7-2.el7.x86_64.rpm -y

二、xtrabackup全量备份

备份思路:
第一部分:使用innobackupex命令对数据库中的所有库进行全量备份
第二部分:预备阶段。需要备份在全量备份过程中产生的xtrabackup_log日志文件记录的数据的更改操作整合到全量备份集

操作:
第一步,准备一个数据库备份账号,开通相应权限

mysql> grant reload,process,lock tables,replication client on *.* to
'admin'@'localhost' identified by '123';
mysql> flush privileges;

说明:
在数据库中需要以下权限:
RELOAD和LOCK TABLES权限:为了执行FLUSH TABLES WITH READ LOCK
REPLICATION CLIENT权限:为了获取binary log位置
PROCESS权限:显示有关在服务器中执行的线程的信息(即有关会话执行的语句的信息),允许使用SHOW

第二步,使用innobackupex命令进行全库备份,备份路径为/full_xtrabackup

# innobackupex --user=admin --password=123 /full_xtrabackup

说明:备份目录默认会自动创建,也可以手动创建

若出现以下报错:
在这里插入图片描述
是因为mysql.sock文件并不在/var/lib/mysql目录下。而自动连接/var/lib/mysql目录下的mysql.sock文件有两个原因:一是在/etc目录下还有my.cnf文件,影响了innobackupex的执行。(my.cnf配置文件指定了mysql.sock文件的路径,考虑安装mysql时,选择的路径不同,my.cnf配置文件也有差异,例如我的配置文件路径为/mysql_3306/my.cnf,指定socket文件路径为/tmp/mysql.sock)二是innobackupex拥有自己的默认配置,默认读取了/var/lib/mysql/mysql.sock文件。
解决方案有两个:
方案1:创建软链接,目标路径为/var/lib/mysql/mysql.sock

# mkdir /var/lib/mysql
# ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock

方案2:在innobackupex中添加一个-S选项,执行套接字

# innobackupex -S /tmp/mysql.sock --user=admin --password=123 /full_xtrabackup

第三步,预备阶段,把备份这段时间内产生的日志整合到全量备份中

# innobackupex --user=admin --password=123 --apply-log --redo-only /full_xtrabackup/2023-04-19_18-38-05

--apply-log :整合日志
--redo-only : 表示只应用已提交的事务,不回滚未提交的事务,成功提交了事务的,写入磁盘的文件

三、xtrabackup全库恢复

快速恢复数据库中的数据

# innobackupex --defaults-file=/mysql_3306/my.cnf --copy-back/full_xtrabackup/2023-04-19_18-38-05

如果没有指定/mysql_3306/my.cnf配置文件路径,会报错:
在这里插入图片描述
是因为innobackupex工具无法找到MySQL中的数据目录,要使用"–defaults-file"把my.cnf配置文件传递给innobackupex,让其自动识别这个文件中的datadir

恢复之前,data目录需为空

# rm -rf /mysql_3306/data/*

否则会报错
在这里插入图片描述

启动MySQL,测试其是否正常

# service mysql_3306 start

需要注意的是,恢复数据时,一定要记得更改/mysql_3306/data目录下的文件拥有者以及所属组权限,否则mysql无法启动
在这里插入图片描述
需要添加权限后才嫩正常启动

# chown -R mysql.mysql /mysql_3306/data

四、xtrabackup增量备份

这里的增量备份有一个前提,就是必须有全量备份。
增量备份是备份在全量备份完成后,数据库的数据又有新的增删改的这部分数据。
全面我们已经完成了全量备份,现在开始增量备份。
第一步,增量备份,增量备份的目标路径为/incremental

# innobackupex --user=admin --password=123 --incremental /incremental --incremental-basedir=/full_xtrabackup/2023-04-19_18-38-05

选项说明:
 --incremental: 增量备份目录/incremental
 --incremental-basedir:用来说明这个增量是相对于哪个全量的目录/full_xtrabackup/2023-04-19_18-38-05

第二步,预备阶段,把增量备份产生的备份集和日志信息整合到全量的备份集中

innobackupex --user=admin --password=123 --apply-log-only /full_xtrabackup/2023-04-19_18-38-05 
--incremental-dir=/incremental/2023-04-20_16-58-10

--redo-only :如果你有多次增量备份,除了最后一个不用加redo-only,其他的增量应用都要加

数据的恢复与之前相同

innobackupex --defaults-file=/mysql_3306/my.cnf --user=admin --password=123 --copy-back /full_xtrabackup/2023-04-19_18-38-05

五、拓展

1 工具xtrabackup备份介绍:

它是一个第三方的工具
xtrabackup工具的优缺点:
优点:

  • 备份过程快速、可靠的(因为物理备份)
  • 物理备份可靠性要高于逻辑备份,因为物理备份是拷贝的文件
  • 支持增量备份,更为灵活
  • 备份过程不会打断执行的事务;
  • 能够基于压缩等功能节约磁盘空间和流量;
  • 自动实现备份的检验;
  • 还原的速度快;逻辑恢复速度比较慢,原因是要执行里面的sql语句

缺点:

  • 只能对innodb表做增量备份,myisam表增量备份实际是全量备份
  • innobakupex备份的Myisam表的时候,需要对表进行加锁 read lock锁,阻塞写的操作。若备份是从库上进行会影响主从同步,造成同步的延时。对innodb表备份的时候不会阻塞读写操作。

2 xrabackup备份原理

第1步:innobakupex会启动一个叫xtabackup_log 后台检测进程,实时检测mysql的redo_log这个日志文件的变化,一旦redo日志有新的写入,立刻将日志信息写入xtrabackup_log 中

扩展:redo_log日志
事务日志或者称之为redo日志,在mysql中默认以ib_logfile0, ib_logfile1名称存在

第2步:物理拷贝innodb的数据文件和系统表空间文件idabasta1到对应的一个默认的时间戳的目录中
第3步:复制结束后,执行flush table with read lock操作 进行全库锁表的准备,准备备份非innodb文件
第4步:物理复制.frm .myd .myi 等非innodb引擎文件到备份目录中
第5步:查看二进制日志的位置
第6步:解锁表unlock tables
第7步:停止xtabackup的进程

3 xtabackup备份恢复原理

在这里插入图片描述
①启动xtrabackup_log进程,检测mysql的redo_log日志,将变化写入自己的xrabackup_log 日志中
②拷贝物理文件到备份目录中(中午12点)/backup/数据文件
③拷贝完成之后停止xtrabackup_进程
注意:此时备份的数据不能只有用于恢复,因为没有12点到12点半的备份过中的数据
④预备阶段(将备份期间xtrabackup_log日志中记录的数据更改操作应用到12点的备份集中)
⑤预备阶段结束后的备份集的数据是备份结束点12:30的数据,此时就可以用于恢复了。

4 备份恢复的具体文字描述(了解)

①InnoDB内部维护一个redo日志文件,我们也可以叫做事务日志文件。事务日志文件会存储每一个innodb
表数据的记录和修改。当innodb启动的时候,会检测数据文件和事务日志,并执行两个步骤:它应用以及提交的事务日志到数据文件
提交:commit ,这个动作叫做前滚,并将修改过但是没有提交的数据进行回滚操作。
②xtrabackup在启动时候会记住(LSN) log squence number,并且付诸所有的数据文件。复制这个过程是需要一定的时间,所以这个期间如果数据文件有所改动,那么将会使得数据库处于不同的 时间点,这个时候xtrabackup会启动一个后台进程,用于监控事务日志,并从事务日志复制最新的修改。xtrabackup会持续的做这个动作,是因为事务日志会轮转重复写入,并且事务日志可以被重用。所以xtabackup自启动后,就不停地将事务日志的每个数据文件的修改都记录下来。
③上面就是xrabackup的备份过程,接下来的预备过程。xtrabackup使用之前复制的事务日志信息,对各个数据文件进行灾难恢复。当这个过程结束后,数据库就回复还原了。
④以上的过程xtracbackup的编译二进制程序中实现。程序innobackupex可以允许我们备份myisam表和frm文件。innobackupex会启动xtracbackup,直到xtracbackup复制数据文件后,然后执行flush tables with read lock 来阻止写入操作并且把myisam表数据刷到硬盘上,之后复制myisam数据文件,最后释放锁。
⑤备份Myisam表和Innodb最终会处于一致,在准备过程结束后,innodb表数据已经前滚到整个备份的结束点,而不是回滚到xrabackup刚开始的点,这个时间点和lush tables with read lock的时间点相同,所以myisam表和innodb表的数据是同步的。
Innodb的准备过程可以称之为恢复(recover),myisam的数据复制过程叫做还原。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值