XtraBackup数据备份与恢复(全部、增量、差异)

这篇具有很好参考价值的文章主要介绍了XtraBackup数据备份与恢复(全部、增量、差异)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

XtraBackup数据备份与恢复(全部、增量、差异)

前言

1.XtraBackup介绍

 Percona-xtrabackup是 Percona公司开发的一个用于MySQL数据库物理热备的备份工具,支持MySQL、Percona server和MariaDB,开源免费,是目前较为受欢迎的主流备份工具。xtrabackup只能备份innoDB和xtraDB两种数据引擎的表,而不能备份MyISAM数据表。

MySQL冷备、mysqldump、MySQL热拷贝都无法实现对数据库进行增量备份。
xtrabackup包含两个主要的工具,即xtrabackup和innobackupex,二者区别如下:

1.xtrabackup只能备份innodb和xtradb两种引擎的表,而不能备份myisam引擎的表;
2.innobackupex是一个封装了xtrabackup的Perl脚本,支持同时备份innodb和myisam,但在对myisam备份时需要加一个全局的读锁。myisam不支持增量备份

2.XtraBackup优点

(1)备份速度快,物理备份可靠
(2)备份过程不会打断正在执行的事务(无需锁表)
(3)能够基于压缩等功能节约磁盘空间和流量
(4)自动备份校验
(5)还原速度快
(6)可以流传将备份传输到另外一台机器上
(7)在不增加服务器负载的情况备份数据

安装

官网下载Software Downloads - Percona

XtraBackup2.4支持mysql5.6 、5.7

XtraBackup8.0支持mysql8.0

XtraBackup数据备份与恢复(全部、增量、差异)

先创建一个文件来存放的xtraBackup
mkdir /xtraBackup

将下好的tar包进行解压到/xtraBackup文件下
tar -xf Percona-XtraBackup-2.4.20-rc8b4056-el7-x86_64-bundle.tar -C /xtraBackup/

安装
cd /xtraBackup
yum install -y *

查看
xtrabackup -version

xtrabackup完全备份与恢复

常用参数:

--apply-log		    在进行数据库恢复操作之前执行,以确保数据的一致性和完整性
--redo-only     	不回滚未提交事务
--copy-back     	恢复备份目录
--incremental		指定增量备份
--incremental-basedir	指定基于哪个备份做增量备份,最后是增量备份保存的目录。

1.备份

innobackupex --user=root --password='123456' /xtrabackup/full

执行正确最后会显示 completed OK!

2.模拟数据库毁坏 删库

