下来我来介绍一下更强大的备份工具:xtrabackup  

xtrabackup是Percona公司CTO Vadim参与开发的一款基于InnoDB的在线热备工具,具有开源,免费,支持在线热备,备份恢复速度快,占用磁盘空间小等特点,并且支持不同情况下的多种备份形式。xtrabackup的官方下载地址为https://www.percona.com/downloads/Percona-XtraBackup-2.4/

xtrabackup包含两个主要的工具,即xtrabackup和innobackupex,二者区别如下:

(1)xtrabackup只能备份innodb和xtradb两种引擎的表,而不能备份myisam引擎的表;

(2)innobackupex是一个封装了xtrabackup的Perl脚本,支持同时备份innodb和myisam,但在对myisam备份时需要加一个全局的读锁。还有就是myisam不支持增量备份

官网:www.percona.com
percona-server
InnoDB --> XtraDB

 Xtrabackup

percona提供的mysql数据库备份工具,惟一开源的能够对innodb和xtradb数据库进行热备的工具
手册:https://www.percona.com/doc/percona-xtrabackup/LATEST/index.html

特点:

备份还原过程快速、可靠
备份过程不会打断正在执行的事务
能够基于压缩等功能节约磁盘空间和流量
自动实现备份检验
开源,免费

(1)Xtrabackup2.2版之前包括4个可执行文件:

innobackupex: Perl 脚本
xtrabackup: C/C++ 编译的二进制
xbcrypt: 加解密
xbstream: 支持并发写的流文件格式

(2)xtrabackup 是用来备份 InnoDB 表的,不能备份非 InnoDB 表,和 MySQL Server 没有交互

(3)innobackupex 脚本用来备份非 InnoDB 表,同时会调用 xtrabackup 命令来备份 InnoDB 表,还会和 MySQL Server 发送命令进行交互,如加全局读锁(FTWRL)、获取位点(SHOW SLAVE STATUS)等。即innobackupex是在 xtrabackup 之上做了一层封装实现的

xtrabackup备份过程 

安装percona的xtrabackup安装包:

(1)首先在官网下载xtrabackup包,然后传到linux系统中,安装xtrabackup包,需要epel源仓库。

下载地址:https://www.percona.com/downloads/Percona-XtraBackup-2.4/

[root@centos7-1~]#rz

(2)安装xtrabackup包,安装的2.4版本的包对应的是mysql和mariadb5.5x版本的包,对应的mysql8.x和mariadb10.x不支持。

[root@centos7-1~]#yum install percona-xtrabackup-24-2.4.12-1.el7.x86_64.rpm  -y

xtrabackup用法

备份:innobackupex [option] BACKUP-ROOT-DIR
选项说明:https://www.percona.com/doc/percona-xtrabackup/LATEST/genindex.html

--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

Prepare:innobackupex --apply-log [option] BACKUP-DIR
选项说明:

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

还原注意事项:

1.datadir 目录必须为空。除非指定innobackupex --force-non-empty-directorires选项指定,否则--copy-backup选项不会覆盖
2.在restore之前,必须shutdown MySQL实例,不能将一个运行中的实例restore到datadir目录中,还原时不能启动mysql服务。
3.由于文件属性会被保留,大部分情况下需要在启动实例之前将文件的属主改为mysql,这些文件将属于创建备份的用户
chown -R mysql:mysql /data/mysql
以上需要在用户调用innobackupex之前完成
--force-non-empty-directories:指定该参数时候,使得innobackupex --copy-back或--move-back选项转移文件到非空目录,已存在的文件不会被覆盖。如果--copy-back和--move-back文件需要从备份目录拷贝一个在datadir已经存在的文件,会报错失败

备份生成的相关文件

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

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

实验:xtrabackup备份与还原详细过程:

1、数据库进行备份

修改mysql数据库,将数据库的数据和二进制日志数据分开存放。

[root@centos7 mysql]# vim /etc/my.cnf
[mysqld]
datadir=/data/mysql # 数据库数据存放路径
port = 3306
socket = /var/lib/mysql/mysql.sock
log_bin=/data/logbin/mysql-bin # 二进制日志存放路径

(1)在数据库主机上先创建一个备份数据库目录

[root@centos7-1~]#cd /data/
[root@centos7-1data]#ls
logbin
[root@centos7-1data]#mkdir backups

(2)在数据库主机上开始用xtrabackup工具备份数据库,并指定备份的目录路径

[root@centos7-1data]#xtrabackup    --backup  --target-dir=/data/backups/

