lvm详细笔记

LVM简介

逻辑卷管理器,是Linux 系统中用于管理磁盘储存的关键技术。

LVM 则打破了磁盘分区一旦确定,其大小调整往往较为复杂,且难以灵活应对业务变化这种限制,它允许用户将多个物理分区组合卷组。例如,系统中的多个物理磁盘/dev/sda,/dev/sdb可以把它们的部分空间整合起来,形成一个统一管理的卷组。

从卷组中,用户可以进一步划分逻辑卷。逻辑卷类似于虚拟磁盘分区,具有极高的灵活性。用户可以根据实际需求,动态地调整逻辑卷的大小,进行格式化等操作。如构建数据库的时候,可在卷组上创建逻辑卷来专门存储MYSQL数据库的数据文件,为数据库的高效运行提供高效运行提供有力的支持。

二、LVM 快照概念

LVM 快照是对现有逻辑卷(源逻辑卷)在某一特定时刻的 “瞬间影像”。它本质上是一个特殊的逻辑卷,初始时几乎不占用额外存储空间(仅记录少量元数据),并且与源逻辑卷共享数据块。

当源逻辑卷中的数据发生变化时,LVM 会将原始数据块的内容复制到快照区域(前提是这些数据块此前未被复制过)。通过这种机制,快照始终能够反映出创建它时源逻辑卷的数据状态。例如,对于一个持续运行的文件系统,在创建快照后,即便文件系统中的数据不断更新、删除或新增,快照中的数据依然保持创建时刻的状态,为数据备份和恢复提供了稳定的副本。

三、LVM 快照备份过程

(一)拍摄快照

使用 lvcreate 命令来创建快照。假设我们有一个名为 vg_mysql 的卷组,其中包含用于存储 MySQL 数据的逻辑卷 lv_mysql,现在要创建一个名为 lv_mysql_snapshot、大小为 1GB 的快照,执行以下命令:

lvcreate -n lv_mysql_snapshot -L 1G -s /dev/vg_mysql/lv_mysql

参数解释:

  • -n:用于指定快照的名称,这里为 lv_mysql_snapshot

  • -L:指定快照的大小,设置为 1GB。需注意,快照大小应根据源逻辑卷的数据变化频率和数据量合理估算,以确保备份过程中快照空间充足。

  • -s:表示创建的是快照,其后紧跟源逻辑卷的路径 /dev/vg_mysql/lv_mysql

(二)挂载快照

  1. 创建挂载点 首先,使用 mkdir 命令创建一个挂载点,例如 /mnt/mysql_snapshot

mkdir -p /mnt/mysql_snapshot

-p 选项的作用是确保如果指定的目录不存在,会递归创建该目录及其上级目录;若目录已存在,则不报错。

  1. 挂载快照 然后,使用 mount 命令将快照挂载到创建的挂载点上:

mount /dev/vg_mysql/lv_mysql_snapshot /mnt/mysql_snapshot

此时,通过访问 /mnt/mysql_snapshot 目录,就可以读取到快照中的数据,为后续的备份操作做好准备。

(三)进行备份

挂载点 /mnt/mysql_snapshot 进行备份操作,可选用多种备份工具:

  1. Rsync 备份 rsync 是一款强大的文件同步工具,具有高效、灵活的特点。例如,将快照中的数据备份到 /backup/mysql_snapshot_$(date +%Y%m%d) 目录(其中 $(date +%Y%m%d) 会根据当前日期生成目录名,方便区分不同日期的备份),执行以下命令:

rsync -avz /mnt/mysql_snapshot/ /backup/mysql_snapshot_$(date +%Y%m%d)/

参数解释:

  • -a:以归档模式同步,保留文件的权限、所有者、组等属性,确保备份数据的完整性和一致性。

  • -v:输出详细信息,在备份过程中可以实时查看同步进度和文件传输情况。

  • -z:在传输过程中进行压缩,可有效减少数据传输量,提高传输效率,尤其适用于网络备份场景。

  1. Tar 备份 tar 是常用的归档工具,用于将文件和目录打包成一个归档文件。例如,将挂载点的内容打包成一个压缩归档文件,执行以下命令:

tar czf /backup/mysql_snapshot_$(date +%Y%m%d).tar.gz /mnt/mysql_snapshot

参数解释:

  • c:创建新的归档文件。

  • z:使用 gzip 进行压缩,以减小归档文件的大小,节省存储空间。

  • f:指定归档文件的名称,这里为 /backup/mysql_snapshot_$(date +%Y%m%d).tar.gz

(四)清理快照

备份完成后,为释放存储空间,需要及时清理快照:

  1. 卸载快照 使用 umount 命令卸载已挂载的快照:

umount /mnt/mysql_snapshot
  1. 删除快照 使用 lvremove 命令删除快照:

lvremove -f /dev/vg_mysql/lv_mysql_snapshot

-f 选项表示强制删除,即使逻辑卷正在使用也会删除。但需谨慎使用,以免误删重要数据。

四、LVM 快照备份的优点

(一)实现热备份

对于正在运行的服务,如 MySQL 数据库、Web 服务器等,LVM 快照备份允许在不停止服务的情况下进行备份操作。

(二)高效利用存储空间

快照初始占用的空间相对较小,它仅记录创建快照后数据的变化部分。

(三)数据一致性较好

由于快照能够精确记录创建瞬间的数据状态,只要在备份过程中快照空间足够,就可以保证备份数据的一致性。

LVM快照备份实验

实验环境

操作系统:CentOS 8 或其他使用 systemdLVM 的 Linux 发行版。

MySQL 版本:MySQL 8.0

实验步骤

  1. 准备 LVM 卷

  • 首先,确保你已经有一个存储 MySQL 数据的逻辑卷。如果没有,可以按照以下步骤创建一个:

# 检查磁盘信息
fdisk -l
​
# 假设使用 /dev/sda 磁盘,创建物理卷
pvcreate /dev/sda
​
# 创建卷组
vgcreate vg_mysql /dev/sda
​
# 创建逻辑卷
lvcreate -n lv_mysql -L 4G vg_mysql
​
# 格式化逻辑卷为 ext4 文件系统
mkfs.ext4 /dev/vg_mysql/lv_mysql
​
# 创建挂载点
mkdir /var/lib/mysql
​
# 挂载逻辑卷
mount /dev/vg_mysql/lv_mysql /var/lib/mysql
​
# 确保开机自动挂载,添加到 /etc/fstab 文件
echo "/dev/vg_mysql/lv_mysql /var/lib/mysql ext4 defaults 0 0" >> /etc/fstab
  1. 安装和配置 MySQL (安装在了lvm卷中 )

  • 安装 MySQL 并将数据存储在 /var/lib/mysql 中:

dnf install mysql-server -y
systemctl start mysqld
systemctl enable mysqld

  1. 创建测试数据

  • 登录 MySQL 并创建一些测试数据:

mysql -u root -p
  • 输入密码,然后在 MySQL 中执行以下 SQL 语句:

CREATE DATABASE testdb;
USE testdb;
CREATE TABLE test_table (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100),email VARCHAR(100)
);
INSERT INTO test_table (name, email) VALUES ('Alice', 'alice@example.com'), ('Bob', 'bob@example.com');

  1. 创建 LVM 快照

  • 创建一个 LVM 快照,用于备份:

# 刷新表锁,创建快照,解锁表
mysql -u root -p -e "flush tables with read lock; system lvcreate -n lv_mysql_snapshot -L 1G -s /dev/vg_mysql/lv_mysql; unlock tables;"
​
# 创建挂载点
mkdir /mnt/mysql_snapshot
​
# 挂载快照
mount /dev/vg_mysql/lv_mysql_snapshot /mnt/mysql_snapshot

  1. 备份数据

  • 使用 rsynctar 备份数据:

