CentOS 7实战:MySQL数据库LVM在线扩容全流程解析
当数据库服务面临存储空间不足时,传统停机扩容方式往往意味着业务中断。本文将演示如何在CentOS 7环境下,通过LVM技术实现MySQL存储的在线无缝扩容,涵盖从物理磁盘接入到文件系统扩展的完整闭环操作。
1. 环境准备与初始状态检查
在开始扩容前,我们需要确认当前存储架构和可用资源。假设服务器已配置LVM,MySQL数据目录挂载在/var/lib/mysql,使用XFS文件系统。
首先通过以下命令集确认存储现状:
# 查看块设备布局 lsblk -f # 检查物理卷状态 pvs # 查看卷组剩余空间 vgs # 列出逻辑卷详情 lvs # 显示文件系统挂载信息 df -Th /var/lib/mysql典型输出示例:
[root@mysql-server ~]# vgs VG #PV #LV #SN Attr VSize VFree mysql_vg 1 1 0 wz--n- 100.00g 0若VFree显示为0,则需先添加新物理磁盘。在虚拟机环境中,可通过管理界面添加新硬盘(建议使用SCSI类型),随后在系统中执行lsblk确认新磁盘标识(如sdb)。
注意:生产环境中建议对新增磁盘进行坏道检测,可使用
badblocks -sv /dev/sdb进行基础检查
2. 物理磁盘整合到LVM架构
新增磁盘需要经过三个步骤才能被LVM体系识别使用:
2.1 磁盘分区与类型标记
虽然LVM可以直接使用整块磁盘,但最佳实践是创建独立分区:
fdisk /dev/sdb交互式操作步骤:
- 输入
n创建新分区 - 选择
p主分区 - 使用默认分区号1
- 起始扇区直接回车
- 输入
t修改分区类型 - 输入
8e设置为LVM类型 - 最后
w写入变更
验证分区结果:
lsblk /dev/sdb2.2 创建物理卷(PV)
将分区初始化为LVM物理卷:
pvcreate /dev/sdb1验证创建结果:
pvs /dev/sdb12.3 扩展卷组(VG)
将新物理卷加入现有卷组:
vgextend mysql_vg /dev/sdb1扩容后检查可用空间:
vgs mysql_vg输出应显示新增容量:
VG #PV #LV #SN Attr VSize VFree mysql_vg 2 1 0 wz--n- 200.00g 100.00g3. 逻辑卷动态扩容实战
3.1 扩展逻辑卷(LV)
确定需要扩容的逻辑卷路径(可通过lvs查看),以下示例扩展50GB:
lvextend -L +50G /dev/mysql_vg/mysql_lv验证扩容:
lvs /dev/mysql_vg/mysql_lv输出应显示容量增加:
LV VG Attr LSize Pool Origin Data% Meta% mysql_lv mysql_vg -wi-ao---- 150.00g3.2 文件系统在线扩展
根据文件系统类型选择对应命令:
XFS文件系统:
xfs_growfs /var/lib/mysqlEXT4文件系统:
resize2fs /dev/mysql_vg/mysql_lv验证最终容量:
df -h /var/lib/mysql成功输出应显示扩容后的尺寸:
Filesystem Size Used Avail Use% Mounted on /dev/mapper/mysql_vg-mysql_lv 150G 45G 106G 30% /var/lib/mysql4. 高级技巧与故障排查
4.1 精确容量控制方法
LVM支持多种容量指定方式:
- 按绝对大小:
-L 200G设置固定值 - 按百分比:
-l +50%FREE使用剩余空间的50% - 按PE数量:
-l +1024增加1024个物理扩展块
查看PE大小:
vgdisplay mysql_vg | grep "PE Size"4.2 常见问题解决方案
问题1:扩容后df显示容量未变
- 检查是否执行了文件系统扩容命令
- 确认文件系统类型是否识别正确
问题2:vgs显示有空间但lvextend失败
- 检查卷组是否处于活动状态:
vgchange -ay mysql_vg - 验证物理卷是否正常:
pvscan
问题3:XFS文件系统报错
- 尝试卸载后修复:
xfs_repair /dev/mysql_vg/mysql_lv - 检查日志:
dmesg | grep xfs
4.3 自动化监控建议
配置监控脚本定期检查存储使用率:
#!/bin/bash THRESHOLD=80 CURRENT=$(df /var/lib/mysql | awk '{print $5}' | tail -1 | tr -d '%') if [ $CURRENT -ge $THRESHOLD ]; then echo "Warning: MySQL storage usage $CURRENT%" | mail -s "Storage Alert" admin@example.com fi添加到cron定时任务:
crontab -e添加行:
0 * * * * /path/to/monitor_script.sh5. 性能优化与最佳实践
5.1 条带化配置提升IO性能
创建逻辑卷时指定条带参数:
lvcreate -L 100G -i 2 -I 4 -n mysql_lv mysql_vg-i 2:跨2个物理卷-I 4:条带大小4KB
5.2 在线迁移与负载均衡
将数据从旧物理卷迁移到新物理卷:
pvmove /dev/sda1 /dev/sdb15.3 快照备份策略
创建数据库一致性快照:
lvcreate -L 10G -s -n mysql_snap /dev/mysql_vg/mysql_lv恢复快照(需先卸载):
lvconvert --merge /dev/mysql_vg/mysql_snap在MySQL服务器负载较低的时段进行扩容操作,建议提前在测试环境验证完整流程。某次生产环境扩容中,通过预先添加10%的缓冲空间,成功避免了三个月内的二次扩容需求。