Docker环境下MySQL备份恢复工具XtraBackup使用详解 | Spring Cloud 62

一、XtraBackup 简介

Percona XtraBackup是一个开源的MySQLMariaDB数据库备份工具,它能够创建高性能、一致性的备份,并且对生产环境的影响很小。Percona XtraBackup通过在不停止MySQL服务器的情况下,复制InnoDB存储引擎的数据文件和事务日志,来实现备份和还原操作。

Percona XtraBackup的主要特点如下:

  • 高性能备份:Percona XtraBackup能够以并行方式备份数据库,提供快速备份速度,并且对生产系统影响较小。

  • 一致性备份:Percona XtraBackup使用InnoDB特定的算法来确保备份的一致性,即备份的数据文件和事务日志是同一时刻的状态。

  • 增量备份:Percona XtraBackup支持增量备份,可以根据之前的全量备份来创建增量备份,减少备份时间和存储空间的消耗。

  • 支持压缩和加密:Percona XtraBackup可以在备份过程中使用压缩算法来减小备份文件的大小,还可以对备份文件进行加密,提高数据的安全性。

  • 灵活的备份恢复:Percona XtraBackup支持将备份文件复制回数据库目录进行恢复,也支持以流的方式输出备份数据进行恢复。

  • 兼容性:Percona XtraBackup兼容MySQLMariaDB,可以在不同版本的数据库上使用。

总之,Percona XtraBackup是一个强大而灵活的数据库备份工具,它可以帮助数据库管理员轻松地创建可靠的备份,并在需要时进行高效的还原操作。无论是用于生产环境的数据保护,还是用于开发和测试环境的数据复制,Percona XtraBackup都是一个可靠的选择。

官网地址:https://docs.percona.com/percona-xtrabackup/8.0/

二、环境及部署

2.1 运行环境介绍

本章节所有演示操作均在Docker环境下。

在这里插入图片描述

  • docker 版本 20.10.6
  • docker-compose 版本1.28.5

2.2 Mysql及XtraBackup配置

目录结构如下:

在这里插入图片描述

Mysql配置文件my.cnf

# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M# Remove leading # to revert to previous value for default_authentication_plugin,
# this will increase compatibility with older clients. For background, see:
# https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin
# default-authentication-plugin=mysql_native_password
default-time_zone='+8:00'
log-bin
log_bin_trust_function_creators=1
lower_case_table_names=1
skip-host-cache
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=/var/lib/mysql-files
user=mysql
innodb_undo_tablespaces=2
innodb_read_only=off
pid-file=/var/run/mysqld/mysqld.pid
[client]
socket=/var/run/mysqld/mysqld.sock# !includedir /etc/mysql/conf.d/

docker-compose.yml

version: "3.8"
# 通用日志设置
x-logging:&default-logging# 日志大小和数量options:max-size: "100m"max-file: "3"# 文件存储类型driver: json-file
services:mysql:container_name: mysqlimage: mysql:8.0.32user: 999:999environment:- MYSQL_ROOT_PASSWORD=1qaz@WSXvolumes:- data_volume:/var/lib/mysql- backup_volume:/backup- /root/apps/mysql/my.cnf:/etc/my.cnf:ro- /etc/timezone:/etc/timezone:rologging: *default-loggingports:- "3306:3306"xtrabackup-command:container_name: xtrabackup-command-lineimage: percona/percona-xtrabackup:8.0.32user: 999:999restart: alwaysdepends_on:- mysqlvolumes_from:- mysqlcommand: tail -f /dev/null
volumes:data_volume:driver: localbackup_volume:driver: local

注意事项一:

  • xtrabackup:请XtraBackup版本和Mysql版本保持一致。
  • volumes_from:表示和docker mysql容器使用相同的容器卷信息
  • user:表示容器运行使用指定的用户,mysqlUIDGID999:999xtrabackup用户与mysql相同出现避免文件权限问题。
  • command: tail -f /dev/null:通过此命令将容器xtrabackup-command-line进行服务常驻,方便后续使用过程演示。

注意事项二:

  • data_volume:使用本地数据卷绑定,默认位置:/var/lib/docker/volumes/mysql_data_volume/_data,因上文中提到容器运行使用指定的用户,需更改此目录权限,容器外部执行:chmod 777 -R /var/lib/docker/volumes/mysql_data_volume/_data
  • backup_volume:使用本地数据卷绑定,默认位置:/var/lib/docker/volumes/mysql_backup_volume/_data,因上文中提到容器运行使用指定的用户,需更改此目录权限,容器外部执行:chmod 777 -R /var/lib/docker/volumes/mysql_backup_volume/_data

