Mysql-lvm快照备份

本文详细介绍了LVM(逻辑卷管理)的概念、优势及其在动态管理磁盘空间的应用,特别聚焦于如何利用LVM进行MySQL数据库的热备份过程,包括创建LVM、快照及数据迁移等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

什么是LVM?

 

什么是LVM?LVM(Logical Volume Manager)逻辑卷管理,是一种将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘的 分区加入其中,这样可以事项一种磁盘空间的动态管理,相对于普通的磁盘分区有很大的灵活性,使用普通的磁盘分区,当一个磁盘的分区空间不够使用的时候,可 能就会带来很大的麻烦。使用LVM在一定程度上就可以解决普通磁盘分区带来的问题。 

 

为什么使用LVM?

LVM通常用于装备大量磁盘的系统,但它同样适于仅有一、两块硬盘的小系统。

 

使用LVM的益处? 

在使用很多硬盘的大系统中,使用LVM主要是方便管理、增加了系统的扩展性。 在一个有很多不同容量硬盘的大型系统中,对不同的用户的空间分配是一个技巧性的工作,要在用户需求与实际可用空间中寻求平衡。用户/用户组的空间建立在LVM上,可以随时按要求增大,或根据使用情况对各逻辑卷进行调整。当系统空间不足而加入新的硬盘时,不必把用户的数据从原硬盘迁 移到新硬盘,而只须把新的分区加入卷组并扩充逻辑卷即可。同样,使用LVM可以在不停服务的情况下。把用户数据从旧硬盘转移到新硬盘空间中去。 

名词解释

1. PV(Physical Volume):物理卷,处于LVM最底层,可以是物理硬盘或者分区。     
2.PP(Physical Extend):物理区域,PV中可以用于分配的最小存储单元,可以在创建PV的时候制定,如1M, 2M, 4M, 8M, 32M, 64M…组成同一VG中所有PV的PE大小应该相同。     
3.VG(Volume Group):卷组,建立在PV之上,可以含有一个到多个PV。    
4. LV(Logical Volume):逻辑卷,建立在VG之上,相当于原来分区的概念。不过大小可以动态改变。

创建LVM

系统中增加一块硬盘,fdisk -l 可以看到是/dev/sdb ,10G大小;

[root@localhost ~]# fdisk -l

Disk /dev/sda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000d7372

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          64      512000   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              64        2611    20458496   8e  Linux LVM

Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xe0bc4c21

然后创建磁盘分区,类型为LVM

