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.pswp.cn/bicheng/80413.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/80413.shtml
英文地址,請注明出處:http://en.pswp.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…