2.3 启动服务

cd /root/apps/mysql
docker-compose up -d

在这里插入图片描述

2.4 准备测试数据

create DATABASE t1;
use t1;
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (`id` bigint NOT NULL AUTO_INCREMENT,`name` varchar(20) DEFAULT NULL,`gender` int NULL DEFAULT 0,`birthday` varchar(10) DEFAULT NULL,`address` varchar(100) DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1;
INSERT INTO `user` ( id, name, gender, birthday, address ) VALUES( 1, '张三', 1, '2023-08-06', '黑龙江');
select * from `user`;

在这里插入图片描述

三、XtraBackup使用详解

3.1 常用参数介绍

Percona XtraBackup中一些常用参数的说明及其默认值:

  • --backup:执行备份操作,默认为启用。

  • --target-dir=<目录路径>:指定备份文件存储的目录路径。

  • --incremental-basedir=<目录路径>:指定增量备份的基准目录路径,表示该增量备份是基于哪个全量备份进行的。

  • --prepare:对备份文件执行准备操作,默认为禁用。

  • --copy-back:将备份文件复制回数据库目录,用于还原操作,默认为禁用。

  • --apply-log:在备份文件上应用事务日志,用于还原操作,默认为禁用。

  • --datadir=<目录路径>:指定数据库的数据目录路径,默认为MySQL配置文件中指定的数据目录。

  • --defaults-file=<文件路径>:指定用于备份和还原的配置文件路径,默认为MySQL的默认配置文件路径。

  • --user=<用户名>:指定连接数据库时使用的用户名,默认为当前系统用户。

  • --password=<密码>:指定连接数据库时使用的密码,默认为空。

  • --host=<主机名>:指定连接数据库时使用的主机名,默认为localhost。

  • --port=<端口号>:指定连接数据库时使用的端口号,默认为3306。

  • --compress:在备份过程中使用压缩算法以减小备份文件的大小,默认为禁用。

  • --compress-threads=<线程数>:指定用于压缩备份文件的线程数,默认为1。

  • --encrypt:在备份过程中对备份文件进行加密,默认为禁用。

  • --encrypt-key=<密钥>:指定用于备份文件加密的密钥。

  • --stream=<流类型>:将备份数据以流的方式输出到标准输出、文件或网络套接字,默认为禁用。

3.2 完整备份及恢复

3.2.1 进入容器

docker exec -it xtrabackup-command-line /bin/bash

在这里插入图片描述

3.2.2 创建完整备份

xtrabackup --backup --datadir=/var/lib/mysql --target-dir=/backup/full --user=root --password="1qaz@WSX" --port=3306 --host=192.168.0.50 --no-server-version-check

注意事项:

  • 目标目录不存在,XtraBackup 会创建它。
  • 目录存在且为空,XtraBackup 将成功。
  • 目录存在且为不为空,XtraBackup不会覆盖现有文件,它会在运行时失败,显示系统错误17file exists

在这里插入图片描述

3.2.3 查看完整备份

ls -lh /backup/full

注意事项:

  • 备份可能需要很长时间,具体取决于数据库的大小。随时取消是安全的,因为XtraBackup不会修改数据库。

在这里插入图片描述

3.2.4 模拟原数据库损坏

  • 关闭容器
docker stop mysql
  • 删除数据库文件
cd /var/lib/docker/volumes/mysql_data_volume/_data
rm -rf *

在这里插入图片描述

3.2.5 准备完整备份

创建备份后,您需要对其进行准备以进行还原。在准备好数据文件之前,数据文件在时间点上是不一致的,因为它们是在程序运行的不同时间复制的,并且在执行此操作时可能已被更改。

如果你试图用这些数据文件启动InnoDB,它会检测到损坏并停止工作,以避免在损坏的数据上运行。该步骤使文件在单个时刻完全一致,因此您可以在它们上运行InnoDB

您可以在任何机器上运行准备操作;它不需要位于原始服务器或要恢复到的服务器上。您可以将备份复制到实用工具服务器并在那里进行准备。

请注意,Percona XtraBackup 8.0只能准备MySQL 8.0Percona Server for MySQL 8.0Percona XtraDB Cluster 8.0数据库的备份。不支持8.0之前的版本。

在准备操作期间,xtrabackup启动了一种经过修改的嵌入式InnoDBextrabackup链接的库)。这些修改对于禁用InnoDB标准安全检查是必要的,例如:日志文件大小不合适。此警告不适用于处理备份。这些修改仅适用于extrabackup二进制文件;您不需要修改后的InnoDB即可使用xtrabackup进行备份。

