xtrabackup工具 进行备份和恢复介绍

一、环境准备:

系统CentOS Linux release 7.2.1511 (Core) X_86 64位最小化安装
mysql版本是官方二进制版本5.7.22-22,mysql采用的是二进制安装,单机上开启2个mysql实例,mysql实例要开启定时器event_scheduler=ON. 而且2个mysql实例都要开启Gtid
xtrabackup 采用的是rpm包安装,版本是version 2.4.13

1.创建测试数据:

创建一个定时器和存储过程来生成数据模拟演示xtrabackup 的备份过程

创建一个测试库testdb

create database testdb;
use testdb;

创建一个测试表如下:

CREATE TABLE `test1_event` (
`id` int(8) NOT NULL AUTO_INCREMENT,
`username` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
`password` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
`create_time` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`) )ENGINE=innodb AUTO_INCREMENT=0 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

创建一个存储过程和一个定时器,让其定时在表test1_event 中写数据:

DELIMITER //
DROP PROCEDURE IF EXISTS p_test2//
CREATE PROCEDURE p_test2()
BEGIN
INSERT INTO test1_event(username,password,create_time) values(‘tomcat‘, ‘xiaohuahua‘,now());
END//
CREATE EVENT e_test
ON SCHEDULE EVERY 2 second STARTS TIMESTAMP ‘2019-08-08 08:29:00‘
ON COMPLETION PRESERVE
DO
BEGIN
CALL p_test2();
END//
delimiter ; 

存储过程和定时器简单描述:
A.创建一个存储过程p_test2(), 这个存储过程就是insert 数据到表test1_event
B.创建一个定时器,从2019-08-08 08:29:00 这个时间点开始,每隔2秒插入一条数据到表test1_event.类似于linux下的定时任务

2.xtrabackup rpm包安装:

xtrabackup安装使用介绍如下:

官网下载地址:
https://www.percona.com/downloads/XtraBackup/LATEST/
https://www.percona.com/downloads/
https://www.percona.com/doc/percona-xtrabackup/2.4/using_xtrabackup/privileges.html

下载rpm包来安装

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

yum localinstall percona-xtrabackup-24-2.4.14-1.el7.x86_64.rpm

[[email protected] ~]# which xtrabackup
/usr/bin/xtrabackup
[[email protected] ~]# which innobackupex
/usr/bin/innobackupex

nnobackupex命令其实是软连接到xtrabackup的。但是备份数据时要采用innobackupex命令

[[email protected] ~]# ll /usr/bin/innobackupex
lrwxrwxrwx 1 root root 10 Apr 13 20:04 /usr/bin/innobackupex -> xtrabackup
到此处安装完成

二、xtrabackup 工具使用介绍:

2.1 采用xtrabackup 备份数据库数据时必须得有登录本地数据库的权限:

权限一般给reload,replication client, lock tables, process  super
grant  reload,replication client,lock tables,process,super on *.* to [email protected]‘localhost‘ identified by ‘123456‘;flush privileges;

或者

grant  reload,replication client,lock tables,process,super on *.* to [email protected]‘127.0.0.1‘ identified by ‘123456‘;flush privileges;

2.2 备份命令说明:

全量备份命令:

 innobackupex --defaults-file=/data/mysql/mysql3306/my.cnf  -ubackupuser -p123456 --host=127.0.0.1 -S /tmp/mysql3306.sock  --no-timestamp /data/backup/db_3306_`date +%Y%m%d`
或者是
 innobackupex --defaults-file=/data/mysql/mysql3306/my.cnf  -ubackupuser -p123456 --host=localhost -S /tmp/mysql3306.sock  --no-timestamp /data/backup/db_3306_`date +%Y%m%d`

当然在给的权限是localhost时,也可以去掉--host选项。如下命令:

 innobackupex --defaults-file=/data/mysql/mysql3306/my.cnf  -ubackupuser -p123456  -S /tmp/mysql3306.sock  --no-timestamp /data/backup/db_3306_`date +%Y%m%d`

是支持并行备份的,有个命令参数 parallel。如果生产环境的话,库的压力是非常的小的话,可以使用这个参数进行并行备份的,但是库的压力大的话,就不要用这个参数了。

innobackupex --help|grep parallel

A:备份未使用并行备份的时的时间:

[[email protected] backup]# time innobackupex --defaults-file=/data/mysql/mysql3306/my.cnf  -ubackupuser -p123456  --host=127.0.0.1  -S /tmp/mysql3306.sock  --no-timestamp /data/backup/db_3306_`date +%Y%m%d`
190808 10:02:25 completed OK!

real    0m11.294s
user    0m0.490s
sys 0m1.006s

使用的时间是11秒

B:备份使用了并行备份参数的备份时间: 使用4个线程并行备份

time innobackupex --defaults-file=/data/mysql/mysql3306/my.cnf  -ubackupuser -p123456  --host=127.0.0.1  -S /tmp/mysql3306.sock  --parallel=4 --no-timestamp /data/backup/db_3306_`date +%Y%m%d`
190808 09:58:01 completed OK!

real    0m6.548s
user    0m0.378s
sys 0m0.703s

使用的时间6秒

xtrabackup 备份数据提示:

xtrabackup在备份时,一定要避开业务的高峰期操作,如果在业务的高峰期操作,会产生大量的redo 文件,在恢复数据库的过程中会非常的慢。而且在备份过程中是存在锁表的。影响到数据的正常写入。
而且备份最好是在slave库上进行备份。因为slave库上是允许延迟的

锁表验证:

从备份的日志看到是从11:42:08 开始锁表的

190808 11:42:08 Executing FLUSH TABLES WITH READ LOCK...
190808 11:42:08 Starting to backup non-InnoDB tables and files
到11:42:13  13秒后完成解锁
190808 11:42:13 Executing UNLOCK TABLES
190808 11:42:13 All tables unlocked
此时查看表test1_event中的数据(实际是每2秒insert 一条)
 5621 | tomcat   | xiaohuahua | 2019-08-08 11:42:04 |
| 5622 | tomcat   | xiaohuahua | 2019-08-08 11:42:06 |  ##由于08秒处出现锁表,所以数据没写入成功
| 5623 | tomcat   | xiaohuahua | 2019-08-08 11:42:13 |
| 5624 | tomcat   | xiaohuahua | 2019-08-08 11:42:13 |   ##到13秒处,突然一下插入2条数据
| 5625 | tomcat   | xiaohuahua | 2019-08-08 11:42:14 |
| 5626 | tomcat   | xiaohuahua | 2019-08-08 11:42:16 |

从此处说明,xtrabackup 在备份innodb表时,还是会锁表的,锁表会造成数据延迟写入,和丢失数据的情况

2.3 恢复的命令介绍:
此次演示的恢复在本机上再新开启一个mysql 3308的实例来恢复。 把上面3306实例上备份的文件恢复到3308的实例上

xtrabackup 恢复演示:

对数据库进行备份xtrabackup。 备份完了。然后采用下面的命令来恢复


 innobackupex  --apply-log   /data/backup/db_3306_20190808/
 190808 10:31:56 completed OK!

innobackupex --defaults-file=/data/mysql/mysql3308/my3308.cnf --copy-back /data/backup/db_3306_20190808/
 190808 10:41:38 completed OK!

提示:如果mysql实例中表存在多个引擎的话,下面的文件中的记录的binlog 的位置点会不同的,但是要以位置点大的为准
下面的binlog位置点是相同的,原因是mysql实例中所有的表都采用的是Innodb的引擎

[[email protected] db_3306_20190808]# cat /data/backup/db_3306_20190808/xtrabackup_binlog_info
mysql-bin.000002    3199225 bde7b592-b966-11e9-8c64-000c294f3e61:1-7796
[[email protected] db_3306_20190808]# cat /data/backup/db_3306_20190808/xtrabackup_binlog_pos_innodb
mysql-bin.000002    3199225

启动mysql3308 实例报错:

[ERROR] InnoDB: The innodb_system data file ‘ibdata1‘ must be writable
2019-08-08T10:46:55.705574+08:00 0 [ERROR] InnoDB: The innodb_system data file ‘ibdata1‘ must be writable

原因是权限不对
给恢复的数据目录data mysql的权限

 chown -R mysql.mysql  /data/mysql/mysql3308/data 

再次启动mysql 启动成功:

 /usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql3308/my3308.cnf   &

数据成功恢复到3308实例:

[[email protected] mysql3308]# mysql -S /tmp/mysql3308.sock -e "select count(*) from testdb.test1_event;select user,host from mysql.user;"
+----------+
| count(*) |
+----------+
|     2631 |
+----------+
+---------------+-----------+
| user          | host      |
+---------------+-----------+
| backupuser    | 127.0.0.1 |
| backupuser    | localhost |
| mysql.session | localhost |
| mysql.sys     | localhost |
| root          | localhost |
+---------------+-----------+
[[email protected] mysql3308]# 

2.4Tips:

如果备份不是用并行,恢复的时候可以用并行么 ??是可以.
恢复时,想让恢复的更快,可以把 --use-memory= 这个内存的值调整的大点,这个参数只是针对在恢复数据库采用--apply-log参数时使用--use-memory= 加大内存可以加快恢复数据库的时间

  --use-memory The default value is 100MB,
 官网介绍地址: https://www.percona.com/doc/percona-xtrabackup/2.3/xtrabackup_bin/xbk_option_reference.html#cmdoption-xtrabackup-use-memory

采用多线程恢复:

time innobackupex --defaults-file=/data/mysql/mysql3308/my3308.cnf  --parallel=2 --use-memory=200M --copy-back /data/backup/db_3306_20190808/
190808 11:14:26 completed OK!

real    0m16.963s
user    0m0.037s
sys 0m2.270s

恢复使用的时间是16秒

采用单线程恢复:

  time innobackupex --defaults-file=/data/mysql/mysql3308/my3308.cnf  --use-memory=200M --copy-back /data/backup/db_3306_20190808/
190808 11:16:11 completed OK!

real    0m21.567s
user    0m0.035s
sys 0m2.905s

恢复使用的时间是21秒

2.5 xtrabackup 增量备份原理:

查找上次备份终止的LSN号
Copy redo
对于LSN号:
大于上次终止的LSN的Page页都进行copy(每个表一个单独的文件)
小于上次终止的LSN的Page不copy

生产上不建议使用 xtrabackup 来进行增量备份数据库

2.6 xtrabackup 恢复原理:

利用xtrabackup 实现crash recovery:
没有binlog参与
找到checkpoint 的LSN号
扫描大于checkpoint 的LSN号 的redo,确认commit并合并到datafile,反之rollback

提示:
apply-log过程中出现失败的话是可以多次运行apply-log的

Tps:
xtrabackup 备份时,在cp .ibd文件的过程中,此时是没有锁表的,但是是不允许修改表结构的
当前的版本中,在备份数据库的过程中时不允许进行DDL操作的,所以备份的过程中是不允许 alter 表结构的
undo 文件是存放的历史数据,方便数据库库故障进行恢复使用的,它是要持久化到磁盘的

提示:

不管什么DML(create alter )操作都会形成undo
update insert delete,
select 操作是不会形成undo 的
MySQL8.0 的DDL操作也会形成undo

具体备份命令可以参考下面的文档
https://blog.51cto.com/wujianwei/1934084

以上备份原理出自知书堂mysql课程内容总结。本博文总结于此处,方便自己工作和学习查阅,顺便也贡献给专注于MySQL领域的朋友们。有不妥之处请留言,一起交流学习

原文地址:https://blog.51cto.com/wujianwei/2430281

时间: 2024-10-10 13:20:57

xtrabackup工具 进行备份和恢复介绍的相关文章

mysql之使用xtrabackup进行物理备份、恢复、在线克隆从库、在线重做主从

注:图片来自<深入浅出MySQL 数据库开发 优化与管理维护 第2版> 物理备份和恢复 1.冷备份:停掉mysql再备份,一般很少用,因为很多应用不允许长时间停机,停机备份的可以直接CP数据库的数据目录,在进行恢复前,停掉mysql,然后把数据目录覆盖掉,再重启mysql. 2.热备份 Myisam存储引擎 可以使用mysqlhotcopy工具,如果此工具无法使用时,可以手工使用:flush tables with read lock;手动加读锁,然后复制mysiam表的文件做热备. inno

【mysql】使用xtrabackup在线增量备份及恢复l数据库

一.介绍 1.Xtrabackup有这么几个文件 innobackupex innobackupex 是xtrabackup的一个符号链接 . innobackupex still supports all features and syntax as 2.2 version did, but is now deprecated and will be removed in next major release. xtrabackup 一个由C编译而来的二进制文件,可以整备MySQL datab

mysql数据库使用xtrabackup工具 实现备份和还原

下载xtrabackup工具包 percona-xtrabackup-24-2.4.13-1.el7.x86_64.rpm 工具包可以从官网下载https://www.percona.com/downloads/Percona-XtraBackup-LATEST/Percona-XtraBackup-8.0.4/binary/redhat/7/x86_64/percona-xtrabackup-80-8.0.4-1.el7.x86_64.rpm 安装xtrabackup工具包(需要启用epel源

mysql备份工具--mysqldump备份以及恢复

https://help.aliyun.com/knowledge_detail/41738.html mysql全备:记录pos位置 mysqldump -h10.10.10.1 -uadmin -p --master-data=2 --single-transaction -R --events -q --all-databases > 2.sql cat 2.sql |head -22 在导出的备份中的22行会看到pos位置点和具体的binlog文件名称 CHANGE MASTER TO

Linux下MySQL的备份和恢复

MySQL备份的原因  1. 灾难恢复  2. 审计   3. 测试1234512345 mysql的备份类型  1. 根据服务器的在线状态:     热备:服务器处于运行状态     冷备:服务器出去停止状态     温备:服务器处于半离线状态,只能读,但是不能写  2. 根据备份的数据集:     完全备份:备份整个数据库     部分备份:备份某个表  3. 根据备份时的接口:     物理备份:直接将数据库文件从磁盘上复制出来     逻辑备份:把数据从数据库中提取出来备份成文本文件  

xtrabackup 全备份,增量备份,恢复 mysql数据库

Xtrabackup使用指南 InnoDB数据备份工具 Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写,也就是不加锁),是商业备份工具InnoDB Hotbackup的一个很好的替代品 一.Xtrabackup介绍  A.Xtrabackup是什么 Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品. Xtrabackup有两个主要的工具

MySQL备份与恢复常用方法总结(mysqldump/xtrabackup/lvm快照备份/二进制日志及时点恢复)

MySQL备份与恢复常用方法总结 (mysqldump/xtrabackup/lvm快照备份/逻辑备份与恢复/二进制日志及时点恢复) 自言:学习在于总结,把所了解的类似东西放到一起更能加深记忆 一.了解备份相关知识 1)按服务器备份时状态可分为:     热备份:读.写不受影响:     温备份:仅可以执行读操作:     冷备份:离线备份:读.写操作均中止:2)按服务器备份数据集可分为:     物理备份:复制数据文件:     逻辑备份:将数据导出至文本文件中:3)按服务器备份数据量可分为:

mysql备份实战-Xtrabackup工具备份

导读 大数据量备份与还原,始终是个难点.当MYSQL超10G,用mysqldump来导出就比较慢了.这里介绍一个强大的开源工具Xtrabackup. Xtrabackup简介 Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具,是商业备份工具InnoDB Hotbackup的一个很好的替代品.特点: (1)备份过程快速.可靠: (2)备份过程不会打断正在执行的事务: (3)能够基于压缩等

数据库 之 备份工具Xtrabackup进行MySQL备份

1  概述 1.1  简介 Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具. PXB(Percona XtraBackup)是物理备份,是基于复制文件备份,备份时可以远程操作,基于mysql协议远程连接,需要备份的主机不用安装PXB,但是,执行恢复数据操作时mysql服务不能启动,所以恢复时只能本地恢复,而且在本地的服务器上要安装PXB PXB在恢复增量数据时,先合并第一次增量到全量