故障发生了!
周末正在逛街DBA小倩接到一个客户紧急任务,客户说自己的业务数据库突然不好使了,连接也出现了问题,开发人员连库就报这个错
还好正在逛街的小倩同学随身带了笔记本电脑
小倩要来了系统的登录用户名密码,登录到了数据库服务器一看
好家伙!根目录满了。
仔细检查发现,之前软件实施的人员把数据库直接装到了根目录下,最后导致根目录空间耗尽,数据库无法写入审计文件,无法登录了。该服务器在系统上还只有1个硬盘。
[root@dbserver /]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs tmpfs 1.9G 12M 1.9G 1% /run
tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 50G 50G 33M 100% /
/dev/mapper/centos-home xfs 445G 33M 445G 1% /home
/dev/sda1 xfs 1014M 151M 864M 15% /boot
tmpfs tmpfs 378M 0 378M 0% /run/user/0
[root@dbserver /]# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp u01 usr var
根分区是没地方了,可是/home分区却几乎没用。
这就是之前的集成实施人员和软件实施人员没有对接好,两个人都是二把刀,导致这么个结果。
此时如何快速恢复业务呢?
经过检查/home分区下只有用户的默认文件夹,并无其它生产数据。
与客户沟通后,客户没有相关的系统维护人员,全能小倩同学只能啥都干(锅来了也得接)
于是小倩建议客户把/home分区删除,扩容到根分区里,快速恢复业务。
说干就干,首先,先去$ORACLE_BASE目录下释放一点文件,比如下面这些,都可以删除
/u01/app/oracle/diag/rdbms/orcl/orcl/alert 目录下的log_*.xml文件
/u01/app/oracle/diag/rdbms/orcl/orcl/trace 目录下的日志文件,alert_orcl.log如果不是很大,不建议删除。
备份一下home下的文件,检查了只有oracle目录。
[root@dbserver home]# ls -al
total 0
drwxr-xr-x. 3 root root 20 Sep 7 21:59 .
dr-xr-xr-x. 18 root root 255 Sep 7 22:00 ..
drwx------ 2 oracle dba 62 Sep 7 21:59 oracle
这里我们用cp 直接复制/home目录下的文件到/root目录下。r表示目录下所有子目录也复制,p表进带权限复制。
cd /home/
cp * -rp /root/
cd ~
下一步,我们要卸载/home分区,把/home分区对应的lv删除。
[root@dbserver ~]# umount /home/
[root@dbserver ~]# lvremove /dev/centos/home
Do you really want to remove active logical volume centos/home? [y/n]: y
Logical volume "home" successfully removed
查看VG有空闲空间,这里我们再把剩余的空间扩容到根分区所属于的名为root的lv里。扩容lv后,在线直接扩容设备/dev/mapper/centos-root对应的根文件系统。扩容成功后根分区空间立即够用了,业务立马恢复。
[root@dbserver ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <499.00g 445.12g
[root@dbserver ~]# lvresize -l +100%FREE /dev/centos/root
Size of logical volume centos/root changed from 50.00 GiB (12800 extents) to 495.12 GiB (126751 extents).
Logical volume centos/root successfully resized.
[root@dbserver ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- 495.12g
swap centos -wi-ao---- <3.88g
[root@dbserver]# xfs_growfs /dev/mapper/centos-root
meta-data=/dev/mapper/centos-root isize=512 agcount=4, agsize=3276800 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=13107200, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=6400, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 13107200 to 129793024
[root@dbserver]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 12M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root 496G 50G 446G 11% /
/dev/sda1 1014M 151M 864M 15% /boot
tmpfs 378M 0 378M 0% /run/user/0
由于上文中通过df -Th看到了/分区的文件系统是xfs格式,所以最后用xfs_growfs扩容。
如果/分区是ext4的话,最后一步需要用resize2fs来进行动态扩容
resize2fs /dev/mapper/centos-root
最后别忘记了把备份走文件恢复到/home目录下。
[root@dbserver ~]# cp -rp oracle/ /home/
还有就是要把/etc/fstab里的/dev/mapper/centos-home挂载选项删除,否则下次重启开不开机了。
#删除这行或者注释掉
/dev/mapper/centos-home /home xfs defaults 0 0
完美收工了?
你以为这样就完了么?
没过1天,领导又找到了小倩,领导说客户觉得数据库放在本地磁盘空间太小了,性能也不好,他们又搞了个磁盘阵列,想把数据库整体迁移到存储上,想让你处理一下。
下一期我们一起来看看DBA小倩同学怎么操作
也欢迎关注我们的公众号【青年数据库学习互助会】
青学会汇集各路数据库大牛,一起互助学习、进步。