MySQL 物理备份工具-xtrabackup
安装
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL libev
wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.4/binary/redhat/6/x86_64/percona-xtrabackup-24-2.4.4-1.el6.x86_64.rpm
yum install -y percona-xtrabackup-24-2.4.4-1.el6.x86_64.rpm
备份方式——物理备份
(1) 对于非Innodb表(比如 myisam)是,锁表cp数据文件,属于一种温备份。
(2) 对于Innodb的表(支持事务的),不锁表,拷贝数据页,最终以数据文件的方式保存下来,把一部分redo和undo一并备走,属于热备方式。
xtrabackup 在innodb表备份恢复的流程
(1) xtrabackup 备份执行的瞬间,立即触发ckpt,已提交的数据脏页,从内存刷写到磁盘,并记录此时的LSN号
(2) 备份时,拷贝磁盘数据页,并且记录备份过程中产生的redo和undo一起拷贝走,也就是checkpoint LSN之后的日志
(3) 在恢复之前,模拟Innodb“自动故障恢复”的过程,将redo(前滚)与undo(回滚)进行应用
(4) 恢复过程是cp 备份到原来数据目录下
innobackupex使用
全备
需要在 /etc/my.cnf 中指定 socket 位置
[client]
socket=/var/lib/mysql/mysql.sock
innobackupex --user=root --password=Klvchen_123 /data/backup
自主定制备份路径名
innobackupex --user=root --password=Klvchen_123 --no-timestamp /data/backup/full
备份集中多出来的文件
cd /data/backup/full
-rw-r----- 1 root root 104 Jan 11 23:23 xtrabackup_binlog_info
-rw-r----- 1 root root 113 Jan 11 23:23 xtrabackup_checkpoints
-rw-r----- 1 root root 598 Jan 11 23:23 xtrabackup_info
-rw-r----- 1 root root 2560 Jan 11 23:23 xtrabackup_logfile
cat xtrabackup_binlog_info
mysql-bin.000005 234 e4b4a809-3445-11ea-abe9-00155d1f4002:1-7,f10baaa9-3446-11ea-ba25-00155d1f4002:1-2
# 记录的是备份时刻,binlog的文件名字和当时的结束的position,可以用来作为截取binlog时的起点。
cat xtrabackup_checkpoints
backup_type = full-backuped
from_lsn = 0 # 上次所到达的LSN号(对于全备就是从0开始,对于增量有别的显示方法)
to_lsn = 4072216 # 备份开始时间(ckpt)点数据页的LSN
last_lsn = 4072225 # 备份开始时间(ckpt)点数据页的LSN
compact = 0
recover_binlog_info = 0
(1) 备份时刻,立即将已经commit过的,内存中的数据页刷新到磁盘(CKPT).开始备份数据,数据文件的LSN会停留在to_lsn位置。
(2) 备份时刻有可能会有其他的数据写入,已备走的数据文件就不会再发生变化了。
(3) 在备份过程中,备份软件会一直监控着redo的undo,如果一旦有变化会将日志也一并备走,并记录LSN到last_lsn。
从to_lsn ----》last_lsn 就是,备份过程中产生的数据变化。
cat xtrabackup_info
uuid = 55504fc5-3486-11ea-a184-00155d1f4002
name =
tool_name = innobackupex
tool_command = --user=root --password=... --no-timestamp /data/backup/full
tool_version = 2.4.4
ibbackup_version = 2.4.4
server_version = 5.7.28-log
start_time = 2020-01-11 23:23:20
end_time = 2020-01-11 23:23:34
lock_time = 0
binlog_pos = filename 'mysql-bin.000005', position '234', GTID of the last change 'e4b4a809-3445-11ea-abe9-00155d1f4002:1-7,
f10baaa9-3446-11ea-ba25-00155d1f4002:1-2'
innodb_from_lsn = 0
innodb_to_lsn = 4072216
partial = N
incremental = N
format = file
compact = N
compressed = N
encrypted = N
# 备份的重做日志文件
file xtrabackup_logfile
xtrabackup_logfile: data
全备的恢复
# 将redo进行重做,已提交的写到数据文件,未提交的使用undo回滚掉。模拟了CSR的过程
innobackupex --apply-log /data/backup/full
# 停止 mysql ,删除 data目录
pkill mysql
rm -rf /var/lib/mysql
# 拷贝目录
cp -rf /data/backup/full /var/lib/mysql
chown -R mysql.mysql /var/lib/mysql
# 启动
systemctl start mysqld
innobackupex 增量备份(incremental)
(1) 增量备份的方式,是基于上一次备份进行增量。
(2) 增量备份无法单独恢复。必须基于全备进行恢复。
(3) 所有增量必须要按顺序合并到全备中。
模拟数据变化(全备之前)
create database klvchen;
use klvchen;
create table t1 (id int);
insert into t1 values(1),(2),(3);
全备
innobackupex --user=root --password=Klvchen_123 --no-timestamp /data/backup/full
模拟第一天数据
use klvchen;
create table t2 (id int);
insert into t2 values(1),(2),(3);
第一天的增量备份
innobackupex --user=root --password=Klvchen_123 --no-timestamp --incremental --incremental-basedir=/data/backup/full /data/backup/inc1
模拟第二天数据
use klvchen;
create table t3 (id int);
insert into t3 values(1),(2),(3);
第二天的增量备份
innobackupex --user=root --password=Klvchen_123 --no-timestamp --incremental --incremental-basedir=/data/backup/inc1 /data/backup/inc2
模拟第三天数据
use klvchen;
create table t4 (id int);
insert into t4 values(1),(2),(3);
# 误删数据库 klvchen
drop database klvchen;
恢复到周三误drop之前的数据状态
恢复思路:
1. 增量不能单独恢复
2. 增量必须按照顺序合并到全备(LSN号码)
3. 所有备份都必须要 --apply-log 进行整理备份
4. 部分备份需要只 redo 不 undo (--redo-only)
没有合并之前全备整理 (--redo-only)
innobackupex --apply-log --redo-only /data/backup/full/
合并与整理 inc1 的增量备份到 full
innobackupex --apply-log --redo-only --incremental-dir=/data/backup/inc1 /data/backup/full/
合并与整理 inc2 的增量备份到 full
innobackupex --apply-log --incremental-dir=/data/backup/inc2 /data/backup/full/

