作为故障预警,应该尽量把问题扼杀在摇篮中,当出现问题及时处理,否则等到服务器宕机,再去”救火“工作,往往不能第一时间准确诊断。所以应建立监控流程,能够提前预警阀值,马上查看问题,降低风险。

影响性能的因素

磁盘I/O

影响mysql innodb引擎性能最主要因素是磁盘I/O。最广泛使用的硬盘都是机械硬盘,机械硬盘运作时,磁盘需进行寻址,随机读写速度大大你玩顺序读写。每次读写动作时,磁道可能存在较大的偏移,磁盘寻址时间的延迟,使I/O性能急剧下降。因此生产环境中,常常使用RAID5、RAID10磁盘阵列并行读写,或者采用SSD固态硬盘,大幅提升读写速度。

内存

Innodb引擎会在内存中创建缓存池innodb buffer pool,将数据和索引放在内存中读写,使用数据库性能非常高。因此innodb buffer pool的大小直接影响着mysql的运行性能,生产环境中,会将innodb buffer pool size调整为主机内存的80%左右。

慢SQL

mysql优化器并不会优化所有SQL,SQL不能合理的利用到索引,或者大量使用聚合运算,往往也是造成故障的元凶。

系统性能评估

影响系统性能的因素

CPU性能

内存性能及大小

磁盘I/O

系统性能评估指标

CPU性能指标

cpu使用率

cpu load队列负载

cpu idle空闲度

cpu wait I/O等待

内存性能指标

占用内存

资源缓存

文件缓冲

空闲内存

虚拟交换内存

磁盘性能指标

磁盘I/O等待时间

I/O队列,队列过高,说明磁盘处理能力存在瓶颈

平均等待时间

每秒读写速度

性能监控工具

linux下有很多知名的性能查看工具。多数工具都是通过读取系统目录/proc下的各种文件采集性能的。

我经常用的工具有top,sar,dstat,iostat,mpstat等。其中dstat功能丰富,支持查看CPU,内存,磁盘,交换内存,网络,TCP,mysql等指标,是一个全能型的性能查看工具。

dstat工具使用:

# dstat [option] [interval间隔] [count次数]

-c: 查看cpu的使用情况 -m: 查看内存情况 -d: 查看磁盘IO读写情况 -n: 网络出入速度 -l: cpu负载 -t: 查看TCP连接统计 -s: 虚拟交换内存的使用情况 -p: 查看进程运行情况

sar工具,可以查看一天中各时间段的性能统计信息。

# sar [option] [interval间隔] [count次数]

-A: 查看所有信息汇总 -q: cpu load负载 -p: cpu使用情况 -r: 内存使用情况 -d: 查看磁盘IO读写情况 -n: 网络流量情况

故障与处理

连接数过多

连接数过多有多种原因,存在慢SQL造成后续的SQL阻塞,磁盘I/O,CPU繁忙,导致数据库死机。

最直接的方法是,可以增加max_connections的大小,提高数据库最大连接数,但维持会话连接是需要占用内存的,连接数太多,占用大师内存,也是治标不治本。

Mysql数据库在处理完一条SQL后,会自动关闭空闲的会话连接,空闲会话关闭时间,取决于参数wait_timeout的数值(单位:秒),尽量不要调得太大,造成资源浪费。根据生产环境实际情况,适当调整为100-300秒。

如果在业务访问量非常大,但有时因故障需要重启的情况。重启后,内存缓存会被释放掉,这样大量用户访问时,首次查询数据因没有缓存,会比正常情况慢很多,短期内会有一个性能高峰,甚至导致连接数爆满。那么如何解决这个问题?是否可以让mysql自动加载数据到内存?Mysql innodb提供了一个预热功能,提前加载数据到缓存中。my.cnf配置以下参数:

# 在关机时导出内存缓存到磁盘

innodb_buffer_pool_dump_at_shutdown = 1

# 在启动时加载磁盘缓存到内存中

innodb_buffer_pool_dump_at_startup = 1

# 手动导出缓存到磁盘

innodb_buffer_pool_dump_now = 1

# 手动加载缓存到内存

innodb_buffer_pool_load_now = 1

