xtrabackup工具介绍、安装及模拟数据库故障使用xtrabackup工具恢复数据等操作详细说明

news2024/11/27 7:29:05

一、xtrabackup工具介绍

Percona XtraBackup

Percona XtraBackup是一个适用于MySQL的开源热备份工具,它在备份期间不锁表。它可以备份InnoDB、XtraDB以及MyISAM存储引擎的表。

2.4版本支持MySQL5.1、5.5、5.6以及5.7。

它有两个实用命令,分别是xtrabackup和innobackupex,xtrabackup只能备份InnoDB和XtraDB两种存储引擎的表,innobackupex是一个Perl脚本,封装了xtrabackup,它还可以备份MyISAM存储引擎的表,但在处理MyISAM存储引擎的表时需要加一个读锁。

Xtrabackup有如下优点:

备份速度快,物理备份可靠

备份过程不会打断正在执行的事务(无需锁表)

能够基于压缩等功能节约磁盘空间和流量

自动备份校验

还原速度快

可以流传,就是将备份传输到另外一台机器上

在不增加服务器负载的情况下备份数据

Xtrabackup的备份原理如下:

XtraBackup是基于InnoDB的crash-recovery功能的。它会复制InnoDB的数据文件,由于不锁表,复制出来的数据是不一致的,在恢复的时候使用crash-recovery,使得恢复的数据一致。

InnoDB维护了一个事务日志,它包含了InnoDB数据的所有改动情况。当InnoDB启动的时候,它会先去检查数据文件和事务日志,并且会做两步操作:

1、应用已提交的事务日志项到数据文件;

2、对任何修改了数据但是没有提交的事务日志项执行回滚。

XtraBackup在备份的时候,一页一页地复制InnoDB的数据,而且不锁表,与此同时,XtraBackup还有另外一个线程监视着事务日志,一旦事务日志发生变化,就把变化过的日志页复制走。为什么要急着复制走呢?因为事务日志的文件大小有限,写满之后,就会从头再开始写,所以新数据可能会覆盖到旧数据。

在prepare的过程中,XtraBackup使用复制到的事务日志对备份出来的InnoDB数据文件进行crash-recovery。

具体如下:

innobackupex启动后,会先派生一个进程,用于启动xtrabackup,然后等待xtrabackup备份数据文件;

xtrabackup在备份InnoDB数据时,有2种线程:事务日志复制线程和数据文件复制线程。xtrabackup进程开始执行后,会启动一个事务日志复制线程,用于从最新的检查点开始顺序复制事务日志;再启动数据文件复制线程,复制数据文件。这里是先启动事务日志复制线程的。在这个阶段,innobackupex进行处于等待状态;

xtrabackup复制完成数据文件之后,会通知innobackupex,同时xtrabackup进入等待状态(事务日志复制线程依旧在复制事务日志);

innobackupex收到xtrabackup通知后,执行FLUSH TABLES WITH READ LOCK(FTWRL),取得一致性位点,然后开始备份非InnoDB数据文件,在复制非InnoDB数据文件的过程中,数据库处于全局只读状态;

当innobackupex拷贝完所有的非InnoDB数据文件之后,会通知xtrabackup,通知完成后,进入等待状态;

xtrabackup收到innobackupex备份完成的通知之后,会停止事务日志复制线程,然后通知innobackupex,事务日志复制完成;

innobackupex收到事务日志复制完成的通知后,就进行解锁操作,执行:UNLOCK TABLES;

最后innbackupex和xtrabackup进程各自释放资源,写备份元数据信息等,innobackupex等xtrabackup子进程结束后退出。

注意,XtraBackup是以读写模式打开InnoDB数据文件,然后对其进行复制的。其实它不会修改此文件。也就是说,运行xtrabackup的用户,必须对InnoDB的数据文件具有读写权限。

二、数据库mysql5.7编译安装 

(一)、安装包下载

MySQL :: Download MySQL Community Server (Archived Versions)

进入上述mysql官方地址找到对应的mysql版本下载到服务器上即可。

(二)、步骤

1、压缩包上传至服务器并解压

tar -zxvf mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz

// 修改文件夹命令(可选)
mv mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz mysql57

2、进入mysql57,创建data和log文件

// 进入mysql57
cd mysql57/

// 创建data 和 log文件,并修改权限
mkdir data
mkdir log
chmod 777 -R ./data
chmod 777 -R ./log

3、新建用户和组

sudo groupadd mysql
sudo useradd -r -g mysql mysql
sudo passwd mysql
# 输入用户mysql密码