2、模拟删除数据库的数据

(1)注意:在数据库主机上将mysql数据库文件删除,必须将数据库目录为空,并停止mysql服务

[root@centos7data]#rm -rf /var/lib/mysql/*
[root@centos7data]#systemctl stop mariadb

(2)将备份的数据库进行上预准备:提交完成的事务,回滚未完成的事务

[root@centos7data]#xtrabackup  --prepare  --target-dir=/data/backups # 对备份的目录数据进行与准备

3、开始还原数据库数据

(1)在数据库上复制到数据库目录 。 注意:数据库目录必须为空,MySQL服务不能启动

[root@centos7data]#xtrabackup --copy-back --target-dir=/data/backups/  复制到/data/backup目录下
[root@centos7data]#ll /var/lib/mysql 此时查看所属组和所有者有问题,可修改所有者和所属组
total 40976
drwxr-x--- 2 root root 303 Nov 25 14:21 hellodb
-rw-r----- 1 root root 18874368 Nov 25 14:21 ibdata1
-rw-r----- 1 root root 5242880 Nov 25 14:21 ib_logfile0
-rw-r----- 1 root root 5242880 Nov 25 14:21 ib_logfile1
-rw-r----- 1 root root 12582912 Nov 25 14:21 ibtmp1
drwxr-x--- 2 root root 4096 Nov 25 14:21 mysql
-rw-r----- 1 root root 38 Nov 25 14:21 xtrabackup_binlog_pos_innodb
-rw-r----- 1 root root 469 Nov 25 14:21 xtrabackup_info
-rw-r----- 1 root root 1 Nov 25 14:21 xtrabackup_master_key_id [root@centos7data]#chown -R mysql. /var/lib/mysql/ # 修改权限

(2)启动mysql服务,二进制日志文件最好和数据库文件分开存放,此时就可以看到数据库的数据和二进制日志数据。

[root@centos7 mysql]# ll /data/mysql
total 40976
-rw-r----- 1 root root 18874368 Mar 25 00:00 ibdata1
-rw-r----- 1 root root 5242880 Mar 25 00:00 ib_logfile0
-rw-r----- 1 root root 5242880 Mar 25 00:00 ib_logfile1
-rw-r----- 1 root root 12582912 Mar 25 00:00 ibtmp1
drwxr-x--- 2 root root 4096 Mar 25 00:00 mysql
drwxr-x--- 2 root root 4096 Mar 25 00:00 performance_schema
drwxr-x--- 2 root root 20 Mar 25 00:00 test
-rw-r----- 1 root root 469 Mar 25 00:00 xtrabackup_info
-rw-r----- 1 root root 1 Mar 25 00:00 xtrabackup_master_key_id

(3)二进制日志数据

[root@centos7 mysql]# ll /data/logbin/
total 8960
-rw-rw---- 1 mysql mysql 351 Mar 24 20:34 mysql-bin.000001
-rw-rw---- 1 mysql mysql 351 Mar 24 20:38 mysql-bin.000002
-rw-rw---- 1 mysql mysql 351 Mar 24 20:43 mysql-bin.000003
-rw-rw---- 1 mysql mysql 1242 Mar 24 21:01 mysql-bin.000004
-rw-rw---- 1 mysql mysql 432 Mar 24 21:01 mysql-bin.000005
-rw-rw---- 1 mysql mysql 432 Mar 24 21:01 mysql-bin.000006
-rw-rw---- 1 mysql mysql 1224 Mar 24 21:03 mysql-bin.000007
-rw-rw---- 1 mysql mysql 1344 Mar 24 21:14 mysql-bin.000008
-rw-rw---- 1 mysql mysql 365 Mar 24 21:04 mysql-bin.000009
-rw-rw---- 1 mysql mysql 365 Mar 24 21:12 mysql-bin.000010
-rw-rw---- 1 mysql mysql 8021033 Mar 24 21:21 mysql-bin.000011
-rw-rw---- 1 mysql mysql 365 Mar 24 21:14 mysql-bin.000012
-rw-rw---- 1 mysql mysql 841 Mar 24 21:22 mysql-bin.000013
-rw-rw---- 1 mysql mysql 365 Mar 24 23:38 mysql-bin.000014
-rw-rw---- 1 mysql mysql 30337 Mar 24 23:49 mysql-bin.000015
-rw-rw---- 1 mysql mysql 1038814 Mar 24 23:49 mysql-bin.000016
-rw-rw---- 1 mysql mysql 264 Mar 24 23:51 mysql-bin.000017
-rw-rw---- 1 mysql mysql 264 Mar 24 23:53 mysql-bin.000018
-rw-rw---- 1 mysql mysql 264 Mar 24 23:57 mysql-bin.000019
-rw-rw---- 1 mysql mysql 245 Mar 25 00:01 mysql-bin.000020
-rw-rw---- 1 mysql mysql 600 Mar 25 00:01 mysql-bin.index
-rw-rw---- 1 mysql mysql 8 Mar 24 23:38 mysql-bin.state

