MySQL运维实战之备份和恢复(8.4)xtrabackup恢复全量备份

作者:俊达
恢复全量备份大致可以分成以下几步:解压备份文件、prepare备份文件、将数据copy到目标实例相关目录、启动数据库实例。

解压文件

如果备份时使用了xbstream,需要先解压备份文件。
我们备份时使用了–stream=xbstream和gzip压缩,先使用gunzip接解压缩,再使用xbstream将文件提取出来。

# gunzip backup_full.gz# xbstream -x -v < backup_full
ibdata1
sys/sys_config.ibd
demo/tb.ibd
demo/taa.ibd
......

xbstream使用参数-x提取文件,加上参数-v后,会输出解压的文件列表。

应用redo日志

解压完成后,需要使用xtrabackup --prepare命令,将xtrabackup_logfile应用到备份的数据文件中,将数据库恢复到备份结束时的状态。

xtrabackup --prepare命令会根据xtrabackup_checkpoints文件中记录的last_lsn来确定需要应用哪些日志。

#  cat xtrabackup_checkpoints
backup_type = full-backuped
from_lsn = 0
to_lsn = 27517178
last_lsn = 30394287
flushed_lsn = 30328603
redo_memory = 0
redo_frames = 0

执行prepare命令:

xtrabackup --prepare --target-dir . > prepare.log 2>&1

命令执行完成后,查看日志信息:

2023-06-26T10:20:01.948054+08:00 0 [Note] [MY-011825] [Xtrabackup] recognized server arguments: --innodb_checksum_algorithm=crc32 --innodb_log_checksums=1 --innodb_data_file_path=ibdata1:128M:autoextend --innodb_log_file_size=50331648 --innodb_page_size=16384 --innodb_undo_directory=./ --innodb_undo_tablespaces=2 --server-id=0 --innodb_log_checksums=ON --innodb_redo_log_encrypt=0 --innodb_undo_log_encrypt=0
2023-06-26T10:20:01.948397+08:00 0 [Note] [MY-011825] [Xtrabackup] recognized client arguments: --prepare=1 --target-dir=.2023-06-26T10:20:02.359130+08:00 0 [Note] [MY-013883] [InnoDB] The latest found checkpoint is at lsn = 27517178 in redo log file ./#innodb_redo/#ib_redo0.
2023-06-26T10:20:02.359262+08:00 0 [Note] [MY-012560] [InnoDB] The log sequence number 19019361 in the system tablespace does not match the log sequence number 27517178 in the redo log files!
2023-06-26T10:20:02.359283+08:00 0 [Note] [MY-012551] [InnoDB] Database was not shutdown normally!
2023-06-26T10:20:02.359296+08:00 0 [Note] [MY-012552] [InnoDB] Starting crash recovery.
2023-06-26T10:20:02.367962+08:00 0 [Note] [MY-013086] [InnoDB] Starting to parse redo log at lsn = 27516952, whereas checkpoint_lsn = 27517178 and start_lsn = 27516928
2023-06-26T10:20:02.418985+08:00 0 [Note] [MY-012550] [InnoDB] Doing recovery: scanned up to log sequence number 303942872023-06-26T10:20:05.103532+08:00 0 [Note] [MY-013084] [InnoDB] Log background threads are being closed...
2023-06-26T10:20:05.105082+08:00 0 [Note] [MY-013888] [InnoDB] Upgrading redo log: 1032M, LSN=30394340.
2023-06-26T10:20:05.105113+08:00 0 [Note] [MY-012968] [InnoDB] Starting to delete and rewrite redo log files.
2023-06-26T10:20:05.105284+08:00 0 [Note] [MY-011825] [InnoDB] Removing redo log file: ./#innodb_redo/#ib_redo0
2023-06-26T10:20:05.207953+08:00 0 [Note] [MY-011825] [InnoDB] Creating redo log file at ./#innodb_redo/#ib_redo0_tmp with file_id 0 with size 33554432 bytes
2023-06-26T10:20:05.218735+08:00 0 [Note] [MY-011825] [InnoDB] Renaming redo log file from ./#innodb_redo/#ib_redo0_tmp to ./#innodb_redo/#ib_redo0
2023-06-26T10:20:05.225168+08:00 0 [Note] [MY-012893] [InnoDB] New redo log files created, LSN=303943802023-06-26T10:20:07.118724+08:00 0 [Note] [MY-011825] [Xtrabackup] completed OK

xtrabackup prepare命令会启动一个临时的mysql实例,依赖innodb的恢复机制来应用redo文件。xtrabackup对恢复代码进行了一些改造,只应用序列号不大于last_lsn的redo日志,这一点可以从这一行日志中看出:“Doing recovery: scanned up to log sequence number 30394287”。