准备步骤使用这个“嵌入式InnoDB”,使用复制的日志文件对复制的数据文件执行崩溃恢复。该步骤使用起来非常简单:您只需使用选项运行xtrabackup,并告诉它要准备哪个目录。具体操作如下:

xtrabackup --prepare --target-dir=/backup/full

注意事项:

  • 不建议在准备备份时中断XtraBackup过程,因为这可能会导致数据文件损坏并且备份将变得不可用。如果准备过程中断,则不保证备份有效性。
  • 如果希望备份作为进一步增量备份的基础,则应在准备备份时使用--apply-log-only选项,否则将无法对其应用增量备份。有关更多详细下文介绍。

完成此操作后,您应该会看到如下所示的消息,其中 LSN 的值将再次取决于您的系统:InnoDB shutdown
在这里插入图片描述

3.2.6 完整备份还原

为方便起见,xtrabackup 二进制文件可以选择将备份复制到服务器的 datadir

xtrabackup --copy-back --target-dir=/backup/full

注意事项:

  • 在还原备份之前,数据目录必须为空。此外,请务必注意,在执行还原之前需要关闭MySQL服务。您无法还原到正在运行的 mysqld 实例的数据目录(导入部分备份时除外)。
  • 应该检查还原的文件是否具有正确的所有权和权限,需要时可执行:chown -R mysql:mysql /var/lib/mysql进行所有权更改。

在这里插入图片描述

3.2.7 启动数据库及验证

docker restart mysql
use t1;
select * from `user`;

在这里插入图片描述
至此完整备份及恢复介绍完毕。

3.3 增量备份及恢复

3.3.1 创建完整备份

注意事项:

  • 需先清空/var/lib/docker/volumes/mysql_backup_volume/_data/full目录

详见上文3.2.13.2.23.2.3章节,操作步骤及命令一致

3.3.2 添加增量数据1️⃣

use t1;
INSERT INTO `user` ( id, name, gender, birthday, address ) VALUES(4, '七七', 1, '2023-08-06', '海南');
select * from `user`;

3.3.3 创建增量备份1️⃣

xtrabackup --backup --target-dir=/backup/inc1 --incremental-basedir=/backup/full --user=root --password="1qaz@WSX" --port=3306 --host=192.168.0.50 --no-server-version-check

在这里插入图片描述

3.3.4 添加增量数据2️⃣

use t1;
INSERT INTO `user` ( id, name, gender, birthday, address ) VALUES(5, '八八', 1, '2023-08-06', '合肥');
select * from `user`;

3.3.5 创建增量备份2️⃣

xtrabackup --backup --target-dir=/backup/inc2 --incremental-basedir=/backup/inc1 --user=root --password="1qaz@WSX" --port=3306 --host=192.168.0.50 --no-server-version-check

在这里插入图片描述

3.3.6 准备备份

增量备份的步骤与完整备份的步骤不同。在完全备份中,执行两种类型的操作以使数据库保持一致:已提交的事务从日志文件相对于数据文件重播,未提交的事务回滚。

在准备增量备份时,您必须跳过未提交事务的回滚,因为备份时未提交的事务可能正在进行中,而且很可能会在下一次增量备份中提交。您应该使用--prepare --apply-log-only选项来阻止回滚阶段。

3.3.6.1 准备完整备份

xtrabackup --prepare --apply-log-only --target-dir=/backup/full --user=root --password="1qaz@WSX" --port=3306 --host=192.168.0.50 --no-server-version-check

注意事项:
--prepare--apply-log-only:通过配置来阻止回滚阶段。

在这里插入图片描述

3.3.6.2 准备增量备份1️⃣

将第一个增量备份应用于完整备份,请运行以下命令:

xtrabackup --prepare --apply-log-only --target-dir=/backup/full --incremental-dir=/backup/inc1 --user=root --password="1qaz@WSX" --port=3306 --host=192.168.0.50 --no-server-version-check

注意事项:

  • 此备份实际上可以安全地按原样还原,即使已跳过回滚阶段也是如此。如果您还原它并启动MySQLInnoDB将检测到未执行回滚阶段,并且它将在后台执行此操作,就像通常在启动时进行崩溃恢复一样。它将通知您数据库未正常关闭。
  • 最终数据在/backup/full目录中。

在这里插入图片描述

