xtrabackup 数据库备份工具是由percona提供的mysql数据库备份工具,目前惟一开源的能够对innodb和xtradb数据库进行热备的工具

Percona XtraBackup 2.4 - Documentation

Percona XtraBackup is an open-source hot backup utility for MySQL - based servers that doesn’t lock your database during the backup.

It can back up data from InnoDB, XtraDB, and MyISAM tables on MySQL 5.1 [1], 5.5, 5.6 and 5.7 servers, as well as Percona Server for MySQL with XtraDB.

For a high-level overview of many of its advanced features, including a feature comparison, please see About Percona XtraBackup.

Whether it is a 24x7 highly loaded server or a low-transaction-volume environment, Percona XtraBackup is designed to make backups a seamless procedure without disrupting the performance of the server in a production environment. Commercial support contracts are available.
  • 由于场景限制,以下内容为Percona XtraBackup 2.4版本的内容

xtrabackup 特点

  1. InnoDB热备份、增量备份支持
  2. 可直接备份数据到其他数据库服务器上
  3. 备份MySQL过程不增加服务器负载
  4. 备份还原过程快速、可靠
  5. 备份过程不会打断正在执行的事务
  6. 能够基于压缩等功能节约磁盘空间和流量
  7. 自动实现备份检验
  8. 基于时间点恢复

备份生成的相关文件

使用innobackupex备份时,其会调用xtrabackup备份所有的InnoDB表,复制所有关于表结构定义的相关文件(.frm)、以及MyISAM、MERGE、CSV和ARCHIVE表的相关文件,同时还会备份触发器和数据库配置信息相关的文件。这些文件会被保存至一个以时间命名的目录中,在备份时,innobackupex还会在备份目录中创建如下文件:

  • xtrabackup_info:文本文件,innobackupex工具执行时的相关信息,包括版本,备份选项,备份时长,备份LSN(log sequence number日志序列号),BINLOG的位置
  • xtrabackup_checkpoints:文本文件,备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN范围信息,每个InnoDB页(通常为16k大小)都会包含一个日志序列号LSN。LSN是整个数据库系统的系统版本号,每个页面相关的LSN能够表明此页面最近是如何发生改变的
  • xtrabackup_binlog_info:文本文件,MySQL服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置,可利用实现基于binlog的恢复
  • backup-my.cnf:文本文件,备份命令用到的配置选项信息
  • xtrabackup_logfile:备份生成的二进制日志文件

xtrabackup 安装

wget -P /tmp/ https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.22/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.22-1.el7.x86_64.rpm

yum -y localinstall /tmp/percona-xtrabackup-24-2.4.22-1.el7.x86_64.rpm qpress

# rpm -ql percona-xtrabackup-24.x86_64
/usr/bin/innobackupex
/usr/bin/xbcloud
/usr/bin/xbcloud_osenv
/usr/bin/xbcrypt
/usr/bin/xbstream
/usr/bin/xtrabackup
/usr/lib64/xtrabackup/plugin/keyring_file.so
/usr/lib64/xtrabackup/plugin/keyring_vault.so
/usr/share/doc/percona-xtrabackup-24-2.4.22
/usr/share/doc/percona-xtrabackup-24-2.4.22/LICENSE
/usr/share/man/man1/innobackupex.1.gz
/usr/share/man/man1/xbcrypt.1.gz
/usr/share/man/man1/xbstream.1.gz
/usr/share/man/man1/xtrabackup.1.gz

xtrabackup 用法

https://www.percona.com/doc/percona-xtrabackup/LATEST/genindex.html

  1. 备份:对数据库做完全或增量备份
  2. 预准备: 还原前,先对备份的数据,整理至一个临时目录
  3. 还原:将整理好的数据,复制回数据库目录中

1 备份

# innobackupex --help
--user:#该选项表示备份账号
--password:#该选项表示备份的密码
--host:#该选项表示备份数据库的地址
--databases:#该选项接受的参数为数据库名,如果要指定多个数据库,彼此间需要以空格隔开;
如:"xtra_test dba_test",同时,在指定某数据库时,也可以只指定其中的某张表。
如:"mydatabase.mytable"。该选项对innodb引擎表无效,还是会备份所有innodb表
--defaults-file:#该选项指定从哪个文件读取MySQL配置,必须放在命令行第一个选项位置
--incremental:#该选项表示创建一个增量备份,需要指定--incremental-basedir
--incremental-basedir:#该选项指定为前一次全备份或增量备份的目录,与--incremental同时使用
--incremental-dir:#该选项表示还原时增量备份的目录
--include=name:#指定表名,格式:databasename.tablename

