Setup
Create logical volume
$ sudo lvm vgdisplay
$ sudo lvm lvcreate -L 100G -n /dev/vg0/data vg0
$ sudo mkfs.ext3 -j /dev/vg0/data
$ sudo mkdir /data
$ sudo mount /dev/vg0/data /data
Create phyical volume
- Volume group name: cvg01.
- Phyisical disk: /dev/sdb1.
$ sudo fdisk /dev/sdb
$ sudo lvm pvcreate /dev/sdb1
$ sudo lvm vgcreate -s 32M cvg01 /dev/sdb1
Maintenance
Extending a physical volume
With available space on the same disk, remove the last parition on that disk and re-create the parition with the same start point to extend it to the maximum available space. fdisk
works just fine this. Even is it's the current /
disk, this works.
Extending a volume group
$ sudo vgextend /dev/vg0 /dev/sdb1
Extending a logical volume
$ sudo lvm vgdisplay # Check available disk space
$ sudo lvm lvextend -L30G /dev/vg0/var # Extending lv var
$ sudo lvxtend -l 100%FREE /dev/vg0/var # Extending lv var to max.
$ sudo ext2online -v /dev/vg0/var # Extending on RedHat 4.x
$ sudo resize2fs -p /dev/vg0/var # Extending on CentOS 5.x
$ sudo xfs_growfs /dev/vg0/var # CentOS 7
resize2fs
is part of the package e2fsprogs.
Shrink a logical volume
- Can not be done online.
$ sudo init1
$ umount /usr
$ e2fsck -f /dev/vg0/usr
$ resize2fs /dev/vg0/usr 2G
$ mount /usr
$ init 3
Free LVM space in MB
$ sudo pvs --units m
Snapshots
General steps:
- Stop all access to the database.
- Create a snapshot image within LVM on a free LVM space.
- Enable all access to the database.
- Mount the snapshot and access the files.
Preperations
$ mysqladmin -u root -p variables | grep datadir
| datadir | /var/lib/mysql/
$ df /var/lib/mysql
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/vg_mysqllvmtest-lv_root
8063408961448 6692360 13% /
$ lvscan
ACTIVE Original '/dev/vg_mysqllvmtest/lv_root' [7,81 GiB] inherit
ACTIVE '/dev/vg_mysqllvmtest/lv_swap' [3,94 GiB] inherit
$ vgdisplay vg_mysqllvmtest | grep Free
Free PE / Size 1986 / 7,76 GiB
Step 1
Lock database access:
$ mysql> FLUSH TABLES WITH READ LOCK;
Step 2
In additional Mysql Session create the Snapshot
# Use the rest of available space for the snapshot
$ lvcreate -l100%FREE -s -n mysql-backup /dev/vg_mysqllvmtest/lv_root
Step 3
Remove the lock on the database:
$ mysql> UNLOCK TABLES;
Step 4
$ lvscan
ACTIVE Original '/dev/vg_mysqllvmtest/lv_root' [7,81 GiB] inherit
ACTIVE '/dev/vg_mysqllvmtest/lv_swap' [3,94 GiB] inherit
ACTIVE Snapshot '/dev/vg_mysqllvmtest/mysql-backup' [7,76 GiB] inherit
$ sudo mkdir -p /mnt/snapshot
$ sudo mount /dev/vg_mysllvmtest/lv_root /mnt/snapshot
Links
- http://www.lullabot.com/blog/articles/mysql-backups-using-lvm-snapshots
- http://www.mysqlperformanceblog.com/2006/08/21/using-lvm-for-mysql-backup-and-replication-setup/
- http://www.lenzg.net/mylvmbackup/