3.3.6.3准备增量备份2️⃣

准备第二个增量备份的过程与第一个类似:

xtrabackup --prepare --target-dir=/backup/full --incremental-dir=/backup/inc2 --user=root --password="1qaz@WSX" --port=3306 --host=192.168.0.50 --no-server-version-check

注意事项:
---apply-log-only:在合并增量备份(最后一个备份除外)时应使用。这就是上一行不包含该选项的原因。即使在最后一步中使用了 ,备份仍将保持一致,但在这种情况下,服务器将执行回滚阶段。

在这里插入图片描述

3.3.7 模拟原数据库损坏

详见上文3.2.4章节,操作步骤及命令一致

3.2.8 完整备份还原

xtrabackup --copy-back --target-dir=/backup/full

在这里插入图片描述

3.2.7 启动数据库及验证

docker restart mysql
use t1;
select * from `user`;

在这里插入图片描述
至此增量备份及恢复介绍完毕。

3.3 其他

关于XtraBackup压缩备份及部分备份稍后整理介绍。

参考:https://blog.51cto.com/u_11750496/6753459

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/85318.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

css实现,正常情况下div从左到右一次排列,宽度超出时,右侧最后一个div固定住,左侧其他div滚动

需求:正常情况下 宽度超出时: 实现: <templete><div class"jieduanbox"><div v-for"(item, index) in stageList" :key"index" style"display: inline-block">.......</div><div class"rightBtn&q…

面向云思考安全

Gartner最近的一项研究表明&#xff0c;到 2025 年&#xff0c;85% 的企业会采用云战略&#xff0c;虽然这一数字是面向全球的&#xff0c;但可以看到在中国的环境中&#xff0c;基于云所带来的优势&#xff0c;越来越多的企业也同样开始积极向云转型。 但同时&#xff0c;有报…

39 printf 的输出到设备层的调试

前言 在前面 printf 的调试 我们只是调试到了 glibc 调用系统调用, 封装了参数 stdout, 带输出的字符缓冲, 以及待输出字符长度 然后内核这边 只是到了 write 的系统调用, 并未向下细看 我们这里 稍微向下 细追一下, 看看 到达设备层面 这里是怎么具体的 impl 的 测试用例…

Android Studio 屏幕适配

Android开发屏幕适配流程 首先studio中没有ScreenMatch这个插件的&#xff0c;下去现在这个插件 点击File->settings->Plugins->(搜索ScreenMatch插件)&#xff0c;点击下载&#xff0c;应用重启Studio即可&#xff0c;如下图 在values下 创建dimens.xml&#xff0c…

【云原生】Kubernetes控制器中DaemonSet与Job的使用

目录 DaemonSet 1 什么是 DaemonSet 2 使用 DaemonSet Job 1 什么是 Job 2 使用 Job 3 自动清理完成的 Job 控制器无法解决问题 DaemonSet 1 什么是 DaemonSet DaemonSet | Kubernetes DaemonSet 确保全部&#xff08;或者某些&#xff09;节点上运行一个 Pod 的副本…

解决Centos/Linux操作系统安装 uWSGI项目报错

解决linux 操作系统编译uWSGI源码报错 最近在学习在Linux操作系统中使用uWSGI项目部署django项目,在使用源码安装uWSGI项目的时候报错。 报错如下&#xff1a; In file included from plugins/python/python_plugin.c:1:0: plugins/python/uwsgi_python.h:4:20: 致命错误&…

如何创建51单片机KEIL工程

如何创建51单片机KEIL工程步骤&#xff1a; &#xff08;1&#xff09;打开keil软件&#xff0c;点击工具栏-Project&#xff0c;选择创建新的工程&#xff1b; &#xff08;2&#xff09;然后给工程命名&#xff0c;文章以project为例&#xff0c;然后点击保存 &#xff08…

SpringBoot自动装配及run方法原理探究

自动装配 1、pom.xml spring-boot-dependencies&#xff1a;核心依赖在父工程中&#xff01;我们在写或者引入一些SpringBoot依赖的时候&#xff0c;不需要指定版本&#xff0c;就因为有这些版本仓库 1.1 其中它主要是依赖一个父工程&#xff0c;作用是管理项目的资源过滤及…

buildroot使用介绍

buildroot是Linux平台上一个构建嵌入式Linux系统的框架。整个Buildroot是由Makefile脚本和Kconfig配置文件构成的。你可以和编译Linux内核一样&#xff0c;通过buildroot配置&#xff0c;menuconfig修改&#xff0c;编译出一个完整的可以直接烧写到机器上运行的Linux系统软件(包…