[root@localhost ~]# fdisk /dev/sdb

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-1305, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-1305, default 1305): +1G

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
2
Invalid partition number for type `2'
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (133-1305, default 133):
Using default value 133
Last cylinder, +cylinders or +size{K,M,G} (133-1305, default 1305): +1G

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 3
First cylinder (265-1305, default 265):
Using default value 265
Last cylinder, +cylinders or +size{K,M,G} (265-1305, default 1305): +1G

Command (m for help): p

Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xe0bc4c21

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         132     1060258+  83  Linux
/dev/sdb2             133         264     1060290   83  Linux
/dev/sdb3             265         396     1060290   83  Linux

Command (m for help): t
Partition number (1-4): 1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)

Command (m for help): t
Partition number (1-4): 2
Hex code (type L to list codes): 8e
Changed system type of partition 2 to 8e (Linux LVM)

Command (m for help): t
Partition number (1-4): 3
Hex code (type L to list codes): 8e
Changed system type of partition 3 to 8e (Linux LVM)

Command (m for help): p

Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xe0bc4c21

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         132     1060258+  8e  Linux LVM
/dev/sdb2             133         264     1060290   8e  Linux LVM
/dev/sdb3             265         396     1060290   8e  Linux LVM

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

在这块硬盘上创建3个分区,类型为Linux LVM; 可以fdisk -l /dev/sdb查看确认

[root@localhost ~]# fdisk -l /dev/sdb

Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xe0bc4c21

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         132     1060258+  8e  Linux LVM
/dev/sdb2             133         264     1060290   8e  Linux LVM
/dev/sdb3             265         396     1060290   8e  Linux LVM
[root@localhost ~]#

创建物理卷PV: pvcreate /dev/sdb1 /dev/sdb2 /dev/sdb3

pvs或者pvscan可以查看物理卷;  

[root@localhost ~]# pvcreate /dev/sdb1 /dev/sdb2 /dev/sdb3
  Physical volume "/dev/sdb1" successfully created
  Physical volume "/dev/sdb2" successfully created
  Physical volume "/dev/sdb3" successfully created
[root@localhost ~]# pvs
  PV         VG       Fmt  Attr PSize  PFree
  /dev/sda2  VolGroup lvm2 a--u 19.51g    0
  /dev/sdb1           lvm2 ----  1.01g 1.01g
  /dev/sdb2           lvm2 ----  1.01g 1.01g
  /dev/sdb3           lvm2 ----  1.01g 1.01g
[root@localhost ~]# pvscan
  PV /dev/sda2   VG VolGroup        lvm2 [19.51 GiB / 0    free]
  PV /dev/sdb1                      lvm2 [1.01 GiB]
  PV /dev/sdb2                      lvm2 [1.01 GiB]
  PV /dev/sdb3                      lvm2 [1.01 GiB]
  Total: 4 [22.54 GiB] / in use: 1 [19.51 GiB] / in no VG: 3 [3.03 GiB]

创建物理卷组VG: vgcreate  vgname /dev/sdb1 /dev/sdb2 /dev/sdb3

查看卷组使用vgs 或vgscan

[root@localhost ~]# vgcreate vgmysql /dev/sdb1 /dev/sdb2 /dev/sdb3
  Volume group "vgmysql" successfully created
[root@localhost ~]# vgs
  VG       #PV #LV #SN Attr   VSize  VFree
  VolGroup   1   2   0 wz--n- 19.51g    0
  vgmysql    3   0   0 wz--n-  3.02g 3.02g
[root@localhost ~]# vgscan
  Reading all physical volumes.  This may take a while...
  Found volume group "vgmysql" using metadata type lvm2
  Found volume group "VolGroup" using metadata type lvm2
[root@localhost ~]#

创建逻辑卷: lvcreate -L size -n lv_name vg_name 指定在那个卷组上创建逻辑卷;

lvs或lvscan查看逻辑卷;

[root@localhost ~]# lvcreate -L 3G -n lv_mysql vgmysql
  Logical volume "lv_mysql" created.
[root@localhost ~]# lv
lvchange     lvcreate     lvextend     lvmchange    lvmconfig    lvmdump      lvmsadc      lvreduce     lvrename     lvs
lvconvert    lvdisplay    lvm          lvmconf      lvmdiskscan  lvmetad      lvmsar       lvremove     lvresize     lvscan
[root@localhost ~]# lvs
  LV       VG       Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv_root  VolGroup -wi-ao---- 15.65g
  lv_swap  VolGroup -wi-ao----  3.86g
  lv_mysql vgmysql  -wi-a-----  3.00g
[root@localhost ~]# lvscan
  ACTIVE            '/dev/vgmysql/lv_mysql' [3.00 GiB] inherit
  ACTIVE            '/dev/VolGroup/lv_root' [15.65 GiB] inherit
  ACTIVE            '/dev/VolGroup/lv_swap' [3.86 GiB] inherit
[root@localhost ~]#

创建文件系统: 逻辑卷创建完毕后就可以在此基础上创建文件系统: mke2fs -j 创建ext3文件系统

[root@localhost ~]# mke2fs -j /dev/vgmysql/lv_mysql
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
196608 inodes, 786432 blocks
39321 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=805306368
24 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
	32768, 98304, 163840, 229376, 294912

Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 35 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@localhost ~]# blkid  /dev/vgmysql/lv_mysql
/dev/vgmysql/lv_mysql: UUID="11580ead-9f15-4b2a-8676-b0462b9457aa" SEC_TYPE="ext2" TYPE="ext3"
[root@localhost ~]#

挂在文件目录: mount /dev/vgmysql/lv_mysql /mnt,并把信息加到/etc/fstab中,这样以后开机就会自动挂在;

[root@localhost ~]# mount /dev/vgmysql/lv_mysql /mnt/
[root@localhost ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
                       16G   12G  3.4G  78% /
tmpfs                 932M     0  932M   0% /dev/shm
/dev/sda1             485M   32M  429M   7% /boot
/dev/mapper/vgmysql-lv_mysql
                      3.0G   69M  2.8G   3% /mnt
[root@localhost ~]# vim /etc/fstab

[root@localhost ~]# cat /etc/fstab


/dev/mapper/VolGroup-lv_root /                       ext4    defaults        1 1
UUID=e48ae1c4-8466-42b8-9d27-c5c6793e4da2 /boot                   ext4    defaults        1 2
/dev/mapper/VolGroup-lv_swap swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
/dev/vgmysql/lv_mysql 	/mnt			ext3	defaults	0 0
[root@localhost ~]#

逻辑卷备份Mysql

LVM中snapshot通过“写时复制”(copy on write) 来实现,即当一个snapshot创建的时候,仅拷贝原始卷里数据的元数据(meta-data);创建的时候,并不会有数据的物理拷贝,因此snapshot的创建几乎是实时的,当原始卷上有写操作执行时,snapshot跟踪原始卷块的改变,这个时候原始卷上将要改变的数据在改变之前被拷贝到snapshot预留的空间里。
                                                                                                  原文:https://blog.youkuaiyun.com/yanggd1987/article/details/50124997 
 

前提条件:

  •  快照的vg和备份源必须是同一个;
  • 此逻辑卷需要有足够空间进行快照;
  • 数据文件和事物日志放在同一个逻辑卷上;

 

逻辑卷上放mysql data文件:

​​[root@localhost mysql]# cat /etc/my.cnf | grep datadir
datadir =/mnt/mysql
[root@localhost mysql]# ls /mnt/mysql
apple     jianghu                     localhost-relay-bin.index  mysql          mysql_slow_20180203.log  performance_schema  relay-log.info
auto.cnf  localhost-relay-bin.000007  master.info                mysql_run.err  mysql_slow.log           pid_mysql.pid       sys
[root@localhost mysql]#

创建快照,lvcreate -L 500M -s -n lv_bak -p r /dev/vgmysql/lv_mysql

[root@localhost vgmysql]# lvcreate -L 500M -s -n lv_bak -p r /dev/vgmysql/lv_mysql
  Volume group "vgmysql" has insufficient free space (6 extents): 125 required.
[root@localhost vgmysql]#

提示卷组空间不足,vgdisplay 只空闲24M了; 增加卷组

[root@localhost vgmysql]# vgdisplay vgmysql
  --- Volume group ---
  VG Name               vgmysql
  System ID
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  8
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                3
  Act PV                3
  VG Size               3.02 GiB
  PE Size               4.00 MiB
  Total PE              774
  Alloc PE / Size       768 / 3.00 GiB
  Free  PE / Size       6 / 24.00 MiB
  VG UUID               5y373c-0gl8-p9hi-Jd9L-VBeu-G9t7-Cp3fpv

[root@localhost vgmysql]#

vgextend vgmysql /dev/sdb5

[root@localhost vgmysql]# pvs
  PV         VG       Fmt  Attr PSize  PFree
  /dev/sda2  VolGroup lvm2 a--u 19.51g     0
  /dev/sdb1  vgmysql  lvm2 a--u  1.01g     0
  /dev/sdb2  vgmysql  lvm2 a--u  1.01g     0
  /dev/sdb3  vgmysql  lvm2 a--u  1.01g 24.00m
  /dev/sdb5           lvm2 ----  3.01g  3.01g
[root@localhost vgmysql]# vgextend vgmysql /dev/sdb5
  Volume group "vgmysql" successfully extended
[root@localhost vgmysql]# pvs
  PV         VG       Fmt  Attr PSize  PFree
  /dev/sda2  VolGroup lvm2 a--u 19.51g     0
  /dev/sdb1  vgmysql  lvm2 a--u  1.01g     0
  /dev/sdb2  vgmysql  lvm2 a--u  1.01g     0
  /dev/sdb3  vgmysql  lvm2 a--u  1.01g 24.00m
  /dev/sdb5  vgmysql  lvm2 a--u  3.01g  3.01g
[root@localhost vgmysql]# vgdisplay vgmysql
  --- Volume group ---
  VG Name               vgmysql
  System ID
  Format                lvm2
  Metadata Areas        4
  Metadata Sequence No  9
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                4
  Act PV                4
  VG Size               6.03 GiB
  PE Size               4.00 MiB
  Total PE              1544
  Alloc PE / Size       768 / 3.00 GiB
  Free  PE / Size       776 / 3.03 GiB
  VG UUID               5y373c-0gl8-p9hi-Jd9L-VBeu-G9t7-Cp3fpv

现在可以看到Free 空闲了3G空间;

创建快照 lvcreate -L 500M -s -n lv_bak -p r /dev/vgmysql/lv_mysql

[root@localhost vgmysql]# lvcreate -L 500M -s -n lv_bak -p r /dev/vgmysql/lv_mysql
  Logical volume "lv_bak" created.

然后就可以释放锁了;mysql > unlock tables;

mount /dev/vgmysql/lv_bak /media/ 将其挂在到/media目录

可以看到所有的文件信息;然后可以进行异地备份,cp复制到其他地方;此时的所有操作都不会影响到mysql;

因为快照是瞬间完成的,所以可以说几乎热备;

[root@localhost mnt]# mount  /dev/vgmysql/lv_bak /mnt/bak/
mount: block device /dev/mapper/vgmysql-lv_bak is write-protected, mounting read-only
[root@localhost mnt]# ls /mnt/bak/mysql/
apple     jianghu                     localhost-relay-bin.000008  master.info  mysql_run.err            mysql_slow.log      pid_mysql.pid   sys
auto.cnf  localhost-relay-bin.000007  localhost-relay-bin.index   mysql        mysql_slow_20180203.log  performance_schema  relay-log.info
[root@localhost mnt]#

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值