用lvm快照备份mysql的前题是mysql的/data和log目录都在同一个lv上。不过鉴于一般vg里没有额外的空间做快照,可以选择临时插一个空间足够大的U盘。至于空间多大够用可以这样估计:如果整个数据库的容量约40G,按60MB/s复制,需要复制682秒。如果你的数据库每秒钟写磁盘1MB,那682秒会写682MB。因为有时候数据库多次写的是同一块数据,只会在第一次写的时候把原来的数据复制到快照的空间里。所以快照原则上大于682MB就够了。但是为了避免额外的错误,建议多留一些空间,避免因快照空间满了导致被快照的分区无法写入。如果新加的快照大小大于数据库所在的lv总大小,那就完全不用担心了。
pvcreate /dev/sdd //此处是新添加的磁盘,用fdisk -l查看vgextend VolGroup /dev/sdd //此处的VolGroup通过df -h 加 lvdisplay确认要把pv加到哪个vg里//再启动个终端//登陆mysqlmysql>flush tables with read lock;mysql>flush logs; //再启动个终端执行$ mysql -uroot -p -e 'show master status\g'> ~/master.info//,保存master位置信息 lvcreate -L 10G -s -p r -n snap_data /dev/VolGroup/lv_root// 通过df -h加lvdisplay查看要快照的lv设备,其中10G是空间 -s是快照 -n是名字 -p r代表只读快照mkdir -p /mnt/snapmount /dev/VolGroup/snap_data /mnt/snap/ls /mnt/snap//去刚才锁表的终端,解锁表unlock tables;
此处拷贝/mnt/snap下的数据,复制出去,记得一起复制 ~/master.info和/etc/my.cnf,建slave或者恢复数据的时候会用。
//拷贝完后,卸载:umount /mnt/snaplvremove /dev/VolGroup/snap_data//从vg里移除lvvgreduce VolGroup /dev/sdd//确认是否删除可以用vgdisplay -v//删除pvpvremove /dev/sdd
删除后即可正常移除新添加的硬盘了。
其他命令:
lvs查看所有lv的使用情况,可以看到快照使用空间的百分比vgdispaly -v 查看vg的组成