助力农村金融机构数字化转型,原点安全将出席“第十三届中国农村金融机构信息化发展创新大会”

农村金融机构作为服务“三农”的主力军&#xff0c;在我国金融体系中扮演着重要的角色。近年来&#xff0c;我国农村金融机构积极贯彻落实人民银行《金融科技发展规划&#xff08;2022—2025年&#xff09;》中国银保办公厅《关于银行业保险业数字化转型的指导意见》的相关措施…

ModaHub魔搭社区——Milvus Cloud向量数据库

向量数据库:在AI时代的快速发展与应用 摘要: 随着人工智能技术的不断进步,向量数据库在处理大规模数据方面发挥着越来越重要的作用。本文介绍了向量数据库的基本概念、应用场景和技术挑战,并详细阐述了Milvus Cloud作为典型的向量数据库产品的技术特点、性能优化和应用案例…

算法练习--数组相关

文章目录 爬楼梯问题裴波那契数列两数之和 [数组]合并两个有序数组移动零找到所有数组中消失的数字三数之和 爬楼梯问题 输入n阶楼梯&#xff0c;每次爬1或者2个台阶&#xff0c;有多少种方法可以爬到楼顶&#xff1f; 示例1&#xff1a;输入2&#xff0c; 输出2 一次爬2阶&a…

MySQL_约束、多表关系

约束 概念&#xff1a;就是用来作用表中字段的规则&#xff0c;用于限制存储在表中的数据。 目的&#xff1a;保证数据库中数据的正确性&#xff0c;有效性和完整性。 约束演示 #定义一个学生表&#xff0c;表中要求如下&#xff1a; #sn 表示学生学号&#xff0c;要求使用 …

伪原创神码ai怎么样【php源码】

这篇文章主要介绍了python汉化补丁包下载&#xff0c;具有一定借鉴价值&#xff0c;需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获&#xff0c;下面让小编带着大家一起了解一下。 火车头采集ai伪原创插件截图&#xff1a; ** Spyder汉化&#xff08;python汉化&…

栈和队列详解(2)

目录 一、什么是队列&#xff1f; 二、创建一个我们自己的队列 1.前置准备 1.1需要的三个文件 1.2结构体的创建和头文件的引用 2.接口的实现 2.1初始化队列 2.2入队 2.3队列元素个数和判空 2.4取队头元素和队尾元素 2.5出队 2.6摧毁队列 2.7测试接口 三、所有代码 1.…

24届近5年东华大学自动化考研院校分析

今天给大家带来的是东华大学控制考研分析 满满干货&#xff5e;还不快快点赞收藏 一、东华大学 学校简介 东华大学&#xff08;Donghua University&#xff09;&#xff0c;地处上海市&#xff0c;是教育部直属全国重点大学&#xff0c;国家“双一流”、“211工程”建设高校…

无锚框原理 TOOD:Task-aligned One-stage Object Detection

无锚框原理 TOOD&#xff1a;Task-aligned One-stage Object Detection 一 摘要二 引言TOOD设计 三 具体设计Task-aligned Head任务对齐的预测器 TAP预测对齐 TAL 任务对齐学习Task-aligned Sample Assignment多任务损失 一 摘要 一阶段目标检测通常通过优化两个子任务来实现&…

爬虫017_urllib库_get请求的quote方法_urlencode方法_---python工作笔记036

按行来看get请求方式 比如这个地址 上面这个地址复制粘贴过来以后 可以看到周杰伦变成了一堆的Unicode编码了 所以这个时候我们看,我们说https这里,用了UA反爬,所以这里 我们构建一个自定义的Request对象,里面要包含Us

优秀项目团队最突出的5项重要特征

一个优秀的开发团队&#xff0c;对于软件项目而言&#xff0c;其重要性不言而喻。否则项目团队一盘散沙&#xff0c;直接影响项目准时保质保量地交付。一般从大家的认可度来说&#xff0c;优秀团队最突出的特征&#xff0c;主要集中在以下几个方面&#xff1a; 1、目标明确 优秀…

.netcore下grpc概述

一、什么是grpc 是一种与语言无关的高性能远程过程调用 (RPC) 框架。基于http/2标准设计&#xff0c;提供了头部压缩、tcp连接上的多路复用、流量控制、流式处理&#xff08;客户端流/服务端流/双向流&#xff09;。提供统一使用的.proto文件&#xff0c;它定义 grpc 服务和消…