# 使用 rsync 备份
rsync -avz /mnt/mysql_snapshot/ /backup/mysql_snapshot_$(date +%Y%m%d)/
​
# 或者使用 tar 备份
tar czf /backup/mysql_snapshot_$(date +%Y%m%d).tar.gz /mnt/mysql_snapshot

  1. 清理快照

  • 完成备份后,清理快照:

# 卸载快照
umount /mnt/mysql_snapshot
​
# 删除快照
lvremove -f /dev/vg_mysql/lv_mysql_snapshot
  1. 恢复数据(可选)

  • 假设你需要恢复数据,你可以使用之前的备份文件:

# 假设使用 tar 备份,先解压
tar xzf /backup/mysql_snapshot_20250117.tar.gz -C /tmp/restore
​
# 停止 MySQL 服务
systemctl stop mysqld
​
# 清空当前数据目录
rm -rf /var/lib/mysql/*
​
# 复制备份数据到数据目录
cp -r /tmp/restore/mnt/mysql_snapshot/* /var/lib/mysql/
​
# 更改权限
chown mysql:mysql -R /var/lib/mysql
​
# 启动 MySQL 服务
systemctl start mysqld

show databases;

实验总结
  • 步骤 1:创建 LVM 逻辑卷,将其格式化为 ext4 并挂载到 /var/lib/mysql,用于存储 MySQL 数据。

  • 步骤 2:安装和启动 MySQL 服务。

  • 步骤 3:创建测试数据,验证 MySQL 数据库的正常使用。

  • 步骤 4使用 flush tables with read lock 锁定表,创建 LVM 快照,解锁表,然后挂载快照。

  • 步骤 5:使用 rsynctar 备份快照中的数据。

  • 步骤 6:卸载和删除快照,完成备份操作。

  • 步骤 7:可选的恢复数据步骤,展示如何使用备份文件恢复数据。

注意事项
  • 在创建快照时,确保快照的大小足够存储在创建快照期间发生变化的数据。

  • 操作过程中,确保有足够的权限,通常需要使用 root 权限或 sudo

  • 备份的频率和时间应该根据实际情况确定,以确保数据的安全性和可恢复性。

通过上述实验,你可以实现一个简单的 LVM 快照备份 MySQL 数据库的过程,以保护数据免受意外数据丢失或损坏的影响。

以下是上述实验的脚本形式,你可以将其保存为 lvm_snapshot_backup.sh 并运行:

#!/bin/bash
​
# 刷新表锁,创建快照,解锁表
mysql -u root -p -e "flush tables with read lock; system lvcreate -n lv_mysql_snapshot -L 1G -s /dev/vg_mysql/lv_mysql; unlock tables;"
​
# 创建挂载点
mkdir -p /mnt/mysql_snapshot
​
# 挂载快照
mount /dev/vg_mysql/lv_mysql_snapshot /mnt/mysql_snapshot
​
# 使用 rsync 备份
rsync -avz /mnt/mysql_snapshot/ /backup/mysql_snapshot_$(date +%Y%m%d)/
​
# 或者使用 tar 备份
# tar czf /backup/mysql_snapshot_$(date +%Y%m%d).tar.gz /mnt/mysql_snapshot
​
# 卸载快照
umount /mnt/mysql_snapshot
​
# 删除快照
lvremove -f /dev/vg_mysql/lv_mysql_snapshot

你可以使用以下方式运行该脚本:

chmod +x lvm_snapshot_backup.sh
./lvm_snapshot_backup.sh

这个实验可以帮助你了解如何使用 LVM 快照备份 MySQL 数据库,并且在需要时可以使用备份文件恢复数据,确保数据的安全和完整性。请根据实际情况调整用户名、密码、设备名称、备份目录等信息。

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

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

相关文章

rust-candle学习笔记10-使用Embedding

参考&#xff1a;about-pytorch candle-nn提供embedding()初始化Embedding方法: pub fn embedding(in_size: usize, out_size: usize, vb: crate::VarBuilder) -> Result<Embedding> {let embeddings vb.get_with_hints((in_size, out_size),"weight",cr…

Python小酷库系列:Munch,用对象的访问方式访问dict

Munch&#xff0c;用对象的访问方式访问dict 基本使用1、创建一个 Munch 对象2、使用字典初始化3、访问不存在的字段4、嵌套结构支持5、合并操作6、应用场景说明 进阶功能1、嵌套写入&#xff1a;创建不存在的子对象2、序列化&#xff08;转回 dict&#xff09;3、深度拷贝结构…

对称加密以及非对称加密

对称加密和非对称加密是两种不同的加密方式&#xff0c;它们在加密原理、密钥管理、安全性和性能等方面存在区别&#xff0c;以下是具体分析&#xff1a; 加密原理 对称加密&#xff1a;通信双方使用同一把密钥进行加密和解密。就像两个人共用一把钥匙&#xff0c;用这把钥匙锁…

[JAVAEE]HTTP协议(2.0)

响应报文格式 响应报文格式由首行&#xff0c;响应头&#xff08;header&#xff09;&#xff0c;空行&#xff0c;正文&#xff08;body&#xff09; 组成 响应报文首行包括 1.版本号 如HTTP/1.1 2.状态码(如200) 描述了请求的结果 3.状态码描述(如OK) 首行——状态码…

Spring Boot 之MCP Server开发全介绍

Spring AI 的 MCP(模型上下文协议,Model Context Protocol)服务器启动器为在 Spring Boot 应用程序中设置 MCP 服务器提供了自动配置功能。它使得 MCP 服务器功能能够与 Spring Boot 的自动配置系统实现无缝集成。 MCP 服务器启动器具备以下特性: MCP 服务器组件的自动配置…

YOLOv8 对象检测任务的标注、训练和部署过程

YOLOv8 对象检测任务的标注、训练和部署过程 在计算机视觉领域&#xff0c;对象检测是一项基础且重要的任务&#xff0c;YOLOv8 作为当前先进的实时对象检测模型&#xff0c;以其高效性和准确性受到广泛关注。从数据准备到最终模型部署&#xff0c;整个流程包含多个关键环节&a…

电池热管理CFD解决方案,为新能源汽车筑安全防线

在全球能源结构加速转型的大背景下&#xff0c;新能源汽车产业异军突起&#xff0c;成为可持续发展的重要驱动力。而作为新能源汽车 “心脏” 的电池系统&#xff0c;其热管理技术的优劣&#xff0c;直接决定了车辆的安全性、续航里程和使用寿命。电池在充放电过程中会产生大量…

Redis 数据类型:掌握 NoSQL 的基石

Redis (Remote Dictionary Server) 是一种开源的、内存中的数据结构存储系统&#xff0c;通常用作数据库、缓存和消息代理。 它的高性能和丰富的数据类型使其成为现代应用程序开发中不可或缺的一部分。 本文将深入探讨 Redis 的核心数据类型&#xff0c;帮助你更好地理解和利用…

MLX-Audio:高效音频合成的新时代利器

MLX-Audio&#xff1a;高效音频合成的新时代利器 现代社会的快节奏生活中&#xff0c;对语音技术的需求越来越高。无论是个性化语音助手&#xff0c;还是内容创作者所需的高效音频生成工具&#xff0c;语音技术都发挥着不可或缺的作用。今天&#xff0c;我们将介绍一个创新的开…

Kafka单机版安装部署

目录 1.1、概述1.2、系统环境1.3、ZooKeeper的作用1.4、部署流程1.4.1、下载安装包1.4.2、解压文件1.4.3、创建日志目录1.4.4、配置Kafka1.4.5、启动Kafka服务1.4.6、启动成功验证 1.5、创建Topic测试1.6、消息生产与消费测试1.6.1、启动生产者1.6.2、启动消费者 1.1、概述 Kaf…

【C++设计模式之Observer观察者模式】

Observer观察者模式 模式定义动机(Motivation)结构(Structure)应用场景一&#xff08;气象站&#xff09;实现步骤1.定义观察者接口2.定义被观察者(主题)接口3.实现具体被观察者对象(气象站)4.实现具体观察者(例如&#xff1a;显示屏)5.main.cpp中使用示例6.输出结果7. 关键点 …

资产月报怎么填?资产月报填报指南

资产月报是企业对固定资产进行定期检查和管理的重要工具&#xff0c;它能够帮助管理者了解资产的使用情况、维护状况和财务状况&#xff0c;从而为资产的优化配置和决策提供依据。填写资产月报时&#xff0c;除了填报内容外&#xff0c;还需要注意格式的规范性和数据的准确性。…

UG471 之 SelectIO 逻辑资源

背景 《ug471》介绍了Xilinx 7 系列 SelectIO 的输入/输出特性及逻辑资源的相关内容。 第 1 章《SelectIO Resources》介绍了输出驱动器和输入接收器的电气特性&#xff0c;并通过大量实例解析了各类标准接口的实现。 第 2 章《SelectIO Logic Resources》介绍了输入输出数据…

C++ 内存泄漏相关

ASAN 参考链接 https://blog.csdn.net/wonengguwozai/article/details/129593186https://www.cnblogs.com/greatsql/p/16256926.htmlhttps://zhuanlan.zhihu.com/p/700505587小demo // leak.c #include <stdio.h> #include <stdlib.h> #include <string.h>…

计算人声录音后电平的大小(dB SPL->dBFS)

计算人声录音后电平的大小 这里笔记记录一下&#xff0c;怎么计算已知大小的声音&#xff0c;经过麦克风、声卡录制后软件内录得的音量电平值。&#xff08;文章最后将计算过程整理为Python代码&#xff0c;方便复用&#xff09; 假设用正常说话的声音大小65dB&#xff08;SP…

【MySQL数据库】C/C++连接数据库

MySQL要想在C/C下使用&#xff0c;就必须要有 MySQL 提供的头文件和相关的库。 在Ubuntu系统上&#xff0c;使用 apt install mysql-server 安装MySQL服务器后&#xff0c;仅安装了MySQL数据库服务本身&#xff0c;并没有安装MySQL开发所需的库和头文件。因此&#xff0c;在尝试…

Kubernetes调度策略深度解析:NodeSelector与NodeAffinity的正确打开方式

在Kubernetes集群管理中&#xff0c;如何精准控制Pod的落点&#xff1f;本文将深入解析两大核心调度策略的差异&#xff0c;并通过生产案例教你做出正确选择。 一、基础概念快速理解 1.1 NodeSelector&#xff08;节点选择器&#xff09; 核心机制&#xff1a;通过标签硬匹配…

Golang的linux运行环境的安装与配置

很多新手在学go时&#xff0c;linux下的配置环境一头雾水&#xff0c;总结下&#xff0c;可供参考&#xff01; --------------------------------------Golang的运行环境的安装与配置-------------------------------------- 将压缩包放在/home/tools/下 解压 tar -zxvf g…

自定义实现elementui的锚点

背景 前不久有个需求&#xff0c;上半部分是el-step步骤条&#xff0c;下半部分是一些文字说明&#xff0c;需要实现点击步骤条中某个步骤自定义定位到对应部分的文字说明&#xff0c;同时滚动内容区域的时候还要自动选中对应区域的步骤。element-ui-plus的有锚点这个组件&…

Oracle Fusion常用表

模块表名表描述字段说明sodoo_headers_all销售订单头表sodoo_lines_all销售订单行表sodoo_fulfill_lines_all销售订单明细行表popo_headers_all采购订单头表popo_lines_all采购订单行表popo_line_locations_all采购订单分配表popo_distributions_all采购订单发运表invEGP_SYSTE…