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

news2024/12/22 19:52:55

一、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: mysql
    image: mysql:8.0.32
    user: 999:999
    environment:
      - MYSQL_ROOT_PASSWORD=1qaz@WSX
    volumes:
      - data_volume:/var/lib/mysql
      - backup_volume:/backup
      - /root/apps/mysql/my.cnf:/etc/my.cnf:ro
      - /etc/timezone:/etc/timezone:ro
    logging: *default-logging
    ports:
      - "3306:3306"
  xtrabackup-command:
    container_name: xtrabackup-command-line
    image: percona/percona-xtrabackup:8.0.32
    user: 999:999
    restart: always
    depends_on:
      - mysql
    volumes_from:
      - mysql
    command: tail -f /dev/null
volumes:
  data_volume:
    driver: local
  backup_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.coloradmin.cn/o/841197.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

react18之08自定义hook (简单的axios-get、修改浏览器title、localStorage、获取滚动条位置、img转换为base64)

目录 react18之自定义hook ()01&#xff1a;自定义一个 简单的axios hook 发起get请求useHttp.jsx使用useHttp hook效果 02&#xff1a;自定义一个 修改浏览器title hook03&#xff1a;自定义一个 localStorage(获取、存储、移除) hookuseLocalStorage.jsx使用hook效果 04&…

【JVM】 垃圾回收篇——自问自答(1)

Q什么是垃圾&#xff1a; 运行程序中&#xff0c;没用任何指针指向的对象。 Q为什么需要垃圾回收&#xff1f; 内存只分配&#xff0c;不整理回收&#xff0c;迟早会被消耗完。 内存碎片的整理&#xff0c;为新对象腾出空间 没有GC程序无法正常进行。 Q 哪些区域有GC&#…

【C++学习】STL容器——list

目录 一、list的介绍及使用 1.1 list的介绍 1.2 list的使用 1.2.1 list的构造 1.2.2 list iterator的使用 1.2.3 list capacity 1.2.4 list element access 1.2.5 list modifiers 1.2.6 list 迭代器失效 二、list的模拟实现 2.1 模拟实现list 三、list和vector的对比…

On Evaluation of Embodied Navigation Agents 论文阅读

论文信息 题目&#xff1a;On Evaluation of Embodied Navigation Agents 作者&#xff1a;Peter Anderson&#xff0c;Angel Chang 来源&#xff1a;arXiv 时间&#xff1a;2018 Abstract 过去两年&#xff0c;导航方面的创造性工作激增。这种创造性的输出产生了大量有时不…

idea-Invalidate caches选项

Clear file system cache and Local History: 清除 IntelliJ IDEA 缓存和本地历史记录&#xff0c;注意要保存现有的信息 Clear VCS Log caches and indexes: remove the cache and indexes of the VCS Log. 这个选项的意思是清除版本控制系统日志的缓存和索引。VCS Log 是 In…

VBA技术资料MF40:VBA_计数筛选状态的数据行数

【分享成果&#xff0c;随喜正能量】人唯有与喜欢的事物发展关系&#xff0c;不管是人或者是物还是事&#xff0c;包括喜欢自己外表、个性的部分&#xff0c;喜欢自己做的事&#xff0c;喜欢自己的创造&#xff0c;喜欢的风景……才给人带来对自己的认同。在与喜欢的事物互动关…

从小白到数据库达人!Mysql优化让你的社招面试无往不利!

大家好&#xff0c;我是小米&#xff0c;在这个美好的时刻又迎来了我们的技术小窝。今天&#xff0c;我们要聊一聊一个在数据库领域中无比重要的话题 —— Mysql 优化&#xff01;是不是感觉很兴奋呢&#xff1f;废话不多说&#xff0c;让我们直接进入今天的主题。 背景知识 …

Hadoop理论及实践-HDFS的Namenode及Datanode(参考Hadoop官网)

HDFS有什么特点&#xff0c;被设计做什么 Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统。有一下几个特点&#xff1a; HDFS是一个高度容错性的系统&#xff0c;具有高容错、高可靠性、高扩展性的特点&#xff0c;适合部…

2.两数相加(题解)

两数相加 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这两个数都…

