干掉一堆mysql数据库,仅需这样一个shell脚本(推荐)
作者:sery 发布时间:2024-01-14 19:48:51
一大早就被电话吵醒了,云某项目数据库全挂了,启动不了(睡得太死,没听到报警短信),吓得不轻啊!
电话中说所有mysql数据库主库都启动不了,但从库正常,怀疑是主库去连其它阿里云的主库了。这些数据库,以前是从阿里云迁移到idc机房的,因此他有这个判断。
赶紧打开电脑,连***,登录其中一个数据库服务器,试着执行如下命令启动mysql服务
[root@bbsmysql121 backup]#mysqld_safe –user=mysql &
启动失败,又换一台数据库服务器尝试,还是失败。考虑到所有的数据库都不能启动,因此可以初步判定,可能是数据库宿主机的问题导致的。
数据库的底层设计是两台物理节点虚拟化,外加一台物理机做备份。其中一台物理机的虚拟机全部做mysql主库,另一台物理机的虚拟机做mysql从库。
先放弃在虚拟机进行故障排查,赶紧登录宿主机系统。接下来,从两个方面排查问题所在。
ü 虚拟化后台管理系统
发现存储被塞满了,问题很严重。
ü ssh登录宿主系统debian
[6885005.756183] Buffer I/O error on dev dm-16, logical block 34667776, lost async page write
[6885005.757292] Buffer I/O error on dev dm-16, logical block 34667792, lost async page write
[6885005.758210] Buffer I/O error on dev dm-16, logical block 34667808, lost async page write
[6885005.759079] Buffer I/O error on dev dm-16, logical block 34667824, lost async page write
[6885005.759922] Buffer I/O error on dev dm-16, logical block 34667840, lost async page write
[6885005.760723] Buffer I/O error on dev dm-16, logical block 34667856, lost async page write
系统日志/var/log/messages发现大量的磁盘io错误。
综合上述发现,基本可以断定是磁盘出了问题:一个问题是proxmox划定的存储空间被塞满,另一个是磁盘io错误。知道问题所在以后,接下来的处理方案有两个:修复错误或者把从库提升为主库。考虑到待机问题,还是尽量争取修复主库吧,实在不能修复,再用第二套方案(提升从库)。
释放磁盘空间
为什么磁盘空间会塞满呢?应该有人在虚拟机上干了啥,而且可能是每个虚拟机都进行相同的操作,才会导致宿主机磁盘空间迅速填满。随便登录某个运行mysql数据库的虚拟机,执行命令
df-h
再登其它服务器,分区/dev/sdb1也是使用了90%以上。进入目录/data,运行如下指令查看目录空间占用情况:
[root@cumysql121 data]# du -hs *
4.0K backup
59G db_pkg
59G mysql_db
[root@cumysql121 data]# cd backup
[root@cumysql121 backup]# du -hs *
好家伙,好几个50多G的目录(写这个文章时,我已经删掉了,没有留存记录),这些文件,从目录名称上看,应该是备份数据库自动生成的。不管它,先删除。
肯定有人在系统做了自动任务,用指令crontab –l 查看,果然有发现:
#!/bin/bash
/usr/local/xtrabackup/bin/innobackupex --defaults-file=/etc/my.cnf --user=root --passwor='+N4dohask+MsLhG' /data/backup/
find /data/backup/* -mtime +1 -exec rm -fr {} \;
~
初一看这个脚本没什么问题,再仔细看,最后一行是符号“~”,有问题啊!写脚本的人的意图是每天进行一次备份数据库备份,然后删除前一天的历史备份数据,这样就不会把磁盘塞满了。
但是这有两个致命的问题,这里分别描述之。
备份策略错误
有专门的备份系统,应该把数据备份到该系统上,而不是本地备份。
手段错误
备份脚本写好以后,应该手动执行,以验证其正确性。而不是写完,直接扔在上边不管。
修复磁盘错误
紧急联系机房,请技术人员把KVM over 连接到宿主机,万一系统引导不了,可远程查看或者进入单用户模式进行 fsck一类的修复操作。
Ssh连宿主机系统debian,确认被塞满的磁盘空间被释放,然后执行reboot重启系统。几分钟以后,系统正常引导。
后续操作
查看系统日志,没有磁盘io报错,创建目录及文件,正常;启动各虚拟机、启动其上的数据库,都正常了。
通知各路人马,从业务层面检查是否正常。片刻,短信来一堆恢复信息,心里踏实多了。不用说,是项目方的sa干的这个好事,并且没有通知任何人。
私下给他说,这事自己跟其它人解释,以后干有风险的事情,最好相互通知一下。
以上所述是小编给大家介绍的干掉一堆mysql数据库,仅需这样一个shell脚本详解整合网站的支持!
来源:https://blog.51cto.com/sery/2373667
猜你喜欢
- Python内置函数1. classmethod、staticmethod、property 。上述三个内置函数在文章(Python进阶——
- 一.相关说明:1、openpyxl(可读写excel表)专门处理Excel2007及以上版本产生的xlsx文件;2007一下的版本为xls结
- 在实际的工作和学习中,许多人的SQL Server 2005数据库日志文件可能会发生损坏,例如硬件故障、计算机非正常重启或关机等等。在SQL
- 方法一:也是最简单的 直接使用pd.to_datetime函数实现data['交易时间'] = pd.to_datetime
- 本文介绍了python selenium UI自动化解决验证码的4种方法,分享给大家,具体如下:测试环境windows7+firefox50
- 学习Python数据分析挖掘实战一书时,在数据预处理阶段,有一节要使用拉格朗日插值法对缺失值补充,代码如下:#-*- coding:utf-
- resources文件下面有一个lang文件夹下面有一个en文件夹,这里就是后面要使用到的存放语言的语言包的地方了。下面设置app.php里
- bookheader.asp Recommended Books for <%=session(&quo
- 一、前言近期在实际项目中使用到了PID控制算法,于是就该算法做一总结。二、PID控制算法详解2.1 比例控制算法例子: 假设一个水缸,需要最
- 从那起,我已经对这些方法做了大量的研究,并且已经在很多场合使用他们。在很多任务中,他们被证明是非常有用的(特别关于结构的抽象 DOM 选择器
- 1. 起因当我们需要写一个非常非常长的循环时,通常在某个循环如果出现error,那么整个代码后面的循环就不能进行。这时候试想,如果你在服务器
- 概述函数是基本的代码块,用于执行一个任务语法函数定义func 函数名称( 参数列表] ) (返回值列表]){ 执行语句}一.函数
- <script language=javascript> </script>
- 编辑距离编辑距离(Edit Distance),又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。编
- Kettle中使用JavaScript调用jar包对文件内容进行MD5加密.本文主要知识点:JavaScript调用jar包对文件内容进行M
- python运行或调用另一个py文件或参数1. 运行另一个py文件(1)在file_A.py中运行file_B.py文件import oso
- 这里是WMP的版本ClassID,从WMP7后ID就成了clsid:6BF52A52-394A-11D3-B153-00C04F79FAA6
- Vue.js是一个构建数据驱动的web界面的库。重点集中在MVVM模式的ViewModel层,因此非常容易与其它库或已有项目整合Vue.js
- 使用vs2010连接mysql 数据库,1.装连接驱动,使用Connector/Net 连接驱动!下载地址:http://dev.mysql
- 开发环境 linux: python3.5.2 + ubuntu-gnome-16.04-desktop-amd64 w