抄袭转载的太多,请认准原文链接:xtrabackup的介绍与使用

前言

在网上找到教程都是复制粘贴抄袭的,而且还是陈旧资料,不得不说,当前中文互联网环境真是每况愈下。

如果你在网上找 xtrabackup 的教程,大概率会为你介绍 innobackupex。但在最新的 2.4 版本中,innobackupex 已经废弃,只是一个指向 xtrabackup 的软连接,官方推荐使用 xtrabackup,原文地址:The innobackupex Program

本文教程使用的是 xtrabackup 2.4.28,是当前(本文发布时)最新的 xtrabackup2.4 版本,可以备份 MySQL 5.1、5.5、5.6 和 5.7 服务器上的 InnoDB、XtraDB 和 MyISAM 表的数据,以及带有 XtraDB 的 Percona Server。

环境安装

教程中使用 MySQL 5.7 版本,其安装方式不多赘述,主要介绍 xtrabackup 的安装,如果你已经准备好了环境可以略过此步,这里介绍三种不同的方式。

Docker

个人推荐使用 docker 安装的方式,这里贴出完整的 docker-compose.yml,仅供参考:

version: "3.7"
services:
xtrabackup:
image: percona/percona-xtrabackup:2.4.28
container_name: xtrabackup
restart: "always"
command: bash -c "while true; do sleep 1; done"
volumes:
- "/home/docker/xtrabackup:/data"
# 这里需要把 MySQL 的数据目录映射到容器中,原因请查看下文的注意事项
- "/home/docker/mysql/data/:/var/lib/mysql"

command 命令是一个简单的 while 循环,用来保持容器运行,方便进入其中执行命令。

Debian/Ubuntu

从 Percona web 下载 deb 包

wget https://repo.percona.com/apt/percona-release_latest.$(lsb_release -sc)_all.deb

安装 dpkg,这一步需要 root 权限

sudo dpkg -i percona-release_latest.$(lsb_release -sc)_all.deb

启用存储库

percona-release enable-only tools release

apt 安装 xtrabackup

sudo apt install percona-xtrabackup-24

apt 安装 qpress, qpress 用于压缩备份

sudo apt install qpress

Red Hat/CentOs

安装 percona-release:

yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm

RHEL | Centos5 不支持直接从远程位置安装软件包,因此您需要先下载软件包并使用 rpm 手动安装:

wget https://repo.percona.com/yum/percona-release-latest.noarch.rpm
rpm -ivH percona-release-latest.noarch.rpm

启用存储库:

percona-release enable-only tools release

yum 安装 xtrabackup:

yum install percona-xtrabackup-24

yum 安装 qpress, qpress 用于压缩备份:

yum install qpress

注意事项

xtrabackup 在备份时需要访问 MySQL 的数据目录,且具备操作它的权限,所以 MySQL 和 xtrabackup 不在同一主机的情况下,需要把 MySQL 的数据拷贝到 xtrabakcup 所在的主机上。

常用概念和参数

xtrabakcup 有几个常见的概念:

  • 完整备份:顾名思义,就是完整备份 o.O
  • 恢复备份:顾名思义,就是恢复备份 O.o
  • 准备备份:这个不能顾名思义了,它用来把完整备份出来的数据文件进行一些处理,处理后的数据才能用于恢复备份
  • 增量备份:每一次完整备份的数据文件会很大,增量备份会在其基础上做备份,这样可以节省资源
  • 压缩备份:把备份文件进行压缩,以节省空间

这里是几个常用xtrabackup 命令参数,在后续不明白时,可以过来查询

  • --backup 制作一个备份并放在 --target-dir 中,这个是制作完整备份和增量备份的必要参数
  • --prepare 创建准备备份
  • --target-dir 指定备份文件的目录,不存在将自动创建
  • --apply-log-only 这个选项在准备备份时使用,让其只执行 redo 阶段,一般用在增量备份上
  • --host 指定 MySQL 的 host
  • --port 指定 MySQL 的 port
  • --password 指定 MySQL 的密码
  • --defaults-file 指定 my.cnf,不能是 my.cnf 的软链接
  • --datadir 指定 MySQL 的数据目录,一般会从 my.cnf 中读取

预备数据

我们先预备一下 MySQL 的测试数据,创建一个用于测试的数据库:

CREATE DATABASE test;

创建一个表,并填充数据:

CREATE TABLE `user`  (
`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; INSERT INTO `user` (name) VALUES ("oldme");
INSERT INTO `user` (name) VALUES ("newton");
INSERT INTO `user` (name) VALUES ("watt");

完整备份

创建备份

xtrabackup --backup --host=mysql --password=12345678 --target-dir=/data/backups/base/

完成后的效果:

查看备份出来的文件:ls -l /data/backups/base

然后我们删掉一条数据,以做恢复数据展示:

DELETE FROM `user` WHERE id=3

准备备份

必须先要准备备份后才能恢复数据:

xtrabackup --prepare --target-dir=/data/backups/base/

完成后的效果:

恢复备份

在恢复备份前需要关闭 MySQL 服务。

// base后面一定要带/
rsync -avrP /data/backups/base/ /var/lib/mysql/

恢复数据后更改文件所有权,如果是 docker 部署则略过:

chown -R mysql:mysql /var/lib/mysql

重启 MySQL 服务,查看恢复完成的数据:

SELECT* FROM `user`

id	name
--------------
1 oldme
2 newton
3 watt

增量备份

创建备份

在创建增量备份前,我们需要有一个完整备份:

xtrabackup --backup --host=mysql --password=12345678 --target-dir=/data/backups/base/

给数据库新增一条数据:

INSERT INTO `user` (name) VALUES ("Einstein");

然后以此为基础进行增量:

xtrabackup --backup --host=mysql --password=12345678 --target-dir=/data/backups/inc1 --incremental-basedir=/data/backups/base

/data/backups/inc1/ 目录现在应该包含增量文件,例如 ibdata1.delta 和 test/user.ibd.delta。

还可以以 inc1 为基础继续增量:

xtrabackup --backup --host=mysql --password=12345678 --target-dir=/data/backups/inc2 --incremental-basedir=/data/backups/inc1

删除数据,准备恢复:

DELETE FROM `user` WHERE id in (3,4)

准备备份与恢复

准备备份与完整备份不同,需要使用 --apply-log-only 选项来保持数据库一致。

先准备基础备份:

xtrabackup --prepare --apply-log-only --target-dir=/data/backups/base/

将增量备份应用到基础备份中:

xtrabackup --prepare --apply-log-only --target-dir=/data/backups/base --incremental-dir=/data/backups/inc1

然后执行同样的恢复备份命令,这点与完整备份的步骤一样,停止 MySQL 服务,执行命令,重启 MySQL:

// base后面一定要带/
rsync -avrP /data/backups/base/ /var/lib/mysql/

最后即可看到恢复的数据:

id	name
--------------
1 oldme
2 newton
3 watt
4 Einstein

压缩备份

创建压缩备份

xtrabackup --backup --compress --host=mysql --password=12345678 --target-dir=/data/backups/compressed/

可以使用 --compress-threads 配置多线程压缩,例如启用四个线程压缩:

xtrabackup --backup --compress --host=mysql --password=12345678 --compress-threads=4 --target-dir=/data/backups/compressed/

准备备份

在准备备份之前需要解压备份:

xtrabackup --decompress --target-dir=/data/backups/compressed/

解压完成后使用和完整备份一样的方式就可以恢复备份数据了。

xtrabackup 2.4 的介绍与使用的更多相关文章

  1. MySQL 使用XtraBackup的shell脚本介绍

    mysql_backup.sh是关于MySQL的一个使用XtraBackup做备份的shell脚本,实现了简单的完整备份和增量备份.以及邮件发送备份信息等功能.功能目前还比较简单,后续将继续完善和增加 ...

  2. 使用xtrabackup备份mysql数据库

    数据在一个企业里非常重要,因此经常需要备份数据库,确保出线故障时,可以立刻恢复数据到最新状态,目前常见的备份工具有mysqldump和xtrabackup,数据量较少时可以使用mysqldump,但随 ...

  3. Percona Xtrabackup备份mysql(转)

    add by zhj:另外,参考了Xtrabackup之innobackupex备份恢复详解,我用的是Xtrabackup2.2.6版本, 可以成功备份和恢复指定的数据库. 原文:http://www ...

  4. Percona Xtrabackup备份mysql全库及指定数据库(完整备份与增量备份)

    原文地址:http://www.tuicool.com/articles/RZRnq2 Xtrabackup简介 Percona XtraBackup是开源免费的MySQL数据库热备份软件,它能对In ...

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

    一.Percona Xtrabackup 简介 1.Xtrabackup  bin目录文件 介绍 1)innobackupex innobackupex 是xtrabackup的一个符号链接 . in ...

  6. (4.15)mysql备份还原——物理备份之XtraBackup的下载与安装

    关键词:mysql物理备份,XtraBackup,XtraBackup安装,XtraBackup下载 实践链接:https://www.cnblogs.com/gered/p/11147193.htm ...

  7. Percona Xtrabackup备份mysql大数据库(完整备份与增量备份)

    Percona Xtrabackup备份mysql大数据库(完整备份与增量备份)     文章目录 [隐藏] Xtrabackup简介 Xtrabackup安装 Xtrabackup工具介绍 inno ...

  8. MySQL 博客文章目录(2016-08-20更新)

    1 MySQL安装配置 Linux MySQL源码安装缺少ncurses-devel包 Linux平台卸载MySQL总结 Linux 卸载mysql-libs包出现错误 2  MySQL管理配置 My ...

  9. 第七章 mysql 事务索引以及触发器,视图等等,很重要又难一点点的部分

    [索引] 帮助快速查询 MyISAM ,InnoDB支持btree索引 Memory 支持 btree和hash索引 存储引擎支持 每个表至少16个索引   总索引长度至少256字节   创建索引的优 ...

  10. MySQL 博客文章目录(2017-02-18更新)

    1MySQL安装配置 Linux MySQL源码安装缺少ncurses-devel包 Linux平台卸载MySQL总结 Linux 卸载mysql-libs包出现错误 CentOS 7 安装MySQL ...

随机推荐

  1. vue报错解决Duplicate keys detected: ‘[object Object]’

    最近在做vue项目时遇到了报错 ​ Duplicate keys detected: '[object Object]'. This may cause an update error. ​ 由于这个 ...

  2. 机试练习(一)——Codeforces 784B Santa Claus and Keyboard Check

    最近在准备机试,对练习的机试题做个总结.之前没有学过C++,只学过C语言,但是实际用起来的时候发现C++是更适合机试的语言,因为它的库函数更多,能支持更多操作,将一些代码简化. 习惯了C语言定义字符串 ...

  3. PostgreSQL 10 文档: 系统表

    第 51 章 系统目录 目录 51.1. 概述 51.2. pg_aggregate 51.3. pg_am 51.4. pg_amop 51.5. pg_amproc 51.6. pg_attrde ...

  4. Hugging News #0724: Llama 2 登陆 Hugging Face、AI 开源游戏竞赛获奖选手公布!

    每一周,我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新,包括我们的产品和平台更新.社区活动.学习资源和内容更新.开源库和模型更新等,我们将其称之为「Hugging Ne ...

  5. javascript中一些难以理解的专有名词 1(也不是很专有)

    变量提升 变量提升:是指js代码执行过程中,js引擎把变量的声明和函数的声明提升到代码的开头的"行为". 变量和函数在代码里的位置是不会变的,而是在编译阶段被js引擎放入内存中. ...

  6. 记一次线上问题 → Deadlock 的分析与优化

    开心一刻 今天女朋友很生气 女朋友:我发现你们男的,都挺单纯的 我:这话怎么说 女朋友:脑袋里就只想三件事,搞钱,跟谁喝点,还有这娘们真好看 我:你错了,其实我们男人吧,每天只合计一件事 女朋友:啥事 ...

  7. Kubernetes: Kubectl 源码分析

    0. 前言 kubectl 看了也有一段时间,期间写了两篇设计模式的文章,是时候对 kubectl 做个回顾了. 1. kubectl 入口:Cobra kubectl 是 kubernetes 的命 ...

  8. 【博客重构之路】webman-admin安装指南

    原文地址[博客重构之路]webman-admin安装指南 视频地址[bilibili] webman是什么 webman是一款基于workerman开发的高性能HTTP服务框架.webman用于替代传 ...

  9. 使用在线Excel时,有哪些方法可以引入计算函数?

    摘要:本文由葡萄城技术团队于博客园原创并首发.转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 前言 在日常生活和工作中,我们都会或多或少的使用Excel中的 ...

  10. docker swarm 使用详解

    转载请注明出处: 1.docker swarm 的组成架构 一个基本的docker swarm 的架构如下: 它主要包含这几个核心组件: Manager节点(Manager Nodes): 管理节点是 ...