在使用Innodb引擎时,同时也要保证innodb_buffer_pool_size大小充足,innodb_buffer_pool_size/data_size的比值越大越好,如果过小,会增加磁盘I/O的压力,降低SQL的执行效率,从而连接数过多。

慢SQL

慢SQL会占用大量系统资源,比如大量使用子查询,聚合函数。具体将在后续详细说明性能优化。

事务SQL量的突增

有时候因业务量的突然上涨,引起的某事务,某SQL的执行次数增多,造成数据库压力过大。此时就需要通过查看日志分析突增的SQL,给开发作以优化。

虚拟交换内存不足

合理增加swap内存的大小,以免内存用尽时死机。

对内存进行监控,能够的交易预警,作出处理。

ibdata数据文件误删除

因操作失误误删数据文件,此时千万不能关掉mysqld进程,进程杀死,内存缓存,fd文件被释放,无法进行恢复。

找到Mysql进程pid

进入目录/proc/pid/fd内

ls -l |grep ib_,会看到几个fd的链接文件,也就是之前删除掉的数据文件,此时还在内存中。

在数据库中执行flush tables with read lock进行锁库,防止数据写入,以便恢复

查看show master status,等待file及pos点不在变化

把第3步的几个文件,用cp命令复制到数据库目录即可

重启mysql服务,恢复完成。

主从复制故障处理

主从复制时,经常会出现错误,大部分人面对错误时,直接进行跳过,其实可能会造成主从数据不一致,对以后故障切换造成潜在的风险。而导出导入数据,重新做主从同步,又太耗费时间。所以,以下是针对这一方面问题的处理,作出的详细总结。

在master上删除数据出现的故障

在master上删除数据后,slave因找不到相应记录而报错,这种情况由于主库已经将记录删除,所以从库也可以删除,直接跳过错误即可。

stop slave; set global sql_slave_skip_counter=1;start slave;

主键重复

主键重复要插入的记录,在从库上已经存在了。可以将这条记录删除,从主库上导出信息,插入从库表中,重启同步进程。

stop slave; set global sql_slave_skip_counter=1;start slave;

在master上更新记录,slave找不到记录

从主库上导出信息,插入从库表中,重启同步进程。

stop slave; set global sql_slave_skip_counter=1;start slave;

slave宕机,导致relay-log损坏,同步出错

如果slave死机,重启后可能同步报错error initializing relay log position:I/O reading...,

这是因为relayl-log损坏了。mysql 5.5之后版本,配置relay-log-recover=1参数就可以自动恢复日志同步。

slave落后延迟过多

有时查看从库同步状态,会发现有一项指标,seconds_behind_master的数值较大,这个数值代表落后主库的秒数,通常由慢SQL,慢事务导致。因此避免使用大的耗时事务,及时优化SQL,是保证从库不被拖跨的一个措施。

slave自动跳过错误

同步时经常出现的错误代码1023(记录不存在),1062(主键重复),这些错误无关紧要,每次都手动处理会很繁琐,浪费不必要的时间,我们可以将其设置自动跳过。

在配置文件中增加:

# 自动跳过错误

slave_skip_errors=1023,1062

主从数据库版本不一致引起出错

如果主从版本不一致,可能会导致同步错误。因为低版本的mysql不兼容高版本中的某些语法或特性,则主库版本高,从库版本低时,从库会报错,而主库版本低,从库版本高时,同步正常。生产环境中,应该保持数据库版本一致,避免增加故障隐患。

