lvm详细笔记

news/2025/7/12 9:24:31

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 数据库,并且在需要时可以使用备份文件恢复数据,确保数据的安全和完整性。请根据实际情况调整用户名、密码、设备名称、备份目录等信息。

文章来源:https://blog.csdn.net/m0_74157475/article/details/147837273
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:https://dhexx.cn/news/show-5515144.html

相关文章

智慧工会服务平台建设方案Word(23页)

1. 引言 随着信息技术的快速发展,传统工会服务模式面临挑战,智慧工会服务平台应运而生。该平台旨在通过数字化手段,整合工会资源,优化服务流程,提高工作效率,为会员提供更加便捷、高效、个性化的服务体验。…

[Windows] 东芝存储诊断工具1.30.8920(20170601)

[Windows] 东芝存储诊断工具 链接:https://pan.xunlei.com/s/VOPpMjGdWZOLceIjxLNiIsIEA1?pwduute# 适用型号 东芝消费类存储产品: 外置硬盘:Canvio 系列 内置硬盘:HDW****(E300 / N300 / P300 / S300 / V300 / X30…

[6-1] TIM定时中断 江协科技学习笔记(45个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 TRGO是“Trigger Output”的缩写,中文意思是“触发输出”。在STM32微控制器中,TRGO是一个非常重要的功能,它允许定时器(Timer)在特定事件发生时输出一个触发信号。这个触发信号可以用…

赤色世界 陈默传 第一章 另一个陈默

赤色世界 陈默传 第一章 另一个陈默 陈默在一片纯白的空间中缓缓睁开眼睛。没有声音,没有光影的变化,只有无尽的空白包围着他,仿佛整个世界被擦去了所有的色彩和形状。他站在那里,赤脚踩在这片空无一物的地面上,却能感…

Spring Boot快速开发:从零开始搭建一个企业级应用

Spring Boot快速开发:从零开始搭建一个企业级应用 在当今的软件开发领域,Spring Boot已经成为构建企业级应用的首选框架之一。它不仅简化了Spring应用的初始搭建以及开发过程,还提供了许多开箱即用的功能,使得开发者能够快速地构…

STM32外设-串口UART

STM32外设-串口UART 一,串口简介二,串口基础概念1,什么是同步和异步/UART与USART对比2,串行与并行3,波特率 (Baud Rate)4,数据帧 (Data Frame)5,TX 和 RX 三,硬件连接1,u…

当当网Top500书籍信息爬取与分析

爬取当当网的Top500书籍信息,并对书籍的评价数量进行排序,然后绘制前十名的条形图,然后对各个出版社出版的书籍数量进行排序,绘制百分比的饼图 # 导入所需的模块 import re # 正则表达式模块,用于提取文本中的特定模…

[C++类和对象]类和对象的引入

面向过程和面向对象 C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用来逐步解决问题 C是基于面向对象的,关注的是对象,将一件事情分成不同的对象,靠对象之间完成交互 类的引入 C语言结构体中只能定义变量,在C中,结构体不仅仅可以定义变量,而且可以定义函…

The 2024 ICPC Kunming Invitational Contest G. Be Positive

https://codeforces.com/gym/105386/problem/G 题目&#xff1a; 结论&#xff1a; 从0开始每四个相邻数的异或值为0 代码&#xff1a; #include<bits/stdc.h> using namespace std; #define int long long void solve() {int n;cin >> n;if(n1||n%40){cout &…

企业高性能WEB服务器—Nginx

Nginx介绍 Nginx是一款轻量级的网页服务器、反向代理服务器以及电子邮件代理服务器。 具有高并发&#xff08;特别是静态资源&#xff09;、占用系统资源少的特性。它不仅是Web服务软件&#xff0c;还具有反向代理负载均衡功能和缓存服务功能 具备如下基本特性 可针对静态资…