// 修改mysql57文件夹所属为mysql用户
chown -R mysql:mysql [mysql文件位置]

4、初始化MySQL

// 进入mysql-->bin目录下
cd [mysql文件位置]/bin

// 数据库初始化
./mysqld --initialize --user=mysql --basedir=[mysql文件位置] --datadir=[mysql文件位置]/data

// 复制mysql.server到/etc/init.d/mysqld;更快启动
sudo cp [mysql文件位置]/support-files/mysql.server /etc/init.d/mysqld

初始化密码如图位置(初始化密码建议复制到文本文件里方便安装完mysql之后使用)

5、编辑MySQL配置文件,相当于win的my.ini

vim /etc/my.cnf
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8 
[mysqld]
#设置3306端口
port=3306
# 设置mysql的安装目录
basedir=/usr/local/mysql
# 设置mysql数据库的数据的存放目录
datadir=/usr/local/mysql/data
# 允许最大连接数
max_connections=200
character-set-server=utf8
# 默认存储引擎
default-storage-engine=INNODB
lower_case_table_names=1

修改my.cnf权限

chmod -R 775 /etc/my.cnf

6、启动MySQL、停止、重启指令

启动:service mysqld start
停止:service mysqld stop
重启:service mysqld restart

7、启动成功后进入MySQL修改密码

mysql -uroot -p
# 输入密码:密码上边截图!或可修改配置文件跳过输入密码;

// 提示以下信息
-bash :mysql :command not fount

// 1、可以进入MySQL文件夹下的bin目录再次执行;
// 2、可以配置环境变量
vim /etc/profile
// 添加环境变量
export PATH=$PATH:[mysql解压位置]/bin

// 更新配置文件
source /etc/profile

8、进入数据库,修改密码

#修改密码 
ALTER USER 'root'@'localhost' IDENTIFIED BY '修改的密码';
#刷新数据库
flush privileges;

#配置远程访问
grant all privileges on *.* to 'root'@'%' identified by '你的密码' with grant option;
#刷新数据库
flush privileges;

9、设置开机自启(可选)

systemctl enable mysqld

三、xtrabackup工具安装

1、官网下载和mysql版本相对应的版本到服务器上

https://www.percona.com/downloads

上述为下载地址,找到对应的版本和适配你的centos版本的安装包下载到服务器上,此处是xtrabackup2.4适配mysql5.7,操作系统版本centos7

 2、把默认的CentOS yum源修改成国内的aliyun yum源