mysql故障诊断_mysql常见故障诊断相关推荐

  1. 简单mysql优化_mysql常见语句的简单优化策略

    常见sql优化方法 (1)优化insert语句 大批量插入数据: 对于Myisam类型的表,可以通过以下方式快速的导入大量的数据. ALTER TABLE tblname DISABLE KEYS; ...

  2. mysql 公式_MySQL常见公式汇总1

    #筛选每组比自己小的数量个数 select t1.company, t1.remark, t1.score, (select count(1) from sheet t2 where t1.remar ...

  3. 计算机常见故障任务书,CAK6132A数控车床常见故障诊断与处理任务书.doc

    毕业设计课题要求与说明(教师上报题目电子档)出题教师姓名:课题序号课题名称及内容介绍限选人数选题学生应具备的条件1课题名称:CAK6132A数控车床常见故障诊断与处理基本任务:1.分析数控机床的工作原 ...

  4. 转向系统常见故障诊断与排除

    编辑:车修养 2012-5-16 来源:互联网 转向系统用于改变汽车的行驶方向和使汽车保持稳定的直线行驶.转向系统结构形式多种多样,但所有的转向系统都由三部分组成:转向传动机构.机械转向器和转向操纵机 ...

  5. MySQL支持的四种索引_Mysql常见四种索引的使用

    提到mysql优化,索引优化是必不可少的.其中一种优化方式 --索引优化,添加合适的索引能够让项目的并发能力和抗压能力得到明显的提升. 我们知道项目性能的瓶颈主要是在"查(select)&q ...

  6. centos mysql安装_mysql yum源安装

    部署服务器环境的时候经常要安装mysql,以下是常见的安装方式 源码安装 rpm包安装 yum源安装 这篇主要介绍yum源安装. yum源下载 进入 https://dev.mysql.com/dow ...

  7. Linux下安装mysql(2) 及常见问题解决(CentOS)

    Linux下安装mysql(2) 及常见问题解决(CentOS) 参考文章: (1)Linux下安装mysql(2) 及常见问题解决(CentOS) (2)https://www.cnblogs.co ...

  8. java mysql 全文索引_MySQL索引原理

    什么是索引? "索引"是为了能够更快地查询数据.比如一本书的目录,就是这本书的内容的索引,读者可以通过在目录中快速查找自己想要的内容,然后根据页码去找到具体的章节. 数据库也是一样 ...

  9. MySQL数据库中常见的日志文件汇总!

    一个优秀的Java后端开发工程师一定要掌握MySQL数据库,而日志文件记录了影响MySQL数据库的各种类型活动,因此也成为其必须要掌握的知识.今天千锋ava培训小编就给大家介绍MySQL数据库中常见的 ...

最新文章

  1. Unity 4.x 2D游戏开发基础教程大学霸第一更
  2. STM32启动BOOT0 BOOT1设置方法 [
  3. VTK:多行文本用法实战
  4. 8部门联合约谈滴滴、高德等10家交通运输新业态平台公司
  5. 贵州省获批开展公共资源交易区块链数据共享工作试点
  6. 面试官:你说对 MySQL 事务很熟?那我问你 10 个问题
  7. Ajax搜索提示功能
  8. Python 操作 protobuf 常见用法
  9. 服务器虚拟机要怎么安装,服务器虚拟机怎么安装
  10. pdf reference官方指南之-图片
  11. 【OpenCV 例程200篇】201. 图像的颜色空间转换
  12. C++中convertTo对应的python代码
  13. 国外开放的硕博论文、期刊、数据库下载网站
  14. acer switch 10 linux,【AcerSwitch10评测】高颜值的2in1电脑 Acer Switch 10评测(全文)_Acer Switch 10_笔记本评测-中关村在线...
  15. 抽纸(面巾纸),卫生纸,湿巾纸,厨房用纸,
  16. ORB_SLAM2新增稠密建图代码笔记
  17. 在系统中集成淘宝扫码登录
  18. 计算机保研备战,【计算机系】“研途有你 更为明朗”计算机系2017级考研/保研交流会...
  19. 求业之精,别无他法(曾国藩)
  20. BypassUAC方式总结

热门文章

  1. ajax渲染数据到页面_爬虫进阶丨Ajax爬取案例实战
  2. python源码学习_【Python学习】Python源码阅读(一)
  3. Kali Linux打开多个终端窗口
  4. 卡内基梅隆大学的研究人员提出新的源定位算法: SilenceMap,寻找大脑的静默区域...
  5. 伍冬睿教授:脑机接口中迁移学习的完整流程
  6. eeglab中文教程系列(17)-DIPFIT对独立成分进行等价偶极子定位
  7. HTC打算一条道走到黑,开始资助「脑后插管操作」
  8. [UE4]网游中角色Pawn的移动位置同步以及RTS多角色同时移动的解决方案
  9. AI超清修复张国荣《热·情》演唱会,22年前哥哥面部和舞台极度还原,歌迷泪奔...
  10. Windows 11正式版将于10月5日推出,说好的支持安卓App没上车