2 预备份

# innobackupex --apply-log [option] BACKUP-DIR
--apply-log:#一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处理不一致状态。此选项作用是通过**回滚未提交的事务及同步已经提交的事务至数据文件使数据文件处于一致性状态**
--use-memory:#和--apply-log选项一起使用,当prepare 备份时,做crash recovery分配的内存大小,单位字节,也可1MB,1M,1G,1GB等,推荐1G
--export:#表示开启可导出单独的表之后再导入其他Mysql中
--redo-only:#此选项在prepare base full backup,往其中合并增量备份时候使用,但不包括对最后一个增量备份的合并

3 还原

innobackupex --copy-back [选项] BACKUP-DIR
innobackupex --move-back [选项] [--defaults-group=GROUP-NAME] BACKUP-DIR --copy-back:#做数据恢复时将备份数据文件拷贝到MySQL服务器的datadir
--move-back:#这个选项与--copy-back相似,唯一的区别是它不拷贝文件,而是移动文件到目的地。这个选项移除backup文件,用时候必须小心。使用场景:没有足够的磁盘空间同事保留数据文件和Backup副本
--force-non-empty-directories #指定该参数时候,使得innobackupex --copy-back或--move-back选项转移文件到非空目录,已存在的文件不会被覆盖。如果--copy-back和--move-back文件需要从备份目录拷贝一个在datadir已经存在的文件,会报错失败

4 其他

还原注意事项

  1. datadir 目录必须为空。除非指定innobackupex --force-non-empty-directorires选项指定,否则--copy-back选项不会覆盖
  2. 在restore之前,必须shutdown MySQL实例,不能将一个运行中的实例restore到datadir目录中
  3. 由于文件属性会被保留,大部分情况下需要在启动实例之前将文件的属主改为mysql,这些文件将属于创建备份的用户, 执行chown -R mysql:mysql /data/mysql,以上需要在用户调用innobackupex之前完成

xtrabackup实现完全备份及还原

1 安装xtrabackup备份工具

wget -P /tmp/ https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.22/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.22-1.el7.x86_64.rpm

yum -y localinstall /tmp/percona-xtrabackup-24-2.4.22-1.el7.x86_64.rpm qpress
# install qpress error see PS:1

2 完全备份

mkdir /backup
xtrabackup -uroot -p123456 --backup --target-dir=/backup/base

3 预准备数据

释义参见PS:4

# scp -r /backup/  目标主机:/    # 拷贝数据到还原主机上
# 预准备:确保数据一致,提交完成的事务,回滚未完成的事务
xtrabackup --prepare --target-dir=/backup/base

4 还原数据

# 1 复制到数据库目录
## 数据库目录必须为空,MySQL服务不能启动,必要时可使用 rm  -rf /var/lib/mysql/*
xtrabackup --copy-back --target-dir=/backup/base # 2 还原文件属性
chown -R mysql:mysql /var/lib/mysql/ # 3 启动数据库服务验证
service mysqld start

xtrabackup增量备份及还原

备份操作