恢复日志最后一行显示“completed OK”,表示prepare执行成功。如果最后一行日志不是“completed OK”,说明prepare执行过程中有问题,需要根据输出的日志分析具体原因。prepare完成后,xtraback_checkpoints文件中backup_type变成了full-prepared。

#  cat xtrabackup_checkpoints
backup_type = full-prepared
......

xtrabackup启动的mysql临时实例buffer pool默认为100M,可以通过参数–use-memory适当增加内存,加快恢复的速度。官方文档建议将内存设置为1-2G。

xtrabackup --prepare --use-memory=2G --target-dir . > prepare.log 2>&1

将数据文件复制到数据目录

xtrabackup prepare完成后的数据库,可以用来直接启动。启动实例之前,需要将文件复制(或移动)到目标实例的数据目录中。目录需要依据目标实例的参数来确定。

这里我们将实例恢复到/data/full_restore路径下

mkdir -p /data/full_restore/{data,binlog,relaylog,log,run,tmp}

my.cnf配置文件如下:

## /data/full_restore/my.cnf[mysqld]datadir=/data/full_restore/data
log_bin=/data/full_restore/binlog/binloginnodb_data_file_path=ibdata1:128M:autoextend......

复制文件时,有几点需要注意:

  • 数据库目录复制到目标实例datadir
  • 如果设置了innodb_data_home_dir,则需要将ibdata文件复制到对应目录。默认情况下innodb_data_home_dir和datadir一样。
  • 如果log_bin目录和datadir不一样,需要将binlog和binlog.index文件复制到log_bin指定的目录。binlog.index中记录的binlog路径也要做相应的调整。
  • innodb_data_file_path参数需要和备份时实例的设置保持一致

复制文件
先查看一下恢复出来的文件:

root@172-16-121-234 full]# tree -p  -L 1 .
.
├── [-rw-r--r--]  backup_full
├── [-rw-r--r--]  backup_full.log
├── [-rw-r-----]  backup-my.cnf
├── [-rw-r-----]  binlog.000020
├── [-rw-r-----]  binlog.index
├── [drwxr-x---]  demo
├── [-rw-r-----]  ib_buffer_pool
├── [-rw-r-----]  ibdata1
├── [-rw-r-----]  ibtmp1
├── [drwxr-x---]  #innodb_redo
├── [drwxr-x---]  mysql
├── [-rw-r-----]  mysql.ibd
├── [drwxr-x---]  performance_schema
├── [-rw-r--r--]  prepare.log
├── [drwxr-x---]  sys
├── [-rw-r-----]  undo_001
├── [-rw-r-----]  undo_002
## 复制文件
cd /data/backup/full
cp -r * /data/full_restore/data
cp binlog.* /data/full_restore/binlog/## 修改binlog.index
# cat /data/full_restore/binlog/binlog.index
/data/mysql8.0/binlog/binlog.000020# sed -i -e 's/mysql8.0/full_restore/' /data/full_restore/binlog/binlog.index## 移除无用的binlog相关文件
rm /data/full_restore/data/binlog.*

启动实例

启动实例之前,需要先修改恢复出来的文件owner:

chown -R mysql:mysql /data/full_restore/

启动实例:

# mysqld_safe --defaults-file=/data/full_restore/my.cnf &
[1] 13010
# 2023-06-26T03:19:12.376984Z mysqld_safe error: log-error set to '/data/full_restore/log/alert.log', however file don't exists. Create writable for user 'mysql'.

如果启动时报日志文件不存在,先创建文件再启动:

touch /data/full_restore/log/alert.log
chown mysql:mysql /data/full_restore/log/alert.log# mysqld_safe --defaults-file=/data/full_restore/my.cnf &
[1] 134042023-06-26T03:21:35.299596Z mysqld_safe Logging to '/data/full_restore/log/alert.log'.
2023-06-26T03:21:35.340097Z mysqld_safe Starting mysqld daemon with databases from /data/full_restore/data

查看mysql日志:

[root@172-16-121-234 full]# tail  /data/full_restore/log/alert.log
2023-06-26T03:21:38.109286Z 0 [System] [MY-010229] [Server] Starting XA crash recovery...
2023-06-26T03:21:38.152446Z 0 [System] [MY-010232] [Server] XA crash recovery finished.
2023-06-26T03:21:38.414645Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2023-06-26T03:21:38.414702Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
2023-06-26T03:21:38.491284Z 0 [ERROR] [MY-010544] [Repl] Failed to open the relay log '/data/mysql8.0/relaylog/relaylog.000006' (relay_log_pos 407).
2023-06-26T03:21:38.491320Z 0 [ERROR] [MY-011059] [Repl] Could not find target log file mentioned in relay log info in the index file '/data/full_restore/relaylog/relaylog.index' during relay log initialization.
2023-06-26T03:21:38.495637Z 0 [ERROR] [MY-010426] [Repl] Slave: Failed to initialize the master info structure for channel ''; its record may still be present in 'mysql.slave_master_info' table, consider deleting it.
2023-06-26T03:21:38.495677Z 0 [ERROR] [MY-010529] [Repl] Failed to create or recover replication info repositories.
2023-06-26T03:21:38.495730Z 0 [Warning] [MY-010530] [Repl] Detected misconfiguration: replication channel '' was configured with AUTO_POSITION = 1, but the server was started with --gtid-mode=off. Either reconfigure replication using CHANGE MASTER TO MASTER_AUTO_POSITION = 0 FOR CHANNEL '', or change GTID_MODE to some value other than OFF, before starting the slave receiver thread.
2023-06-26T03:21:38.499008Z 0 [System] [MY-010931] [Server] /opt/mysql/bin/mysqld: ready for connections. Version: '8.0.32'  socket: '/data/full_restore/run/mysql.sock'  port: 6380  MySQL Community Server - GPL.

从日志中可以看到,实例已经启动,但是有一些复制相关的报错。这是由于mysql复制信息存储在表中(relay_log_info_repository=TABLE),恢复时将复制信息也恢复出来了。 执行reset slave all清理掉就可以了。
至此,我们已经成功将xtrabackup的全量备份恢复出来。

更多技术信息请查看云掣官网https://yunche.pro/?t=yrgw

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

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

相关文章

数据结构:AVL树

目录 1、AVL树的概念 2、二叉搜索树的功能与实现 1、AVL树节点定义 2、AVL树的插入 3、AVL树的旋转操作 1、左旋 2、右旋 3、左右旋 4、右左旋 3、AVL树完整代码实现 1、AVL树的概念 在前面的文章中&#xff0c;我们学过了二叉搜索树&#xff0c;二叉搜索树虽可以缩短查…

勾股定理的七种经典证明

据说勾股定理约有500种证明方法&#xff0c;下面介绍几种经典的证明方法。 一、切割重拼法。 顾名思义&#xff0c;就是将图形切割成其他形式的图形&#xff0c;然后通过拼图转换为另一种图形&#xff0c;这个过程中图形的面积是不变的。 “赵爽弦图”是这种方法的经典应用&…

MYSQL刷题2| 1112.每位学生的最高成绩、1398.购买了产品A和产品B缺没有购买产品C的顾客

1112.每位学生的最高成绩 题目链接&#xff1a;1112. 每位学生的最高成绩 - 力扣&#xff08;LeetCode&#xff09; # Write your MySQL query statement below select e.student_id, MIN(course_id) AS course_id, grade from enrollments e where (student_id,grade) in (s…

JimuReport 积木报表 v1.7.2 紧急发布,修复1.7.1严重Bug

1.7.2-beta 紧急版 2024-03-07 紧急版本&#xff0c;修复1.7.1版本的严重bug。 集成依赖 springboot2依赖 <dependency><groupId>org.jeecgframework.jimureport</groupId><artifactId>jimureport-spring-boot-starter</artifactId><versi…

Android视角看鸿蒙第三课(module.json中的各字段含义之nametype)

Android视角看鸿蒙第三课(module.json中的各字段含义) 前言 上篇文章我们试图找到鸿蒙app的程序入口&#xff0c;确定了在鸿蒙工程中,由AppScope下的app.json5负责应用程序的图标及名称,由entry->src->main-module.json5负责桌面图标及名称的展示。 AppScope下的app.js…

c++ vector赋值新技能、函数返回动态数组、 计算静动态数组的大小

一、vector赋值新技能 方法1&#xff1a;pushback vector<int> a; a.pushback(10); 方法2&#xff1a;直接赋值(很少用) vector<int> a {1,2 ,3,4,5}; 二、函数返回动态数组 void func(vector<int>src, double *dtemp) {for (int i 0; i < src.siz…

Java 反射机制 和 绑定属性资源文件

反射机制 1、反射机制有什么用&#xff1f; 通过 java 语言中的反射机制可以操作字节码文件。 有点类似于黑客。&#xff08;可以读和修改字节码文件。&#xff09; 通过反射机制可以操作代码片段。&#xff08;class文件。&#xff09; 2、反射机制的相关类在哪个包下&#xf…

使用Kali搭建钓鱼网站教程

一、前言 使用kali工具一分钟制作出和目标网站一模一样的钓鱼网站。目标用户使用钓鱼网站登录自己的账号&#xff0c;账号密码将被自动劫持。 二、钓鱼网站的制作过程 1.在虚拟机VMvare中登录kali linux 2.准备一个目标网址 3.在kail中搜索使用工具 4.在弹出的选项中选择第一…

用友 NC saveDoc.ajax 任意文件上传漏洞复现

