xtrabackup数据库备份工具
下来我来介绍一下更强大的备份工具: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数据库备份工具的更多相关文章
- Mysql 数据库备份工具 xtrabackup
1.安装测试数据库mysql5.7 详细步骤 yum install -y gcc gcc-c++ cmake bison ncurses-devel .tar.gz cd mysql-/ cmake ...
- mysql数据库备份工具xtrabackup
1.下载二进制安装包 其他高版本测试缺少依赖 2.xtrabackup参数说明 简介: Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工 ...
- xtrabackup数据库备份
xtrabackup备份 一.Xtrabackup概述 1.1.简介 Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Ho ...
- 编译安装mysql和zabbix,xtrabackup数据库备份
xtrabackup参考文章 https://www.cnblogs.com/linuxk/p/9372990.html 下载5.7的mysql 社区版包 https://cdn.mysql.com/ ...
- MySQL数据库备份工具mysqldump的使用(转)
说明:MySQL中InnoDB和MyISAM类型数据库,这个工具最新版本好像都已经支持了,以前可能存在于MyISAM的只能只用冷备份方式的说法. 备份指定库: mysqldump -h127.0.0. ...
- 数据库备份工具mysqldump重要参数详解
1. --single-transaction InnoDB 表在备份时,通常启用选项 --single-transaction 来保证备份的一致性,实际上它的工作原理是设定本次会话的隔离级别为:RE ...
- mysql数据库-备份与还原-Percona XtraBackup 2.4备份工具使用
目录 xtrabackup 特点 备份生成的相关文件 xtrabackup 安装 xtrabackup 用法 1 备份 2 预备份 3 还原 4 其他 还原注意事项 xtrabackup实现完全备份及 ...
- Xtrabackup原理及使用innobackupex进行MySQL数据库备份恢复
Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具. Xtrabackup中主要包含两个工 ...
- MySQL数据库之xtrabackup物理备份(一)
前言:说到数据库备份,我们知道可以用来对数据库进行备份的工具有mysqldump.mydumer.mysqlpump等等,实际工作中,机器上的数据库不大的话,都是用mysqldump工具来备份,这些备 ...
随机推荐
- 【Leetcode_easy】669. Trim a Binary Search Tree
problem 669. Trim a Binary Search Tree 参考 1. Leetcode_easy_669. Trim a Binary Search Tree; 完
- cisco 各类子网的划分
C类地址子网划分 /25 子网掩码为128: 1位的取值为1,其他7位的取值为0(10000000): 块大小128: (256-128): 2个子网,每个子网最多包含126台主机: /26 子网掩码 ...
- APK在Android Studio下如何签名
apk签名的意义 Android系统要求每一个Android应用程序必须要经过数字签名才能够安装到系统中,也就是说如果一个Android应用程序没有经过数字签名,是没有办法安装到系统中的! Andro ...
- Fiddler之打断点
1..Fiddler可以修改以下请求 --Fiddler设置断点,可以修改HTTP请求头信息,如修改Cookie,User-Agent等 --可以修改请求数据,突破表单限制,提交任意数字,如充值最小1 ...
- QT QcustomPlot的简单使用
第一步.QcustomPlot是QT提供的一个第三方库,在使用前需要在QcustomPlot官网上进行下载. 第二步.把解压完的QcustomPlot压缩包中的qcustomplot.h和qcusto ...
- Anaconda安装报错
通用解决方案:先卸载,然后重新安装(注意安装路径全英文且不要有空格),勾选添加环境变量选项
- xv6解析-- 多处理器操作
xv6可以运行多cpu的计算机上,这个os使用mycpu函数来标识初当前的cpu,使用struct cpu结构体来记录当前的CPU状态.使用cpus这些状态存放于cpus数组中,使用ncpu来标志cp ...
- 13_日期时间、Math、枚举
日期时间.Math.枚举 日期时间 计算机如何表示时间? GMT时间指格林尼治所在地的标准时间,也称为时间协调时(UTC),其他地区的时间都是相对于GMT时间的偏移. 北京位于东八区 = UTC ...
- SpringBoot exception异常处理机制源码解析
一.Spring Boot默认的异常处理机制 1:浏览器默认返回效果 2:原理解析 为了便于源码跟踪解析,在·Controller中手动设置异常. @RequestMapping(value=&quo ...
- IntelliJ IDEA 之 配置JDK 的 4种方式
一.新建项目前配置JDK 打开IDEA集成开发环境工具,点击:File--Project Structure,如下图 在打开的页面中,选择SDKs属性,并点击中间的加号+,选择JDK,如下图 在打开的 ...