实验:新版xtrabackup完全,增量备份及还原

对数据库进行完全、增量备份

(1)在A主机新建三个文件,创建的base目录为完全备份的目录,inc1是第一次增量备份的目录,inc2是第二次增量备份的目录。

mkdir /backup/{base,inc1,inc2} -pv

(2)在A主机开始完全备份,备份到base目录下,使用用户和密码就需要加上--user=root ,password=密码选项即可。

[root@centos7-1~]#xtrabackup --backup --target-dir=/backup/base

(3)在A主机新打开窗口,在数据库中插入一条数据

MariaDB [hellodb]> select * from teachers;
+-----+---------------+-----+--------+
| TID | Name | Age | Gender |
+-----+---------------+-----+--------+
| 1 | Song Jiang | 45 | M |
| 2 | Zhang Sanfeng | 94 | M |
| 3 | Miejue Shitai | 77 | F |
| 4 | Lin Chaoying | 93 | F |
| 5 | a | 0 | NULL |
| 6 | b | 0 | NULL |
+-----+---------------+-----+--------+
6 rows in set (0.00 sec) MariaDB [hellodb]> insert teachers(name) values('c'); 插入一个c数据

(4)在A主机进行第一次的增量备份,在base目录下完全备份的基础上,进行第一次增量备份到inc1目录下。

[root@centos7-1~]#xtrabackup --backup --target-dir=/backup/inc1 --incremental-basedir=/backup/base

(5)然后在A主机继续在数据库中添加数据

MariaDB [hellodb]> insert teachers(name)values('yyy');

(6)在A主机进行第二次增量备份,基于inc1备份的基础上进行第二次备份到inc2目录下。

[root@centos7-1~]#xtrabackup --backup --target-dir=/backup/inc2 --incremental-basedir=/backup/inc1

此时完全备份的数据,以及第一次增量、第二次增量的数据在/backup/base目录下,或者将三次备份的数据复制到另外一台主机上

[root@centos7-1~]#scp -r /backup/  192.168.34.101:/data/

合并三次的备份数据库

(1)预准备完成备份,此选项--apply-log-only 阻止回滚未完成的事务

[root@centos7data]#xtrabackup --prepare --apply-log-only --target-dir=/backup/base

(2)合并第1次增量备份到完全备份,在base备份的基础上,将第一次的增量备份到完全备份的目录中。

[root@centos7data]#xtrabackup --prepare --apply-log-only --target-dir=/backup/base --incremental-dir=/backup/inc1

(3)合并第2次增量备份到完全备份:最后一次还原不需要加选项--apply-log-only

[root@centos7data]#xtrabackup --prepare --target-dir=/data/backup/base --incremental-dir=/backup/inc2

删除与还原数据库

(1)还原数据库数据库目录,注意数据库目录必须为空,MySQL服务不能启动

[root@centos7data]#rm -rf /var/lib/mysql/*
[root@centos7data]#systemctl stop mariadb
[root@centos7data]#xtrabackup --copy-back --target-dir=/data/backup/base 复制数据量目录

(2)修改数据库权限并启动mysql服务

[root@centos7data]#chown -R mysql.mysql /var/lib/mysql
[root@centos7data]#systemctl start mariadb

(3)此时,我们在数据库主机上可以看到之前插入的表信息都已经恢复

MariaDB [hellodb]> select * from teachers;  查看到之前插入的c和yyy数据已恢复
+-----+---------------+-----+--------+
| TID | Name | Age | Gender |
+-----+---------------+-----+--------+
| 1 | Song Jiang | 45 | M |
| 2 | Zhang Sanfeng | 94 | M |
| 3 | Miejue Shitai | 77 | F |
| 4 | Lin Chaoying | 93 | F |
| 5 | a | 0 | NULL |
| 6 | b | 0 | NULL |
| 7 | c | 0 | NULL |
| 8 | yyy | 0 | NULL |
+-----+---------------+-----+--------+

  

 

  

  

 

  

 

  

  

 

  

  

  

  

 

 

  

 

  

