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.mzph.cn/news/24573.shtml

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

相关文章

简述静态网页和动态网页的区别。简述 Webl.0 和 Web2.0 的区别。安装tomcat8,配置服务启动脚本,部署jpress应用

静态网页和动态网页区别 静态网页和动态网页是两种常见的网页类型&#xff0c;它们在内容生成和交互方式上存在不同。 静态网页是在服务器上提前生成好的网页&#xff0c;它的内容在访问时不会发生变化。静态网页通常由HTML、CSS和JavaScript等静态文件组成&#xff0c;这些文…

【css问题】flex布局中,子标签宽度超出父标签宽度,导致布局出现问题

场景&#xff1a;文章标题过长时&#xff0c;只显示一行&#xff0c;且多余的部分用省略号显示。 最终效果图&#xff1a; 实现时&#xff0c;flex布局&#xff0c;出现问题&#xff1a; 发现text-overflow: ellipsis不生效&#xff0c;省略符根本没有出现。 而且因为设置了 …

《MySQL高级篇》十五、其他数据库日志

文章目录 1. MySQL支持的日志1.1 日志类型1.2 日志的弊端 2. 慢查询日志(slow query log)3. 通用查询日志3.1 问题场景3.2 查看当前状态3.3 启动日志3.4 查看日志3.5 停止日志3.6 删除\刷新日志 4. 错误日志(error log)4.1 启动日志4.2 查看日志4.3 删除\刷新日志4.4 MySQL8.0新…

ThreadLocal有内存泄漏问题吗

对于ThreadLocal的原理不了解或者连Java中的引用类型都不了解的可以看一下我的之前的一篇文章Java中的引用和ThreadLocal_鱼跃鹰飞的博客-CSDN博客 我这里也简单总结一下: 1. 每个Thread里都存储着一个成员变量&#xff0c;ThreadLocalMap 2. ThreadLocal本身不存储数据&…

flutter开发实战-实现首页分类目录入口切换功能

。 在开发中经常遇到首页的分类入口&#xff0c;如美团的美食团购、打车等入口&#xff0c;左右切换还可以分页更多展示。 一、使用flutter_swiper_null_safety 在pubspec.yaml引入 # 轮播图flutter_swiper_null_safety: ^1.0.2二、实现swiper分页代码 由于我这里按照一页8…

装饰器模式(C++)

定义 动态(组合)地给一个对象增加一些额外的职责。就增加功能而言&#xff0c;Decorator模式比生成子类(继承)更为灵活(消除重复代码&减少子类个数)。 一《设计模式》 GoF 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xf…

[openCV]基于拟合中线的智能车巡线方案V2

import cv2 as cv import os import numpy as np# 遍历文件夹函数 def getFileList(dir, Filelist, extNone):"""获取文件夹及其子文件夹中文件列表输入 dir&#xff1a;文件夹根目录输入 ext: 扩展名返回&#xff1a; 文件路径列表"""newDir d…

Unity学习参考文档和开发工具

☺ unity的官网文档&#xff1a;脚本 - Unity 手册 ■ 学习方式&#xff1a; 首先了解unity相关概述&#xff0c;快速认识unity编辑器&#xff0c;然后抓住重点的学&#xff1a;游戏对象、组件|C#脚本、预制体、UI ☺ 学习过程你会发现&#xff0c;其实Unity中主要是用c#进行开…

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]

目录 12、自由风格的CD操作发布 V1.0.0 版本修改代码并推送GitLab 中项目打 Tag 发布 V2.0.0 版本Jenkins 配置 tag 参数添加 Git 参数添加 checkout 命令修改构建命令配置修改 SSH 配置 部署 v1.0.0重新构建工程构建结果 部署 v2.0.0重新构建工程访问 部署v3.0.0 13、流水线任…

Jmeter函数助手(一)随机字符串(RandomString)

