Xtrabackup操作手册

您所在的位置:网站首页 chronos的意思 Xtrabackup操作手册

Xtrabackup操作手册

2023-06-28 05:34| 来源: 网络整理| 查看: 265

一、说明

本文档为在Linux环境下的MySQL数据库备份工具Xtrabackup的操作使用手册。

二、环境

系统:CentOS 7

数据库:MySQL 5.7

软件版本:percona-xtrabackup-24-2.4.9-1.el7.x86_64

三、描述

Percona-xtrabackup是一款用于MySQL数据库物理热备的备份工具,有2个工具,分别是xtrabakup、innobakupe且只能备份innoDB和xtraDB两种数据引擎的表,而不能备份MyISAM数据表。

四、优点

(1)备份速度快,物理备份可靠

(2)备份过程不会打断正在执行的事务(无需锁表)

(3)能够基于压缩等功能节约磁盘空间和流量

(4)自动备份校验

(5)还原速度快

(6)可以流传将备份传输到另外一台机器上

(7)在不增加服务器负载的情况备份数据

五、备份原理

(1)innobackupex启动后,会先fork一个进程,用于启动xtrabackup,然后等待xtrabackup备份ibd数据文件;

(2)xtrabackup在备份innoDB数据时,有2种线程:redo拷贝线程和ibd数据拷贝线程。xtrabackup进程开始执行后,会启动一个redo拷贝的线程,用于从最新的checkpoint点开始顺序拷贝redo.log;再启动ibd数据拷贝线程,进行拷贝ibd数据。这里是先启动redo拷贝线程的。在此阶段,innobackupex进行处于等待状态(等待文件被创建)

(4)xtrabackup拷贝完成ibd数据文件后,会通知innobackupex(通过创建文件),同时xtrabackup进入等待状态(redo线程依旧在拷贝redo.log)

(5)innobackupex收到xtrabackup通知后哦,执行FLUSH TABLES WITH READ LOCK(FTWRL),取得一致性位点,然后开始备份非InnoDB文件(如frm、MYD、MYI、CSV、opt、par等格式的文件),在拷贝非InnoDB文件的过程当中,数据库处于全局只读状态。

(6)当innobackup拷贝完所有的非InnoDB文件后,会通知xtrabackup,通知完成后,进入等待状态;

(7)xtrabackup收到innobackupex备份完成的通知后,会停止redo拷贝线程,然后通知innobackupex,redo.log文件拷贝完成;

(8)innobackupex收到redo.log备份完成后,就进行解锁操作,执行:UNLOCK TABLES;

(9)最后innbackupex和xtrabackup进程各自释放资源,写备份元数据信息等,innobackupex等xtrabackup子进程结束后退出。

六、安装

# wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.9/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm # yum install -y percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm # rpm -qa |grep xtrabackuppercona-xtrabackup-24-2.4.9-1.el7.x86_64 复制代码

Xtrabackup中主要包含两个工具:

xtrabackup:是用于热备innodb,xtradb表中数据的工具,不能备份其他类型的表,也不能备份数据表结构;

innobackupex:是将xtrabackup进行封装的perl脚本,提供了备份myisam表的能力。 –user= #指定数据库备份用户 –password= #指定数据库备份用户密码 –port= #指定数据库端口 –host= #指定备份主机 –socket= #指定socket文件路径 –databases= #备份指定数据库,多个空格隔开,如–databases=”dbname1 dbname2″,不加备份所有库 –defaults-file= #指定my.cnf配置文件 –apply-log #日志回滚 –incremental= #增量备份,后跟增量备份路径 –incremental-basedir= #增量备份,指上次增量备份路径 –redo-only #合并全备和增量备份数据文件 –copy-back #将备份数据复制到数据库,数据库目录要为空 –no-timestamp #生成备份文件不以时间戳为目录名 –stream= #指定流的格式做备份,–stream=tar,将备份文件归档 –remote-host=user@ip DST_DIR #备份到远程主机 复制代码

基于最小权限创建MySQL用户

mysql> CREATE USER 'bkpuser'@'localhost' IDENTIFIED BY '123456';   #创建用户 mysql> REVOKE ALL PRIVILEGES,GRANT OPTION FROM 'bkpuser';   #回收此用户所有权限 mysql> GRANT RELOAD,LOCK TABLES,RELICATION CLIENT ON *.* TO 'bkpuser'@'localhost';   #授权刷新、锁定表、用户查看服务器状态 mysql> FLUSH PRIVILEGES;   #刷新授权表 复制代码

注意:备份时需启动MySQL,恢复时需关闭MySQL,清空mysql数据目录且不能重新初始化,恢复数据后应该立即进行一次完全备份

七、全量备份恢复

备份:

# innobackupex --user=DBUSER --password=DBUSERPASS --defaults-file=/etc/my.cnf /path/to/BACKUP-DIR/ 复制代码

常用备份:

1.指定数据库备份