数学建模—多元线性回归分析(+lasso回归的操作)

第一部分&#xff1a;回归分析的介绍 定义&#xff1a;回归分析是数据分析中最基础也是最重要的分析工具&#xff0c;绝大多数的数据分析问题&#xff0c;都可以使用回归的思想来解决。回归分析的人数就是&#xff0c;通过研究自变量X和因变量Y的相关关系&#xff0c;尝试去解释…

MongoDB 使用总结

&#x1f353; 简介&#xff1a;java系列技术分享(&#x1f449;持续更新中…&#x1f525;) &#x1f353; 初衷:一起学习、一起进步、坚持不懈 &#x1f353; 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正&#x1f64f; &#x1f353; 希望这篇文章对你有所帮助,欢…

MyCat配置文件schema.xml讲解

1.MyCat配置 1.1 schema标签 如果checkSQLschema配置的为false&#xff0c;那么执行DB01.TB_ORDER时就会报错&#xff0c;必须用use切换逻辑库以后才能进行查询。 sqlMaxLimit如果未指定limit进行查询&#xff0c;列表查询模式默认为100,最多只查询100条。因为用mycat后默认数…

【多线程】synchronized 原理

1. 写在前面 本章节主要介绍 synchronized 的一些内部优化机制&#xff0c;这些机制存在的目的呢就是让 synchronized 这把锁更高效更好用&#xff01; 2. 锁升级/锁膨胀 JVM 将 synchronized 锁分为以下四种状态&#xff1a; 无锁&#xff0c;偏向锁&#xff0c;轻量级锁&…

ENSP软件的基本使用命令(第三十一课)

ENSP软件的基本使用命令(第三十一课) 下面的图片是今天操作的核心基础操作 1 命令行页面 交换机 路由器 PC机 分别展示一下 页面的样子 2 基本命令结构

K8S系列文章 之 容器存储基础 Volume

Volume Volume是容器数据卷。我们经常创建删除一些容器&#xff0c;但有时候需要保留容器中的一些数据&#xff0c;这时候就用到了Volume。它也是容器之间数据共享的技术&#xff0c;可以将容器中产生的数据同步到本地。实际就是把容器中的目录挂载到运行着容器的服务器或个人…

Last-Mile Embodied Visual Navigation 论文阅读

论文阅读 题目&#xff1a;Last-Mile Embodied Visual Navigation 作者&#xff1a;JustinWasserman, Karmesh Yadav 来源&#xff1a;CoRL 时间&#xff1a;2023 代码地址&#xff1a;https://jbwasse2.github.io/portfolio/SLING Abstract 现实的长期任务&#xff08;例如…

Spring Cloud Gateway过滤器GlobalFilter详解

一、过滤器的场景 在springCloud架构中&#xff0c;网关是必不可少的组件&#xff0c;它用于服务路由的转发。对客户端进行屏蔽微服务的具体细节&#xff0c;客户端只需要和网关进行交互。所以网关顾名思义&#xff0c;就是网络的一个关卡。它就是一座城的城门守卫。所以这个守…

10亿数据、查询<10s,论基于OLAP搭建广告系统的正确姿势

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 由于流量红利逐渐消退&#xff0c;越来越多的广告企业和从业者开始探索精细化营销的新路径&#xff0c;取代以往的全流量、粗放式的广告轰炸。精细化营销意味着要在…

抓包神器-burp

Burp Suite是一款信息安全从业人员必备的集成型的渗透测试工具&#xff0c;它采用自动测试和半自动测试的方式&#xff0c;包含了 Proxy,Spider,Scanner,Intruder,Repeater,Sequencer,Decoder,Comparer等工具模块。通过拦截HTTP/HTTPS的web数据包&#xff0c;充当浏览器和相关应…

机器学习常用Python库安装

机器学习常用Python库安装 作者日期版本说明Dog Tao2022.06.16V1.0开始建立文档 文章目录 机器学习常用Python库安装Anaconda简介使用镜像源配置 Pip简介镜像源配置 CUDAPytorch安装旧版本 TensorFlowGPU支持说明 DGL简介安装DGLLife RDKitscikit-multilearn Anaconda 简介 …