翼度科技»论坛 编程开发 mysql 查看内容

xtrabackup 2.4 的介绍与使用

2

主题

2

帖子

6

积分

新手上路

Rank: 1

积分
6
抄袭转载的太多,请认准原文链接: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,仅供参考:
  1. version: "3.7"
  2. services:
  3.     xtrabackup:
  4.         image: percona/percona-xtrabackup:2.4.28
  5.         container_name: xtrabackup
  6.         restart: "always"
  7.         command: bash -c "while true; do sleep 1; done"
  8.         volumes:
  9.             - "/home/docker/xtrabackup:/data"
  10.             # 这里需要把 MySQL 的数据目录映射到容器中,原因请查看下文的注意事项
  11.             - "/home/docker/mysql/data/:/var/lib/mysql"
复制代码
command 命令是一个简单的 while 循环,用来保持容器运行,方便进入其中执行命令。
Debian/Ubuntu

从 Percona web 下载 deb 包
  1. wget https://repo.percona.com/apt/percona-release_latest.$(lsb_release -sc)_all.deb
复制代码
安装 dpkg,这一步需要 root 权限
  1. sudo dpkg -i percona-release_latest.$(lsb_release -sc)_all.deb
复制代码
启用存储库
  1. percona-release enable-only tools release
复制代码
apt 安装 xtrabackup
  1. sudo apt install percona-xtrabackup-24
复制代码
apt 安装 qpress, qpress 用于压缩备份
  1. sudo apt install qpress
复制代码
Red Hat/CentOs

安装 percona-release:
  1. yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
复制代码
RHEL | Centos5 不支持直接从远程位置安装软件包,因此您需要先下载软件包并使用 rpm 手动安装:
  1. wget https://repo.percona.com/yum/percona-release-latest.noarch.rpm
  2. rpm -ivH percona-release-latest.noarch.rpm
复制代码
启用存储库:
  1. percona-release enable-only tools release
复制代码
yum 安装 xtrabackup:
  1. yum install percona-xtrabackup-24
复制代码
yum 安装 qpress, qpress 用于压缩备份:
  1. 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 的测试数据,创建一个用于测试的数据库:
  1. CREATE DATABASE test;
复制代码
创建一个表,并填充数据:
  1. CREATE TABLE `user`  (
  2.   `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  3.   `name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  4.   PRIMARY KEY (`id`) USING BTREE
  5. ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
  6. INSERT INTO `user` (name) VALUES ("oldme");
  7. INSERT INTO `user` (name) VALUES ("newton");
  8. INSERT INTO `user` (name) VALUES ("watt");
复制代码
完整备份

创建备份
  1. xtrabackup --backup --host=mysql --password=12345678 --target-dir=/data/backups/base/
复制代码
完成后的效果:

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

然后我们删掉一条数据,以做恢复数据展示:
  1. DELETE FROM `user` WHERE id=3
复制代码
准备备份

必须先要准备备份后才能恢复数据:
  1. xtrabackup --prepare --target-dir=/data/backups/base/
复制代码
完成后的效果:

恢复备份

在恢复备份前需要关闭 MySQL 服务。
  1. // base后面一定要带/
  2. rsync -avrP /data/backups/base/ /var/lib/mysql/
复制代码
恢复数据后更改文件所有权,如果是 docker 部署则略过:
  1. chown -R mysql:mysql /var/lib/mysql
复制代码
重启 MySQL 服务,查看恢复完成的数据:
  1. SELECT* FROM `user`
  2. id        name
  3. --------------
  4. 1        oldme
  5. 2        newton
  6. 3        watt
复制代码
增量备份

创建备份

在创建增量备份前,我们需要有一个完整备份:
  1. xtrabackup --backup --host=mysql --password=12345678 --target-dir=/data/backups/base/
复制代码
给数据库新增一条数据:
  1. INSERT INTO `user` (name) VALUES ("Einstein");
复制代码
然后以此为基础进行增量:
  1. 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 为基础继续增量:
  1. xtrabackup --backup --host=mysql --password=12345678 --target-dir=/data/backups/inc2 --incremental-basedir=/data/backups/inc1
复制代码
删除数据,准备恢复:
  1. DELETE FROM `user` WHERE id in (3,4)
复制代码
准备备份与恢复

准备备份与完整备份不同,需要使用 --apply-log-only 选项来保持数据库一致。
先准备基础备份:
  1. xtrabackup --prepare --apply-log-only --target-dir=/data/backups/base/
复制代码
将增量备份应用到基础备份中:
  1. xtrabackup --prepare --apply-log-only --target-dir=/data/backups/base --incremental-dir=/data/backups/inc1
复制代码
然后执行同样的恢复备份命令,这点与完整备份的步骤一样,停止 MySQL 服务,执行命令,重启 MySQL:
  1. // base后面一定要带/
  2. rsync -avrP /data/backups/base/ /var/lib/mysql/
复制代码
最后即可看到恢复的数据:
  1. id        name
  2. --------------
  3. 1        oldme
  4. 2        newton
  5. 3        watt
  6. 4        Einstein
复制代码
压缩备份

创建压缩备份
  1. xtrabackup --backup --compress --host=mysql --password=12345678 --target-dir=/data/backups/compressed/
复制代码
可以使用 --compress-threads 配置多线程压缩,例如启用四个线程压缩:
  1. xtrabackup --backup --compress --host=mysql --password=12345678 --compress-threads=4 --target-dir=/data/backups/compressed/
复制代码
准备备份

在准备备份之前需要解压备份:
  1. xtrabackup --decompress --target-dir=/data/backups/compressed/
复制代码
解压完成后使用和完整备份一样的方式就可以恢复备份数据了。

来源:https://www.cnblogs.com/oldme/p/17798080.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具