xtrabackup数据库备份工具的更多相关文章

  1. Mysql 数据库备份工具 xtrabackup

    1.安装测试数据库mysql5.7 详细步骤 yum install -y gcc gcc-c++ cmake bison ncurses-devel .tar.gz cd mysql-/ cmake ...

  2. mysql数据库备份工具xtrabackup

    1.下载二进制安装包 其他高版本测试缺少依赖 2.xtrabackup参数说明 简介:  Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工 ...

  3. xtrabackup数据库备份

    xtrabackup备份 一.Xtrabackup概述 1.1.简介 Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Ho ...

  4. 编译安装mysql和zabbix,xtrabackup数据库备份

    xtrabackup参考文章 https://www.cnblogs.com/linuxk/p/9372990.html 下载5.7的mysql 社区版包 https://cdn.mysql.com/ ...

  5. MySQL数据库备份工具mysqldump的使用(转)

    说明:MySQL中InnoDB和MyISAM类型数据库,这个工具最新版本好像都已经支持了,以前可能存在于MyISAM的只能只用冷备份方式的说法. 备份指定库: mysqldump -h127.0.0. ...

  6. 数据库备份工具mysqldump重要参数详解

    1. --single-transaction InnoDB 表在备份时,通常启用选项 --single-transaction 来保证备份的一致性,实际上它的工作原理是设定本次会话的隔离级别为:RE ...

  7. mysql数据库-备份与还原-Percona XtraBackup 2.4备份工具使用

    目录 xtrabackup 特点 备份生成的相关文件 xtrabackup 安装 xtrabackup 用法 1 备份 2 预备份 3 还原 4 其他 还原注意事项 xtrabackup实现完全备份及 ...

  8. Xtrabackup原理及使用innobackupex进行MySQL数据库备份恢复

    Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具. Xtrabackup中主要包含两个工 ...

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

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

随机推荐

  1. 取数据超过内存限制的问题-解决方案(sample,takeSample,filter)

    遇到的问题 在处理数据过程中,遇到需要取(n)个数的问题,而当样本量过大的时候,就不能简单的take(n),这类问题一般有两种情况: > - 有序取 TopN > - 无序取 N 先来讨论 ...

  2. 最新 第一视频java校招面经 (含整理过的面试题大全)

    从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.第一视频等10家互联网公司的校招Offer,因为某些自身原因最终选择了第一视频.6.7月主要是做系统复习.项目复盘.Leet ...

  3. linux服务器常用密令

    1. 什么是linux服务器load average? Load是用来度量服务器工作量的大小,即计算机cpu任务执行队列的长度,值越大,表明包括正在运行和待运行的进程数越多.参考资料:http://e ...

  4. 离线安装docker,并导入docker镜像

    将docker离线安装包导入到系统中,解压并进入文件夹,使用下述命令进行安装: rpm -ivh *.rpm --nodeps --force 安装完成功使用,docker info 查看docker ...

  5. [转帖]hdfs hbase hive hbase适用场景

    hdfs hbase hive hbase适用场景 https://www.cnblogs.com/liyulong1982/p/6001822.html Hive 不想用程序语言开发MapReduc ...

  6. Tcp问题汇总

    一 TCP三次握手 PS:TCP协议中,主动发起请求的一端称为『客户端』,被动连接的一端称为『服务端』.不管是客户端还是服务端,TCP连接建立完后都能发送和接收数据. 起初,服务器和客户端都为CLOS ...

  7. 数据结构 -- 二叉树(Binary Search Tree)

    一.简介 在计算机科学中,二叉树是每个结点最多有两个子树的树结构.通常子树被称作“左子树”(left subtree)和“右子树”(right subtree).二叉树常被用于实现二叉查找树和二叉堆. ...

  8. SAS学习笔记4 基本运算语句(lag、retain、_n_函数)

    lag:返回的是上一次lag函数运行时的实参,即lag(argument)=上一次lag函数执行时的argument retain:对变量进行值的初始化和保留到下一个迭代步 _n_:data步的自动变 ...

  9. js 监听键盘的enter键

    // js 版本 window.onload=function(){ document.onkeydown=function(ev){ var event=ev ||event if(event.ke ...

  10. tcpdump使用的心得

    这个linux的抓包工具确实用的不多,这段时间由于处理现场的问题所以就需要这个工具,主要是要知道网卡的信息. 命令就是 tcpdump -i 网卡名