0x01 产品简介 用友NC是一款企业级ERP软件。作为一种信息化管理工具,用友NC提供了一系列业务管理模块,包括财务会计、采购管理、销售管理、物料管理、生产计划和人力资源管理等,帮助企业实现数字化转型和高效管理。 0x02 漏洞概述 用友 NC saveDoc.ajax接口处存在任意文件…

【JavaEE初阶】 JVM简介

文章目录 &#x1f38d;前言&#x1f343;JVM发展史&#x1f6a9;Sun Classic VM&#x1f6a9;Exact VM&#x1f6a9;HotSpot VM&#x1f6a9;JRockit&#x1f6a9;J9 JVM&#x1f6a9;Taobao JVM&#xff08;国产研发&#xff09; &#x1f340;JVM 运行流程⭕总结 &#x1f3…

基于毕奥-萨伐尔定律的交流电机的4极旋转磁场matlab模拟与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于毕奥-萨伐尔定律的交流电机的4极旋转磁场&#xff0c;对比不同定子半径&#xff0c;对比2级旋转磁场。 2.系统仿真结果 3.核心程序与模型 版本&#xff1a;MATLAB2022a…

2024-3-7 python创建二维列表谨防连用两个*,列表的增量赋值(+=或*=)与元组的增量赋值的差异

#1、python创建二维列表谨防连用两个* 要创建1个二维的列表&#xff0c;不要连用两个*号&#xff0c;否则会出现改1个值&#xff0c;其他位置的值跟着变化的问题。 下面两种创建二维列表的方法&#xff0c;要用第一种&#xff0c;不要用第二种 >>> board1 [[_]*3 fo…

代码随想录算法训练营第五十三天 1143.最长公共子序列 、1035.不相交的线、53. 最大子序和

代码随想录算法训练营第五十三天 | 1143.最长公共子序列 、1035.不相交的线、53. 最大子序和 1143.最长公共子序列 题目链接&#xff1a;1143. 最长公共子序列 - 力扣&#xff08;LeetCode&#xff09; class Solution {public int longestCommonSubsequence(String text1, …

RK3568平台 USB数据包的收发格式

一.USB硬件拓扑结构 compound device &#xff1a;多个设备组合起来&#xff0c;通过HUB跟Host相连composite device &#xff1a;一个物理设备有多个逻辑设备(multiple interfaces) 在软件开发过程中&#xff0c;我们可以忽略Hub的存在&#xff0c;硬件拓扑图简化如下&#x…

【开源物联网平台】使用MQTT.fx模拟设备接入FastBee物联网平台

​&#x1f308; 个人主页&#xff1a;帐篷Li &#x1f525; 系列专栏&#xff1a;FastBee物联网开源项目 &#x1f4aa;&#x1f3fb; 专注于简单&#xff0c;易用&#xff0c;可拓展&#xff0c;低成本商业化的AIOT物联网解决方案 目录 一、接入步骤 1.1 创建产品&#xff…

9款世界级垂直领域软件架构师Visio平替作图工具!

1 LucidChart 一个基于HTML5的在线流程图绘制和协作应用平台&#xff0c;用户可以通过它方便快速的实现流程图表的绘制&#xff0c;同时还可以实现与他人进行实时的流程图绘制和修改功能&#xff0c;对需要群组协作功能的团队来说&#xff0c;这点非常方便。 由于LucidChart是…

deeplearning with pytorch (四)

1.Convolutional Neural Network Model torch.Tensor.view — PyTorch 2.2 documentation 在神经网络中&#xff0c;使用激活函数&#xff08;如ReLU&#xff09;是为了引入非线性&#xff0c;使得网络能够学习和模拟复杂的函数映射。ReLU&#xff08;Rectified Linear Unit&…

Python 类的介绍

类class的概念 类是面向对象编程中的一个重要概念&#xff0c;它是一种用于创建对象的模板或蓝图。类定义了对象的属性和行为&#xff0c;并提供了一种封装数据和功能的方式。 类可以看作是对象的抽象&#xff0c;它描述了对象的共同特征和行为。通过类&#xff0c;我们可以创…

如何成为IT产品经理:从入门到精通

如何成为IT产品经理&#xff1a;从入门到精通 在信息爆炸的时代&#xff0c;IT产品经理成为了科技行业的中坚力量。他们不仅要有深厚的技术背景&#xff0c;还需掌握市场动态&#xff0c;对用户需求有着敏锐的洞察力。本文将为您揭示成为IT产品经理的秘诀&#xff0c;带您从入…

布局小技巧

布局小技巧 行内元素、行内块元素&#xff0c;可以被父元素当做文本处理。 即&#xff1a;可以像处理文本对齐一样&#xff0c;去处理&#xff1a;行内、行内块在父元素中的对齐。 例如&#xff1a;text-align、line-height、text-indent等 如何让子元素&#xff0c;在父亲中 …