最后一次整理全备
innobackupex --apply-log /data/backup/full
二进制日志截取
# 判断起点
cat /data/backup/inc2/xtrabackup_binlog_info
mysql-bin.000002 2455 512c7182-354a-11ea-9aa0-00155d1f4002:1-9
# 判断终点
show binlog events in 'mysql-bin.000002';

# 截取 drop 之前的 binlog
mysqlbinlog --skip-gtids --include-gtids='512c7182-354a-11ea-9aa0-00155d1f4002:10-11' /data/mysql-bin/mysql-bin.000002 >/data/backup/bin.sql
进行恢复
mkdir /data/3307/data -p
cp -a /data/backup/full/* /data/3307/data/
chown -R mysql.mysql /data/3307/
# 把 /etc/my.cnf 下的 datadir 路径改为新的目录
datadir=/data/3307/data
# 重启 mysql
systemctl restart mysqld
# 恢复二进制日志
set sql_log_bin=0;
source /data/backup/bin.sql;
set sql_log_bin=1;
# 检查
mysql -uroot -pKlvchen_123 -e "show databases"
mysql: [Warning] Using a password on the command line interface can be insecure.
+--------------------+
| Database |
+--------------------+
| information_schema |
| klvchen |
| mysql |
| performance_schema |
| sys |
+--------------------+
# klvchen 数据库已经成功恢复
MySQL 物理备份工具-xtrabackup的更多相关文章
- MySQL · 物理备份 · Percona XtraBackup 备份原理
http://mysql.taobao.org/monthly/2016/03/07/ 前言 Percona XtraBackup(简称PXB)是 Percona 公司开发的一个用于 MySQL 数据 ...
- mysql数据库备份工具xtrabackup
1.下载二进制安装包 其他高版本测试缺少依赖 2.xtrabackup参数说明 简介: Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工 ...
- mysql物理备份恢复 xtrabackup 初试
听闻xtrabackup开源且强大 2018-03-06 11:54:41 在官网下载安装了最新的2.4.9版本 网上文章都用的innobackupex,但是最新版已经抛弃了,自己看看手册<Pe ...
- Mysql 数据库备份工具 xtrabackup
1.安装测试数据库mysql5.7 详细步骤 yum install -y gcc gcc-c++ cmake bison ncurses-devel .tar.gz cd mysql-/ cmake ...
- (4.15)mysql备份还原——物理备份之XtraBackup的下载与安装
关键词:mysql物理备份,XtraBackup,XtraBackup安装,XtraBackup下载 实践链接:https://www.cnblogs.com/gered/p/11147193.htm ...
- mysql和mariadb备份工具xtrabackup和mariabackup(mariadb上版本必须用这个)
简介 xtraBackup(PXB) 工具是 Percona 公司用 perl 语言开发的一个用于 MySQL 数据库物理热备的备份工具,支持 MySQl(Oracle).Percona Server ...
- (4.16)mysql备份还原——物理备份之XtraBackup实践
关键词:XtraBackup实践,物理备份,xtrabackup备份,innobackupex备份 [1]如何使用? [3]系列:innobackupex --help |more [4]系列:xtr ...
- MySQL 逻辑备份工具
简介: Mydumper.Myloader 是一个第三方的.开源的 MySQL 逻辑备份工具. 支持多线程,比起 mysqldump 要快很多,也能解决 innobackupex 备份工具对 MyIS ...
- mysql数据备份之 xtrabackup
上一篇简单介绍了一下mysqldump进行数据库的备份和恢复,这一篇说一下另一种备份工具xtrabackup,在InnoDB事务引擎泛滥的时代,xtrabackup可以很好的支持数据库的热备份,这就很 ...
随机推荐
- Laravel 服务提供者实例教程 —— 创建 Service Provider 测试实例
从某种意义上说,服务提供者有点类似HTTP控制器,HTTP控制器用于为相关路由注册提供统一管理,而服务提供者用于为相关服务容器提供统一绑定场所,此外服务提供者还可以做一些初始化启动操作.Laravel ...
- HDU 1072
题意:给你一个迷宫,2代表你当前的位置,0代表墙,1代表可走的路,3代表出口,4代表的是炸弹的重置点,一开始炸弹的倒计时设置为6,每走一步时间减少1,倒计时到0的时候走到3或者4都不可以,问走出迷宫的 ...
- CodeForces 242E "XOR on Segment"(线段树)
传送门 •题意 给你一个包含 n 个数的序列 a,定义序列上的两个操作: (1)$1,l,r\ :\ ans=\sum_{i=l}^{r}a_i$; (2)$2,l,r,x\ :\ \forall\ ...
- linux主次编号
字符设备通过文件系统中的名子来存取. 那些名子称为文件系统的特殊文件, 或者设备文 件, 或者文件系统的简单结点; 惯例上它们位于 /dev 目录. 字符驱动的特殊文件由使用 ls -l 的输出的第一 ...
- H3C 路由环路
- linux 原子变量
有时, 一个共享资源是一个简单的整数值. 假设你的驱动维护一个共享变量 n_op, 它告 知有多少设备操作目前未完成. 正常地, 即便一个简单的操作例如: n_op++; 可能需要加锁. 某些处理器可 ...
- CodeForces 375D Tree and Queries
传送门:https://codeforces.com/problemset/problem/375/D 题意: 给你一颗有根树,树上每个节点都有其对应的颜色,有m次询问,每次问你以点v为父节点的子树内 ...
- Mybatis 框架
在之前的内容中,我写了Java的基础知识.Java Web的相关知识.有这些内容就可以编写各种各样丰富的程序.但是如果纯粹手写所有代码,工作量仍然很大.为了简化开发,隐藏一些不必要的细节,专心处理业务 ...
- 写时拷贝COW(copy-on-write)
写时拷贝技术是通过"引用计数"实现的,在分配空间的时候多分配4个字节,用来记录有多少个指针指向块空间,当有新的指针指向这块空间时,引用计数加一,当要释放这块空间时,引用计数 ...
- SSI(服务器端嵌入)
简介 SSI(服务器端嵌入)是一组放在 HTML 页面中的指令,当服务器向客户端访问提供这些页面时,会解释执行这些指令.它们能为已有的 HTML 页面添加动态生成内容,不需要通过 CGI 程序来或其他 ...