一、目标 实现一个请求单次调用&#xff0c;请求体里多个集合中的相同参数&#xff08;zxqs&#xff09;值随机从序列{01、02、03、03、04、05、06、07、08}中取 若使用CSV数据文件、用户参数等参数化手段&#xff0c;单次执行请求&#xff0c;请求体里多个集合中的相同参数&a…

传染病学模型 | Python实现基于使用受控SIR模型分析SARS-CoV-2疫情

效果一览 文章概述 传染病学模型 | Python实现基于使用受控 SIR 模型分析 SARS-CoV-2 疫情 源码设计 import jax.numpy as np import

webpack基础知识七:说说webpack proxy工作原理?为什么能解决跨域?

一、是什么 webpack proxy&#xff0c;即webpack提供的代理服务 基本行为就是接收客户端发送的请求后转发给其他服务器 其目的是为了便于开发者在开发模式下解决跨域问题&#xff08;浏览器安全策略限制&#xff09; 想要实现代理首先需要一个中间服务器&#xff0c;webpac…

Python 开发工具 Pycharm —— 使用技巧Lv.2

pydoc是python自带的一个文档生成工具&#xff0c;使用pydoc可以很方便的查看类和方法结构 本文主要介绍&#xff1a;1.查看文档的方法、2.html文档说明、3.注释方法、 一、查看文档的方法 **方法1&#xff1a;**启动本地服务&#xff0c;在web上查看文档 命令【python3 -m…

基于STM32CubeMX和keil采用通用定时器中断实现固定PWM可调PWM波输出分别实现LED闪烁与呼吸灯

文章目录 前言1. PWM波阐述2. 通用定时器2.1 为什么用TIM142.2 TIM14功能介绍2.3 一些配置参数解释2.4 PWM实现流程&中断2.4.1 非中断PWM输出(LED闪烁)2.4.2 中断PWM输出(LED呼吸灯) 3. STM32CubeMX配置3.1 GPIO配置3.2 时钟配置3.3 定时器相关参数配置3.4 Debug配置3.5 中…

ESP32-C2开发板 ESP8684芯片 兼容ESP32-C3开发

C2是一个芯片采用4毫米x 4毫米封装&#xff0c;与272 kB内存。它运行框架&#xff0c;例如ESP-Jumpstart和ESP造雨者&#xff0c;同时它也运行ESP-IDF。ESP-IDF是Espressif面向嵌入式物联网设备的开源实时操作系统&#xff0c;受到了全球用户的信赖。它由支持Espressif以及所有…

2023/8/5总结

主要实现了&#xff1a; 举报&#xff1a; 内容管理搜索的实现 管理员界面 还有消息没写&#xff0c;以及一些小细节

Linux修改系统语言

sudo dpkg-reconfigure locales 按pagedown键&#xff0c;移动红色光标到 zh_CN.UTF-8 UTF-8&#xff0c;空格标记*号&#xff08;没标记下一页没有这一项&#xff09;&#xff0c;回车。 下一页选择 zh_CN.UTF-8。 如果找不到 dpkg-reconfigure whereis dpkg-reconfigure …

HTML 初

前言 HTML的基本骨架 HTML基本骨架是构建网页的最基本的结果。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0">…

iOS——Block回调

先跟着我实现最简单的 Block 回调传参的使用&#xff0c;如果你能举一反三&#xff0c;基本上可以满足了 OC 中的开发需求。已经实现的同学可以跳到下一节。 首先解释一下我们例子要实现什么功能&#xff08;其实是烂大街又最形象的例子&#xff09;&#xff1a; 有两个视图控…

互感和励磁电感(激磁电感)的关系

互感器&#xff0c;变压器&#xff0c;他们之间有着千丝万缕的联系&#xff0c;自感&#xff0c;互感&#xff0c;激磁电感&#xff0c;漏感、耦合系数、理想互感器、理想变压器&#xff0c;这些东西的概念理解和相互之间的关系式。都搞明白了吗&#xff1f;