# innobackupex --user=DBUSER --password=DBUSERPASS --defaults-file=/etc/my.cnf --databases="db01" /path/to/BACKUP-DIR/ 复制代码

2.指定表备份

# innobackupex --user=DBUSER --password=DBUSERPASS --defaults-file=/etc/my.cnf --databases="db01 table01" /path/to/BACKUP-DIR/ 复制代码

3.压缩备份

innobackupex --user=DBUSER --password=DBUSERPASS --defaults-file=/etc/my.cnf --stream= xbstream /path/to/BACKUP-DIR/ 复制代码

4.备份介质解压

# xbstream -x < full.xbstream -C 指定恢复目录 复制代码

5.安装qpress(qp解压包)

# 解压qpress-11-linux-x64.tar # tar -xvf qpress-11-linux-x64.tar # cp qpress /usr/bin 复制代码

6.解压qp数据包

# innobackupex --decompress --parallel=6 --compress-threads=6 qp介质目录 复制代码

7.批量清理qp数据包

# for f in `find /home/whf/full/ -iname "*\.qp"`; do echo $f && rm -f $f; done 复制代码

恢复:

# innobackupex --apply-log /backups/2018-07-30_11-04-55/ # innobackupex --copy-back --defaults-file=/etc/my.cnf /backups/2018-07-30_11-04-55/ 复制代码

(1) 准备(apply log)完整备份

一般情况,在做好完整备份后,备份集无法立即使用,由于备份集内含有未提交事务,或者已提交未写入数据文件的事务,所以,此时数据文件处于不一致状态。准备(apply log)即是同步未提交和未写入等事务的一致性。

# innobackupex --apply-log /path/to/BACKUP-DIR 复制代码

如果执行正确,其最后输出的几行信息通常如下:

120407 09:01:04 innobackupex: completed OK! 复制代码

(2) 恢复(copy back)完整备份

innobackupex命令会通过物理拷贝备份文件中的相关信息至目标库,相关目录信息通过my.cnf来获取。

恢复过程中不用启动数据库

# innobackupex --copy-back /path/to/BACKUP-DIR 复制代码

(3) 修改恢复文件的属主

在恢复完成后需要确认恢复的文件属主和属组是否为正确的,例如mysql,否则需要修改为正确属主。

chown -R mysql.mysql /mydata/data/ 复制代码

启动数据库确认数据是否恢复

八、增量备份恢复

使用innobackupex进行增量备份,每个InnoDB的页都会包含LSN信息,当数据发生变化页面的LSN也会相应增长,此为innobackupex增量备份的基础,通过上次完备后页面的变化信息实现增量备份。在增量备份前,需要进行一次完整备份,第一次增量备份基于上一次完整备份,此后的增量都是基于上一次的增量备份实现。

基于全量备份的增量备份与恢复

做一次增量备份(基于当前最新的全量备份)

# innobackupex --user=root --password=root --defaults-file=/etc/my.cnf --incremental /backups/ --incremental-basedir=/backups/2018-07-30_11-01-37 复制代码

1. 准备基于全量

# innobackupex --user=root --password=root --defaults-file=/etc/my.cnf --apply-log --redo-only /backups/2018-07-30_11-01-37 复制代码

2. 准备基于增量

# innobackupex --user=root --password=root --defaults-file=/etc/my.cnf --apply-log --redo-only /backups/2018-07-30_11-01-37 --incremental-dir=/backups/2018-07-30_13-51-47/ 复制代码

3. 恢复

# innobackupex --copy-back --defaults-file=/etc/my.cnf /opt/2017-01-05_11-04-55/ 复制代码

解释:

1. 2018-07-30_11-01-37指的是完全备份所在的目录。

2. 2018-07-30_13-51-47指定是第一次基于2018-07-30_11-01-37增量备份的目录,其他类似以此类推,即如果有多次增量备份。每一次都要执行如上操作。

增量备份仅能应用于InnoDB或XtraDB表,对于MyISAM表而言,执行增量备份时其实进行的是完全备份。

准备(prepare)增量备份和整理完全备份不同:

1. 在每个备份上(完整备份和增量备份),将已经提交的事务进行"重放"。"重放"之后,所有的备份数据将合并到完全备份上。

2. 基于所有备份将未提交的事务进行“回滚”。

九、总结

1、 增量备份需要使用参数:--incremental指定需要备份的目录,使用incremental-dir指定全备目录;

2、 进行数据备份时,需要使用参数--apply-log redo-only先合并全备数据目录数据,确保全备数据目录数据的一致性;

3、 再将增量备份数据使用参数--incremental-dir合并到全备数据当中;

4、 最后通过最后的全备数据进行恢复数据,注意,如果有多个增量备份,需要逐一合并到全备数据当中,再进行恢复。

5、 innobackupex全量备份,并指定备份目录路径;

6、 在恢复前,需要使用--apply-log参数先进行合并数据文件,确保数据的一致性要求;

7、 恢复时,直接使用--copy-back参数进行恢复,需要注意的是,在my.cnf中要指定数据文件目录的路径。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3