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

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.xdnf.cn/news/5046.html

相关文章:

  • 【AI论文】ZeroSearch:在不搜索的情况下激励LLM的搜索能力
  • 前端学习(1)—— 使用HTML编写一个简单的个人简历展示页面
  • VBA -- 学习Day4
  • 软件安全(二)优化shellcode
  • 使用React实现调起系统相机功能
  • 2025.05.07-淘天研发岗-第二题
  • goFrame框架中如何实现文件的excel导出
  • Spring Boot快速开发:从零开始搭建一个企业级应用
  • 普通IT的股票交易成长史--20250509 缺口(1)
  • LeetCode难题解析:数字字符串的平衡排列数目
  • 阻焊工艺如何保障多层PCB可靠性?5大核心功能与工艺控制要点
  • 深入理解 Istio 的工作原理 v1.26.0
  • 计算机网络:深度解析基于链路状态的内部网关协议IS-IS
  • OpenHarmony 开源鸿蒙南向开发——linux下使用make交叉编译第三方库——gmp
  • 赛季7靶场 - Environment
  • 死锁的形成
  • 国产Excel处理控件Spire.XLS系列教程:C# 将Excel文件转换为Markdown格式
  • 线程邮箱框架与示例
  • 《Spring Boot 3.0全新特性详解与实战案例》
  • 科学选择差分探头输入阻抗的方法
  • Liunx ContOS7 安装部署 Docker
  • RabbitMQ ②-工作模式
  • Rust 智能指针全解析:从原理到实践
  • 基于DeepSeek的韦恩图绘制:方法、优化与应用
  • NX884NX891美光固态闪存NX895NX907
  • ET2120工业Lora数传终端RS485串口4*AIAO+Moubus RTU
  • 北斗导航 | RTKLib中模糊度解算详解,公式,代码
  • 【愚公系列】《Manus极简入门》028-创业规划顾问:“创业导航仪”
  • Python - 如何打包并发布 Python 库到 PyPI
  • 运维体系架构规划