当前位置: 首页 > news >正文

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

相关文章:

  • ASCII码的快速记忆方法
  • 【A2A】管中窥豹,google源码python-demo介绍
  • 小程序消息订阅的整个实现流程
  • TOGAF 企业架构介绍(4A架构)
  • ADV7842KBCZ - 5 富利威长期稳定供应
  • 代理ARP与传统ARP在网络通信中的应用及区别研究
  • Linux快速入门
  • C++ - 函数重载
  • 深入解析多线程与多进程:从理论到Python实践
  • C语言—指针3
  • 若依定制pdf生成实战
  • gradle3.5的安装以及配置环境变量
  • PX4开始之旅(二)通过自定义 MAVLink 消息与 QGroundControl (QGC) 通信
  • 力扣题解:21.合并两个有序链表(C语言)
  • 2025数维杯数学建模C题完整分析参考论文(共36页)(含模型、可运行代码、数据)
  • 赛季7靶场 - Environment
  • Android 移动应用开发:页面跳转与数据传递功能
  • Android屏蔽通话功能和短信功能
  • MySQL(4)如何查看MySQL数据库的版本?
  • 『不废话』之Python 3.14 Beta版新特性
  • 央行最新报告:积极落地5月推出的一揽子金融政策,促进经济供需平衡、物价合理回升
  • 习近平离京赴莫斯科对俄罗斯进行国事访问并出席纪念苏联伟大卫国战争胜利80周年庆典
  • 外交部:印巴都表示不希望局势升级,望双方都能保持冷静克制
  • 一网红被指涉脱衣殴打霸凌事件,沈阳警方:刑拘1人,处罚5人
  • 上海市委常委会扩大会议传达学习习近平总书记考察上海重要讲话和在部分省区市“十五五”时期经济社会发展座谈会上的重要讲话精神
  • 马斯克的胜利?OpenAI迫于压力放弃营利性转型计划