lvm快照备份实验

news/2025/1/23 8:12:12/

实验环境

  • 操作系统:CentOS 8 或其他使用 systemd 和 LVM 的 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
2. 安装和配置 MySQL (安装在了lvm卷中 )
  • 安装 MySQL 并将数据存储在 /var/lib/mysql 中:
dnf install mysql-server -y
systemctl start mysqld
systemctl enable mysqld

3. 创建测试数据
  • 登录 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');

4. 创建 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

5. 备份数据
  • 使用 rsync 或 tar 备份数据:
# 使用 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

6. 清理快照
  • 完成备份后,清理快照:
# 卸载快照
umount /mnt/mysql_snapshot# 删除快照
lvremove -f /dev/vg_mysql/lv_mysql_snapshot
7. 恢复数据(可选)
  • 假设你需要恢复数据,你可以使用之前的备份文件:
# 假设使用 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

实验总结

  • 步骤 1创建 LVM 逻辑卷,将其格式化为 ext4 并挂载到 /var/lib/mysql,用于存储 MySQL 数据。
  • 步骤 2安装和启动 MySQL 服务
  • 步骤 3创建测试数据,验证 MySQL 数据库的正常使用。
  • 步骤 4使用 flush tables with read lock 锁定表,创建 LVM 快照,解锁表,然后挂载快照。
  • 步骤 5使用 rsync 或 tar 备份快照中的数据。
  • 步骤 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.ppmy.cn/news/1565439.html

相关文章

pytest执行报错:found no collectors

今天在尝试使用pytest运行用例的时候出现报错:found no collectors;从两个方向进行排查,一是看文件名和函数名是不是符合规范,命名要是"test_*"格式;二是是否存在修改文件名的情况,如果修改过文件…

《自动驾驶与机器人中的SLAM技术》ch4:基于预积分和图优化的 GINS

前言:预积分图优化的结构 1 预积分的图优化顶点 这里使用 《自动驾驶与机器人中的SLAM技术》ch4:预积分学 中提到的散装的形式来实现预积分的顶点部分,所以每个状态被分为位姿()、速度、陀螺零偏、加计零偏四种顶点&am…

在 Go 语言中如何高效地处理集合

文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons:JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram,自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 ? 5 IDEA必装的插件&…

项目集成RabbitMQ

文章目录 1.common-rabbitmq-starter1.创建common-rabbitmq-starter2.pom.xml3.自动配置1.RabbitMQAutoConfiguration.java2.spring.factories 2.测试使用1.创建common-rabbitmq-starter-demo2.目录结构3.pom.xml4.application.yml5.TestConfig.java 配置交换机和队列6.TestCon…

GS论文阅读--Hard Gaussian Splatting

前言 本文也是对高斯点云的分布进行优化的,看! 文章目录 前言1.背景介绍2.关键内容2.1 位置梯度驱动HGS2.2 渲染误差引导HGS 3.文章贡献 1.背景介绍 在训练过程中,它严重依赖于视图空间位置梯度的平均幅度来增长高斯以减少渲染损失。然而&…

如何使用 reduce() 方法对数组进行聚合计算?

数组聚合计算:如何使用 reduce() 方法进行数组遍历和聚合? 在 JavaScript 中,reduce() 方法是数组遍历和聚合计算中非常强大的工具。它通过遍历数组中的所有元素,将数组中的每个元素逐步汇总成一个单一的输出值(如数值…

Flink 的核心特点和概念

Flink 是一个流式处理框架,专注于高吞吐量、低延迟的数据流处理。它能处理无限流(即实时数据流)和有限流(批处理),具有很强的灵活性和可扩展性,广泛应用于实时数据分析、监控系统、数据处理平台…

西门子【Library of General Functions (LGF) for SIMATIC S7-1200 / S7-1500】

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 通用函数库 (LGF) 扩展了 TIA Portal 中用于 PLC 编程的 STEP 7 指令(数学函数、时间、计数器 等)。该库可以不受限制地使用,并包含 FIFO 、搜索功能、矩阵计算、 astro 计…