(1)安装Centos后默认的yum源如下
ll /etc/yum.repos.d
(2)把默认yum源备份(可选)
 mkdir /opt/centos-yum.bak
 mv /etc/yum.repos.d/* /opt/centos-yum.bak/
(3)下载aliyun yum源repo文件(对应自己的系统版本下载即可)
#各系统版本repo文件对应的下载操作
CentOS 5
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo
CentOS 6
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
CentOS 7
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
(4)清除缓存
yum clean all
Loaded plugins: fastestmirror
Cleaning repos: base extras updates
Cleaning up everything
Cleaning up list of fastest mirrors
yum makecache //把yum源缓存到本地,加快软件的搜索好安装速度
yum list 

3、安装xtrabackup

(1)安装依赖包

yum -y install libev perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL
yum -y install rsync perl-Digest-MD5

(2)安装xtrabackup

rpm -ivh percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm

4、创建备份用户及设置权限

CREATE USER 'bkpuser'@'localhost' IDENTIFIED BY 'password';

GRANT RELOAD,LOCK TABLES,PROCESS,REPLICATION CLIENT ON . TO 'bkpuser'@'localhost';

FLUSH PRIVILEGES;

5、配置xtrabackup、创建备份目录

vim /etc/my.cnf

[xtrabackup]

user=bkpuser

password=password
mkdir -p /data/backups/mysql/full_backup
chown -R mysql:mysql /data/backups/mmysql/full_backup

四、xtrabackup备份及恢复  

1、执行一次全备份

xtrabackup --backup --target-dir=/data/backups/MySQL/full_backup

备份过程如下:
---
2024-05-18T15:06:24.060430+08:00 0 [Note] [MY-011825] [Xtrabackup] Connecting to MySQL server host: localhost, user: root, password: set, port: 3306, socket: /data/data/mysql.sock
2024-05-18T15:06:24.081369+08:00 0 [Note] [MY-011825] [Xtrabackup] Using server version 8.0.33
2024-05-18T15:06:24.086956+08:00 0 [Note] [MY-011825] [Xtrabackup] Executing LOCK INSTANCE FOR BACKUP ...
...
2024-05-18T15:06:24.533828+08:00 1 [Note] [MY-011825] [Xtrabackup] >> log scanned up to (19730331)
2024-05-18T15:06:24.592403+08:00 0 [Note] [MY-012953] [InnoDB] Disabling background ibuf IO read threads.
2024-05-18T15:06:24.798005+08:00 0 [Note] [MY-011825] [Xtrabackup] Generating a list of tablespaces
2024-05-18T15:06:24.798132+08:00 0 [Note] [MY-012204] [InnoDB] Scanning './'
2024-05-18T15:06:24.803212+08:00 0 [Note] [MY-012208] [InnoDB] Completed space ID check of 2 files.
2024-05-18T15:06:24.809533+08:00 0 [Warning] [MY-012091] [InnoDB] Allocated tablespace ID 2 for testdb/testtab, old maximum was 0

2、在全备份的基准上执行第一次增量备份

xtrabackup --backup --target-dir=/data/backups/mysql_increase1 --incremental-basedir=/data/backups/mysql/full_backup
往后的每一次增量备份都以上一次增量备份为基准

xtarbackup --backup --target-dir=/data/backups/mysql_increase2 --incremental-basedir=/data/backups/mysql_increase2

3、xtrabackup恢复数据库

(1)模拟数据库故障

cd /[数据库安装路径]
mv data data.bak

(2)恢复数据库(需要时间)

xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/data/backups/mysql/full_backup
xtrabackup --defaults-file=/etc/my.cnf --copy-back --target-dir=/data/backups/mysql/full_backup

(3)恢复验证

登录数据库,看表情况是否和故障前的一样:

[root@node1 data]# mysql -uroot -p'root' testdb
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.33 MySQL Community Server - GPL

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

root@node1 16:23:  [testdb]> show tables;
+------------------+
| Tables_in_testdb |
+------------------+
| testtab          |
+------------------+
1 row in set (0.00 sec)

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

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

相关文章

LeetCode_2469. 温度转换_java

1、问题 2469. 温度转换. - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/convert-the-temperature/description/ 给你一个四舍五入到两位小数的非负浮点数 celsiu…

day3:管道,解压缩,vim

一,管道(|) 引入 当我们要将本次命令结果作为下次命令参数时就可以用到,极大的简化了操作。 比如:head -5 文件| tail -1:表示显示第五行这就是管道的魅力 概述 管道符:| 作用&#xff1a…

计算机网络——可靠数据传输原理

变成什么状态取决于当时发生的事件 在停止等待协议中只用1位来表示序号0和1——新的和旧的 在这里插入图片描述

IT运维的365天--017 如何在两台Linux服务器之间快速传输文件夹(同时设置免密)

前情提要(两台Linux服务器之间传输批量文件夹): 两台都是外网服务器,都是Linux系统(CentOS),都安装了宝塔,用于搭建巨量的静态网站,由于A服务器准备不要了,所以要在A服务器转移几百个静态网站到B服务器。 Linux下scp单命令传输文件夹测试: 准备工作,先测试转移一…

【Kafka】Kafka Producer的缓冲池机制原理

如何初始化的bufferPool的 在初始化的时候 初始化BufferPool对象 // 设置缓冲区 this.accumulator new RecordAccumulator(xxxxx,其他参数,new BufferPool(this.totalMemorySize, config.getInt(ProducerConfig.BATCH_SIZE_CONFIG), metrics, time, PRODUCER_METRIC_GROUP_N…

免费送源码:Java+SpringBoot+MySQL SpringBoot珠宝店客户关系管理系统 计算机毕业设计原创定制

摘 要 随着计算机技术的发展,特别是计算机网络技术与数据库技术的发展,使用人们的生活与工作方式发生了很大的改观。本课题研究的珠宝店客户关系管理系统,主要功能模块包括系统用户,部门类别,职务类别,外出…

【ssh】Mac 使用 ssh 连接阿里云报错:Connection reset by 8.155.1.xxx port 22

Mac 使用 ssh 连接阿里云报错:Connection reset by 8.155.1.xxx port 22 问题描述解决办法 问题描述 Connection reset by 8.155.1.xxx port 22解决办法 关掉代理 VPN

SpringCloudAlibaba升级手册

目录 1. 版本对照 版本现状 SpringCloud与AlibabaCloud对应版本 Springboot与Elasticsearch版本对应 2. openfeign问题 问题 解决方案 3. Feign请求问题 问题 解决方法 4. Sentinel循环依赖 问题 解决方案 5. bootstrap配置文件不生效 问题 解决方案 6. Nacos的…

visio导出pdf公式变形问题杂谈

其实不会变形。 我自己的情况是直接用edge PDF阅读器打开pdf看到的是公式有变形(常见是字体、形状变了),但换一个pdf阅读器如adobe的就是正常的了 不过大家一般是用edge pdf阅读器直接打开查看,所以通过visio打印的方式导出pdf可…

DNS 与 ICMP

DNS(Domain Name System)快速了解 DNS 是一整套从域名映射到 IP 的系统 DNS 背景 TCP/IP 中使用 IP 地址和端口号来确定网络上的一台主机的一个程序. 但是 IP 地址不方便记忆 于是人们发明了一种叫主机名的东西, 是一个字符串, 并且使用 hosts 文件来描述主机 名和 IP 地…

【Hive】8-Hive性能优化及Hive3新特性

Hive性能优化及Hive3新特性 Hive表设计优化 Hive查询基本原理 Hive的设计思想是通过元数据解析描述将HDFS上的文件映射成表 基本的查询原理是当用户通过HQL语句对Hive中的表进行复杂数据处理和计算时,默认将其转换为分布式计算 MapReduce程序对HDFS中的数据进行…

基于排名的股票预测的关系时态图卷积网络(RT-GCN)

“ 为了充分利用股票之间的关系,获得最高收益,提出了一种关系时态图卷积网络(RT-GCN)。” 标题:Relational Temporal Graph Convolutional Networks for Ranking-Based Stock Prediction 链接:https://ieeexplore.ieee.org/do…

Android15之解决gdb:Remote register badly formatted问题(二百三十六)

简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【…

2024全国大数据与计算智能挑战赛火热报名中!

一年一度的 全国大数据与计算智能挑战赛震撼来袭! 报名速通: https://www.datafountain.cn/special/BDSSF2024 大数据与决策(国家级)实验室连续三年组织发起全国大数据与计算智能挑战赛,旨在深入挖掘大数据应用实践中亟…

STM32传感器模块编程实践(九) VL53L0X激光红外测距传感器简介及驱动源码

文章目录 一.概要二.VL53L0X测距原理三.VL53L0X主要特性四.VL53L0X硬件参考设计五.模块接线说明六.模块通讯协议介绍七.光学盖玻片介绍八.STM32单片机与VL53L0模块实现距离测量实验1.硬件准备2.软件工程3.软件主要代码4.实验效果 九.小结 一.概要 VL53L0X是一款由ST&#xff0…

通过PHP与API的结合,开启电商数据集成的新篇章

在数字化转型的浪潮中,电子商务数据的集成对于企业来说变得越来越重要。无论是在线零售商还是品牌商,都需要实时访问商品数据以优化库存管理、制定定价策略、提升客户体验。PHP,作为服务端脚本语言的佼佼者,为开发者提供了强大的工…

调查显示软件供应链攻击增加

OpenText 发布了《2024 年全球勒索软件调查》,强调了网络攻击的重要趋势,特别是在软件供应链中,以及生成式人工智能在网络钓鱼诈骗中的使用日益增多。 尽管各国政府努力加强网络安全措施,但调查显示,仍有相当一部分企…

【verilog】3_8-4_16数选器

文章目录 前言一、实验原理二、实验过程三、实验结果参考文献 前言 进行 实验 一、实验原理 二、实验过程 三、实验结果 代码 timescale 1ns/1ns module decoder_38_tb ; reg a; reg b; reg c; wire [7:0]data;decoder_38 u0 (.a(a),.b(b),.c(c),.data(data) ); init…

pandas-使用技巧

pandas-使用技巧 简单技巧 仅个人笔记使用,感谢点赞关注 简单技巧 pd.to_dict():Dataframe格式数据转字典数据pd.dropna():去nan值& | ~:pd逻辑运算符pd.isnan():判断是否为nan值pd.concat:多个pd拼接…

关于武汉芯景科技有限公司的限流开关芯片XJ6241开发指南(兼容LTC4411)

一、芯片引脚介绍 1.芯片引脚 二、系统结构图 三、功能描述 1.CTL引脚控制VIN和VOUT的通断 2.CTL引脚控制STAT引脚的状态 3.输出电压高于输入电压加上–VRTO的值,芯片处于关断状态