# 创建备份根目录
mkdir /backup # 第一次完全备份
xtrabackup -uroot -p123456 --backup --target-dir=/backup/base
# 第一次增量备份
xtrabackup -uroot -p123456 --backup --target-dir=/backup/inc1 --incremental-basedir=/backup/base
# 第二次增量备份
xtrabackup -uroot -p123456 --backup --target-dir=/backup/inc2 --incremental-basedir=/backup/inc1 # 拷贝备份数据到目标机器上准备还原
scp -r /backup/* 目标主机:/bakcup/

还原操作

# 预准备完成备份,此选项--apply-log-only 不回滚未完成的事务
xtrabackup --prepare --apply-log-only --target-dir=/backup/base
# 合并第1次增量备份到完全备份
xtrabackup --prepare --apply-log-only --target-dir=/backup/base --incremental-dir=/backup/inc1
# 合并第2次增量备份到完全备份,最后一次备份的还原不需要加选项--apply-log-only
xtrabackup --prepare --target-dir=/backup/base --incremental-dir=/backup/inc2
# 复制到数据库目录
xtrabackup --copy-back --target-dir=/backup/base
# 按需还原文件属性
chown -R mysql:mysql /var/lib/mysql
# 启动服务
service mysqld start

xtrabackup单表导出和导入

#导出
# 1 单表备份
innobackupex  -uroot -p123456 --include='hellodb.students' /backup
# 2备份表结构
mysql -e 'show create table hellodb.students' > student.sql
# 3删除表
mysql -e 'drop table hellodb.students' # 导出数据
# 4 innobackupex  --apply-log --export /backups/2000-01-01_01-01-01/
# 5 创建表
mysql>CREATE TABLE `students` (
`StuID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`Name` varchar(50) NOT NULL,
`Age` tinyint(3) unsigned NOT NULL,
`Gender` enum('F','M') NOT NULL,
`ClassID` tinyint(3) unsigned DEFAULT NULL,
`TeacherID` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`StuID`)
) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8
# 6 删除表空间
alter table students discard tablespace;
# 7 cp /backups/2000-01-01_01-01-01/hellodb/students.{cfg,exp,ibd} /var/lib/mysql/hellodb/
# 8 chown -R mysql.mysql /var/lib/mysql/hellodb/
# 9 mysql>alter table students import tablespace;

PS

1. install qpress

To be able to make compressed backups, install the qpress package

wget http://www.quicklz.com/qpress-11-linux-x64.tar
tar xvf qpress-11-linux-x64.tar
cp qpress /usr/bin

2. 查看xtrabackup备份相关文件

cat /backup/inc1/xtrabackup_info
cat /backup/inc1/xtrabackup_checkpoints
cat /backup/inc1/xtrabackup_binlog_info

3.旧版xtrabackup备份指令

# 备份
mkdir /backup/inc{1,2}
innobackupex  --incremental /backup/inc1 --incremental-basedir=/backup/2000-01-01_01-01-01 # (完全备份生成的路径)
innobackupex  --incremental /backup/inc2 --incremental-basedir=/backup/inc1/2000-01-01_01-02-02 #(上次增量备份生成的路径) # 预准备
innobackupex --apply-log --redo-only /data/2000-01-01_01-01-01/
innobackupex --apply-log --redo-only /2000-01-01_01-01-01/ --incremental-dir=/data/inc1/2000-01-01_01-02-02
innobackupex --apply-log /data/2000-01-01_01-01-01/ --incremental-dir=/data/inc2/2000-01-01_01-03-03/ # 还原
innobackupex  --copy-back /data/2000-01-01_01-01-01/

4. 预准备数据回滚理解

基于xtrabackup的备份原理,热备份基于数据库的lLSN事件记录判断数据记录是否提交成功落盘,每次备份只要确认哪些事务被成功提交

所以每次的增量备份都把这些记录还原到总的预准备数据中,不需要把准备的数据中未提交的事务回滚,后续备份中有中断的事务的记录可以补全半提交事务

最后一次增量备份添加进入总的预准备的数据中需要回滚未提交的事务,因为后面没有关于未提交事务的信息,也就需要回滚未提交的,以免产生数据冲突,然后才可以直接应用数据

5.结合binlog文件实现高精度数据恢复

结合PS:4所述,最终还是会有部分未执行完全的事务被丢弃,也就是有部分数据被丢弃,如果需要高精度的数据还原,就需要结合binlog做高精度还原

# 查看备份文件中的binlog文件名(确认预备份文件备份记录到什么位置)
cat xtrabackup_binlog_info # 找到对于故障数据库的对应binlog文件,并导出增量sql
mysqlbinlog /backup/xxx-bin.000088 --start-position=xxxxx > /tmp/inc.sql # 关闭二进制binlog日志,还原增量数据
show master logs;
set sql_log_bin=off;
source /tmp/inc.sql
set sql_log_bin=on;

mysql数据库-备份与还原-Percona XtraBackup 2.4备份工具使用的更多相关文章

  1. ORACLE RMAN备份及还原 RMAN能够进行增量备份:数据库,表空间,数据文件

    ORACLE RMAN备份及还原   RMAN能够进行增量备份:数据库.表空间.数据文件 仅仅有使用过的block能够被备份成backup set 表空间与数据文件相应关系:dba_data_file ...

  2. MySQL 大数据备份方案之Percona XtraBackup

    Xtrabackup介绍 1.Xtrabackup是什么 Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbacku ...

  3. MySQL数据库(表)的导入导出(备份和还原)

    一)在同一个数据库服务器上面进行数据表间的数据导入导出: 1. 如果表tb1和tb2的结构是完全一样的,则使用以下的命令就可以将表tb1中的数据导入到表tb2中: insert into db2.tb ...

  4. MySQL系列详解五: xtrabackup实现完全备份及增量备份详解-技术流ken

    xtrabackup简介 xtrabackup是一个用来对mysql做备份的工具,它可以对innodb引擎的数据库做热备.xtrabackup备份和还原速度快,备份操作不会中断正在执行的事务,备份完成 ...

  5. MySQL数据库(4)- 多表查询、可视化工具Navicat的使用、设计模式MVC

    一.多表查询 准备工作:创建两张表,部门表(department).员工表(employee),代码和表格如下: # 创建表 create table department( id int, name ...

  6. Mysql数据库导出压缩并保存到指定位置备份脚本

    #!/bin/bashbackdir=/home/shaowei/dbbakdbuser='dbusername'dbpass='dbpasswd'dblist=$(ls -p /var/lib/my ...

  7. 【MySQL数据库】MySQL5.7安装与配置、可视化工具安装和破解

    软件下载 Mysql5.7地址:https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.19-winx64.zip 安装步骤 下载后会得到zip ...

  8. MySQL数据库之xtrabackup物理备份(一)

    前言:说到数据库备份,我们知道可以用来对数据库进行备份的工具有mysqldump.mydumer.mysqlpump等等,实际工作中,机器上的数据库不大的话,都是用mysqldump工具来备份,这些备 ...

  9. MySQL数据库的多种备份与多种还原

    一.备份 1.mysqldump 方法备份 mysqldump备份很简单,格式如下: mysqldump -u用户名 -p密码 数据库名> XX.sql 路径 例如: mysqldump -ur ...

随机推荐

  1. 自定义grub主题

    1 概述 自定义grub引导菜单的主题,笔者的linux是deepin,感觉默认的grub主题不太好看,嗯,没办法,就是想改了. 这篇文章主要是修改/boot/grub/grub.cfg以及/boot ...

  2. 从中国加入WTO来看Java设计模式:中介者模式

    目录 应用场景 中介者模式 定义 意图 主要解决问题 何时使用 优缺点 世界贸易组织WTO 应用场景 系统中对象之间存在比较复杂的引用关系,导致它们之间的依赖关系结构混乱而且难以复用该对象 想通过一个 ...

  3. IDEA 2021版新建Maven、TomCat工程

    目录 2021版IDEA中Maven.TomCat配置 1.基于Webapp创建一个Maven项目 1.1 新建项目模板 1.2 指定名称 1.3 指定信息 1.4 指定Maven地址 1.5 构建成 ...

  4. hdu 3062 基础的2sat

    题意: Party Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  5. PowerShell-6.文件操作

    1.显示文本内容 Get-Content "°C:\\Program Files (x86)\\PsUpdate\\b.dat" 2.得到b.dat文件内容,然后把里面的所有'C' ...

  6. MySQL三种报错注入方式下的insert,update,delete命令注入示例

    select 查询数据(大部分) 在网站应用中进行数据显示查询操作 insert 插入数据 在网站应用中进行用户注册添加等操作 delete 删除数据 后台管理里面删除文章删除用户等操作 update ...

  7. http预请求options

    在有很多情况下,当我们在js里面调用一次ajax请求时,在浏览器那边却会查询到两次请求,第一次的Request Method参数是OPTIONS,还有一次就是我们真正的请求,比如get或是post请求 ...

  8. 7个IntelliJ IDEA必备插件,提高编码效率

    1. FindBugs-IDEA 作用: 检测代码中可能的bug及不规范的位置,写完代码后检测下 避免低级bug. 静态分析工具承诺无需开发人员费劲就能找出代码中已有的缺陷.当然,如果有多年的编写经验 ...

  9. Pytest自动化测试-简易入门教程(02)

    Pytest框架简介 Pytest是一个非常成熟的全功能的Python测试框架,主要有以下几个特点:1.简单灵活,容易上手,支持参数化2.能够支持简单的单元测试和复杂的功能测试,3.还可以用来做sel ...

  10. Pulsar部署和实践(一)

    前言 本地Docker部署Pulsar消息代理实现消息发布和消息订阅 介绍 相关概念,后面有时间再花时间整理下. 实践步骤 1.使用dokcer本地部署pulsar docker run -it \ ...