cd /usr/local/mysql/data
rm -rf ./*

3.准备
一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或者已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处于不一致状态。"准备"的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使用得数据文件处于一致性状态。

innobackupex --apply-log --redo-only /xtrabackup/full/2023-08-08_22-27-21/

4.恢复

innobackupex --defaults-file=/etc/my.cnf --copy-back /xtrabackup/full/2023-08-08_22-27-21/

5.修改权限
现在备份的文件属主属组都是root mysql账号是打不开的 没有权限 需要修改权限

[root@localhost data]# ll
总用量 122900
-rw-r----- 1 root root 12582912 8月   8 16:10 ibdata1
-rw-r----- 1 root root 50331648 8月   8 16:10 ib_logfile0
-rw-r----- 1 root root 50331648 8月   8 16:10 ib_logfile1
-rw-r----- 1 root root 12582912 8月   8 16:10 ibtmp1
drwxr-x--- 2 root root       54 8月   8 16:10 kings
drwxr-x--- 2 root root     4096 8月   8 16:10 mysql
drwxr-x--- 2 root root     4096 8月   8 16:10 performance_schema
drwxr-x--- 2 root root       20 8月   8 16:10 test
-rw-r----- 1 root root       24 8月   8 16:10 xtrabackup_binlog_pos_innodb
-rw-r----- 1 root root      503 8月   8 16:10 xtrabackup_info
-rw-r----- 1 root root        1 8月   8 16:10 xtrabackup_master_key_id
[root@localhost data]# chown -R mysql.mysql /usr/local/mysql/data

[root@localhost data]# ll
总用量 122900
-rw-r----- 1 mysql mysql 12582912 8月   8 16:10 ibdata1
-rw-r----- 1 mysql mysql 50331648 8月   8 16:10 ib_logfile0
-rw-r----- 1 mysql mysql 50331648 8月   8 16:10 ib_logfile1
-rw-r----- 1 mysql mysql 12582912 8月   8 16:10 ibtmp1
drwxr-x--- 2 mysql mysql       54 8月   8 16:10 kings
drwxr-x--- 2 mysql mysql     4096 8月   8 16:10 mysql
drwxr-x--- 2 mysql mysql     4096 8月   8 16:10 performance_schema
drwxr-x--- 2 mysql mysql       20 8月   8 16:10 test
-rw-r----- 1 mysql mysql       24 8月   8 16:10 xtrabackup_binlog_pos_innodb
-rw-r----- 1 mysql mysql      503 8月   8 16:10 xtrabackup_info
-rw-r----- 1 mysql mysql        1 8月   8 16:10 xtrabackup_master_key_id

6.进入mysql 查看数据是否恢复

mysql -uroot -p

xtrabackup增量备份与恢复

增量备份是备份在原先全部备份的基础上,到增量备份时间点中间这段时间内增删改的数据记录的备份

为做此时实验我们先创建一个数据库一个表 添加数据用来测试

mysql> create database test_db;
Query OK, 1 row affected (0.00 sec)

mysql> use test_db;
Database changed

mysql> create table t1(id int);
Query OK, 0 rows affected (0.00 sec)

mysql> insert into t1 values(1);
Query OK, 1 row affected (0.00 sec)

mysql> select * from t1;
+------+
| id   |
+------+
|    1 |
+------+
1 row in set (0.00 sec)

1.做一次全部备份

innobackupex --user=root --password='123456' /xtrabackup/full

2.模拟周二数据库修改操作 添加一行数据

mysql> insert into t1 values(2);
Query OK, 1 row affected (0.00 sec)

mysql> select * from t1;
+------+
| id   |
+------+
|    1 |
|    2 |
+------+
2 rows in set (0.00 sec)

增量备份(周二增量备份 基于周一,会产生一个备份文件,内容是增量备份点到全部备份这段时间内增删改的数据)
注意:1. 增量数据会通过下面这条指令生成一个增量数据的备份文件 2.如果再想增量备份,则在上一次增量备份的基础上进行增量备份 也就是incremental-basedir要设置上一次增量备份文件

3.增量备份
生成2023-08-09_01-22-13文件

innobackupex --user=root --password='123456' --incremental /xtrabackup/full/ --incremental-basedir=/xtrabackup/full/2023-08-09_01-12-31

ls /xtrabackup/full
2023-08-08_22-27-21  2023-08-09_01-12-31  2023-08-09_01-22-13

4.模拟周三数据库损坏

cd /my_mysql/3306/data/
rm -rf ./*

5.恢复

innobackupex --apply-log --redo-only /xtrabackup/full/2023-08-09_01-12-31/
innobackupex --apply-log --redo-only /xtrabackup/full/2023-08-09_01-12-31/ --incremental-dir=/xtrabackup/full/2023-08-09_01-22-13/

注意:经上面两条语句 全局备份数据中已经添加了增量备份的数据,
	 所以我们直接恢复一下已添加增量备份数据的全局备份文件(2023-08-09_01-12-31)
innobackupex --copy-back /xtrabackup/full/2023-08-09_01-12-31/

6.修改属主属组

chown -R mysql.mysql /usr/local/mysql/data

这时候数据已经直接恢复到事故之前的状态了
mysql> select * from t1;
+------+
| id   |
+------+
|    1 |
|    2 |
+------+
2 rows in set (0.00 sec)

最后特别注意:
当增量备份没有带--redo-only后,之后的增量备份不能再应用,数据库可能都开启不了了,博主已经替大家踩过坑了!希望大家别遇到!,最好是执行完恢复操作后再次进行全备,并在此基础上进行增量。反之
“xtrabackup: error: The transaction log file is corrupted.
xtrabackup: error: The log was not applied to the intended LSN!”
所以在做准备备份时,提前备份好一份全备,以免不时之需。

xtrabackup差异备份与恢复

我们还是假设从周一开始 删掉第二条数据

mysql> delete from test_db.t1 where id=2;
Query OK, 1 row affected (0.00 sec)

mysql> select * from test_db.t1;
+------+
| id   |
+------+
|    1 |
+------+
1 row in set (0.00 sec)

1.全被备份
因为之前全部备份用过了增量备份恢复 虽然我们已经使用了参数 --redo-only 但以防万一还是再全部备份一次。

innobackupex --user=root --password='123456' /xtrabackup/full/

2.模拟修改数据

mysql> insert into t1 values(2);
Query OK, 1 row affected (0.01 sec)

mysql> select * from test_db.t1;
+------+
| id   |
+------+
|    1 |
|    2 |
+------+
2 rows in set (0.00 sec)

3.一次差异备份(第一次差异备份跟增量备份没区别)

innobackupex --user=root --password='123456' --incremental /xtrabackup/full/ --incremental-basedir=/xtrabackup/full/2023-08-09_02-35-48/

4.再次修改数据,再做一次差异备份

修改数据

mysql> insert into t1 values(3);
Query OK, 1 row affected (0.01 sec)

mysql> select * from t1;
+------+
| id   |
+------+
|    1 |
|    2 |
|    3 |
+------+
3 rows in set (0.00 sec)

做一次差异备份(其实差异备份是以第一次全局备份为基础,全局备份时候到此次差异备份时间点中增删改的数据)

所以我们这次备份还是以第一次为基础备份就行

innobackupex --user=root --password='123456' -S /my_mysql/3306/mysql.sock --incremental /xtrabackup/full/ --incremental-basedir=/xtrabackup/full/2023-08-09_02-35-48/
[root@localhost full]# ll
drwxr-x--- 7 root root 336 8月   9 02:10 2023-08-09_01-12-31
drwxr-x--- 7 root root 256 8月   9 01:27 2023-08-09_01-22-13
drwxr-x--- 7 root root 298 8月   9 02:51 2023-08-09_02-35-48    //差异备份第一次完全备份  
drwxr-x--- 7 root root 256 8月   9 02:37 2023-08-09_02-37-42    //第一次差异备份
drwxr-x--- 7 root root 256 8月   9 02:51 2023-08-09_02-43-29	   //第二次差异备份

5.模拟数据数据损坏

cd /usr/local/mysql/data
rm -rf ./*

6.恢复(差异恢复用准备用的是最后一次的差异备份文件)

innobackupex --apply-log --redo-only /xtrabackup/full/2023-08-09_02-35-48/
innobackupex --apply-log --redo-only /xtrabackup/full/2023-08-09_02-35-48/ --incremental-dir=/xtrabackup/full/2023-08-09_02-43-29/

注意:经上面两条语句 全局备份数据中已经添加了差异备份的数据,
	 所以我们直接恢复一下已添加差异备份数据的全局备份文件(2023-08-09_02-35-48)
innobackupex --defaults-file=/etc/my.cnf --copy-back /xtrabackup/full/2023-08-09_02-35-48/  

7.修改属主属组

chown -R mysql.mysql /usr/local/mysql/data

查看数据
mysql> select * from t1;
+------+
| id   |
+------+
|    1 |
|    2 |
|    3 |
+------+
3 rows in set (0.00 sec)

其实增量跟差异备份在这实际操作区别很小
增量备份:备份的数据是对上次备份(上次备份可以是全部备份、增量备份)到此时的数据备份
差异备份:备份的数据是对上次完全备份到此时的数据备份

所以差异备份恢复数据是利用上次完全备份文件和最近一次差异备份的数据就可以恢复最近的数据,而增量备份需要一次次的累加恢复数据。文章来源地址https://www.toymoban.com/news/detail-633945.html

到了这里,关于XtraBackup数据备份与恢复(全部、增量、差异)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 小米数据恢复:有无备份从小米手机恢复删除数据方法

    如果您不小心删除了小米手机上的数据,后来发现您需要它,那么本文适合您。我将向您介绍一些最可靠的小米恢复方法,以将您的数据恢复到您的设备上。无论您是否有备份,都可以处理。让我们开始吧! 1.从小米云恢复已删除的数据 与大多数智能手机公司一样,小米也提

    2024年02月09日
    浏览(48)
  • 十分钟掌握 Flink CDC,实现Mysql数据增量备份到Clickhouse [纯干货,建议收藏]

    Clickhouse的优点. 真正的面向列的 DBMS ClickHouse 是一个 DBMS,而不是一个单一的数据库。它允许在运行时创建表和数据库、加载数据和运行 查询,而无需重新配置和重新启动服务器。 数据压缩 一些面向列的 DBMS(InfiniDB CE 和 MonetDB)不使用数据压缩。但是,数据压缩确实提高了

    2024年04月14日
    浏览(53)
  • MySQL数据备份与恢复

    备份的主要目的: 备份的主要目的是:灾难恢复,备份还可以测试应用、回滚数据修改、查询历史数据、审计等。 日志: MySQL 的日志默认保存位置为: ##配置文件 ##通用查询日志,用来记录MySQL的所有连接和语句,默认是关闭的 ##二进制日志(binlog),用来记录所有更新了数据

    2024年02月11日
    浏览(47)
  • ES数据备份与恢复

    场景:ES线上的数据和服务迁移到另外的机器上去 老ES机器ip:172.16.0.1 新ES机器ip:172.16.0.2 一. 首先, 在备份之前要在es/config/elasticsearch.yml添加仓库配置: path.repo: [\\\"/mnt/backup/es_backup\\\"] 1. 2.重启ES 二. 在老机器上 3.创建备份仓库 在/mnt/backup下新建名为es_backup的仓库 POST /_snapsho

    2024年02月16日
    浏览(39)
  • ElasticSearch 数据备份与恢复

    以下为背景 Elasticsearch 7.6.2单点,8.3.3单点 Docker 部署 当前使用场景:部分index,数据量较大,需要在跨版本的ES之间进行迁移 一、前提说明 1. Elasticsearch备份 2. 备份恢复方案 二、Elasticsearch 环境准备 1.查看Elasticsearch所有版本 2.部署2个Elasticsearch单点服务 三、数据备份 1. 增加

    2024年02月10日
    浏览(40)
  • MySQL 数据备份与恢复

    本次使用的MySQL版本为8.0.20 目录 一、数据备份 1.使用 MySQLdump 命令备份 (1)使用MySQLdump备份单个数据库中的所有表 案例:完成数据插入后,输入备份命令如下: (2)使用MySQLdump备份数据库中的某个表 案例:备份booksDB数据库中的books表,输入语句如下: (3)使用MySQLdump备

    2024年02月11日
    浏览(43)
  • 06.Oracle数据备份与恢复

    01.CentOS7静默安装oracle11g 02.Oracle的启动过程 03.从简单的sql开始 04.Oracle的体系架构 05.Oracle数据库对象 06.Oracle数据备份与恢复 07.用户和权限管理 08.Oracle的表 09.Oracle表的分区 10.Oracle的同义词与序列 11.Oracle的视图 12.Oracle的索引 13.Oracle通过JDBC连接Java 14.Oracle中的事务 15.Oracle11g的

    2024年02月05日
    浏览(44)
  • Elasticsearch 的数据备份和恢复

    1.1 Elasticsearch 数据备份 数据备份是一项重要的任务,用于保护数据免受意外数据丢失、硬件故障等不可预测的事件。 Elasticsearch 提供了一些机制来备份和恢复数据,以确保数据的可靠性和持久性。 1.2 Elasticsearch 数据恢复 数据恢复是指从备份中恢复数据并将其重新加载到 El

    2024年02月08日
    浏览(40)
  • Vault数据备份恢复-MySQL

    Vault提供了可靠的功能来保护数据库和其他关键数据。 对于MySQL数据库,Vault提供了一个易于使用的解决方案,可以自动创建和管理定期备份,并支持从备份中快速恢复数据。本文将介绍Vault后端存储MySQL的备份恢复,包括如何设置Vault、如何进行数据备份和还原、如何保护备份

    2024年02月14日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包