当前位置: 首页 > news >正文

MySQL故障排查域生产环境优化

目录

一,案例实施

1,MySQL单实例故障排查

(1)故障现象1

(2)故障2

(3)故障3

二,MySQL优化

1,硬件方面

(1)关于CPU

(2)关于内存

(3)关于磁盘

2,MySQL配置文件

(1)核心性能优化项

(2)查询优化项

(3)日志与监控

(4)InnoDB高级优化

(5)示例配置片段(my.cnf)

3,sql方面

(1)创建测试表并插入数据

(2)使用EXPLAIN进行SQL优化步骤及实验验证

(3)添加索引

(4)优化后查询及EXPLAIN分析


一,案例实施

1,MySQL单实例故障排查

(1)故障现象1

问题分析:以上这种情况一般都是数据库未启动、mysql配置文件未指定socket文件或者数据库端口被防火墙拦截导致。
解决方法:启动数据库或者防火墙开放数据库监听端口。

(2)故障2

问题分析:密码不正确或者没有权限访问。
解决方法:修改 my.cnf 主配置文件,在[mysqld]下添加 skip-grant-tables=on,重启数据库。最后修改密码命令如下。

忘记密码时(18.0版)实例

先进入/etc/my.cnf配置文件中添加

(跳过密码认证,直接登录MySQL)

登录MySQL后写入以下内容,重新更改密码

更改密码成功

(3)故障3

清除缓存

二,MySQL优化

1,硬件方面

说到服务器硬件,最主要的无非CPU、内存、磁盘三大关键因素

(1)关于CPU

CPU对于MySQL应用,推荐使用S.M.P.架构的多路对称CPU。例如:可以使用两颗IntelXeon3.6GHz的CPU。现在比较推荐用4U的服务器来专门做数据库服务器,不仅仅是针对于MySQL。

(2)关于内存

物理内存对于一台使用MySQL的DatabaseServer来说,服务器内存建议不要小于2GB,推荐使用4GB以上的物理内存。不过内存对于现在的服务器而言可以说是一个可以忽略的问题,工作中遇到了高端服务器基本上内存都超过了32G。

(3)关于磁盘

磁盘寻道能力(磁盘I/0)。以目前市场上普遍高转速SAS硬盘(15000转/秒)为例,这种硬盘理论上每秒寻道15000次,这是物理特性决定的,没有办法改变。 MySQL每秒钟都在进行大量、复杂的查询操作,对磁盘的读写量可想而知。所以通常认为磁盘I/0是制约 MySQL性能的最大因素之一,通常是使用RAID-0+1 磁盘阵列,注意不要尝试使用RAID-5,MYSQL在RAID-5 磁盘阵列上的效率并不高。如果不考虑硬件的投入成本,也可以考虑固态(SSD)硬盘专门作为数据库服务器使用。数据库的读写性能肯定会提高很多。

2,MySQL配置文件

(1)核心性能优化项

参数作用建议配置注意事项
innodb_log_buffer_sizeInnoDB 日志缓冲区大小,用于缓存事务日志,减少磁盘 I/O 操作一般设置为 16M - 64M ,如 32M过小可能导致频繁的日志写入磁盘操作,影响性能;过大则浪费内存
query_cache_size查询缓存大小,缓存查询结果,相同查询可直接从缓存获取结果根据系统情况,可尝试设置为几百兆,如 256M,但在高并发写场景下可能效果不佳MySQL 8.0 已弃用该功能;在写操作频繁时,维护查询缓存开销大,可能降低性能
sort_buffer_size每个线程用于排序操作的缓冲区大小一般设置为 256K - 2M ,如 1M设置过大会浪费内存,尤其在高并发场景下;设置过小可能导致排序操作性能低下,出现临时文件排序
read_buffer_size顺序读取数据时的缓冲区大小通常设置为 64K - 1M ,如 256K可根据顺序读取数据量和频率调整,不合理设置会影响顺序读性能
join_buffer_size用于连接操作(JOIN)的缓冲区大小对于简单连接,可设置为 256K - 1M;复杂连接可适当增大,如 2M - 4M设置不当会影响连接查询性能,且高并发时过大设置会占用过多内存

(2)查询优化项

参数作用建议配置
query_cache_type查询缓存类型(MySQL8.0已移除,旧版本慎用)0FF(默认,高并发下建议关闭).
sort_buffer_size排序操作缓冲区大小。2M~8M,过大浪费内存(如4M)。
join_buffer_sizeJOIN 操作缓冲区大小。4M~16M,仅对无索引JOIN有效(如 8M)。
read_buffer_size顺序读缓冲区大小。2M~8M(如4M)。
read_rnd_buffer_ size随机读缓冲区大小。4M~16M(如8M)

(3)日志与监控

参数作用建议配置
slow_query_log启用慢查询日志,记录执行时间长的SQL.ON
long query_ time定义慢查询值1~2(根据业务容忍度调整)。
(秒)。

log_error
 
错误日志路径,用指于故障排查。指定路径
(如/var/log/mysql/error.log)。
binlog_format二进制日志格式(主从复制依赖)。ROW(推荐,数据一致性高)。
expire logs_days自动清理旧的二进制日志天数。7~14(根据备份策略调整)。

(4)InnoDB高级优化

参数作用建议配置
innodb _io_capacityInnoDB 后台任务的能力I/0 (如刷新脏页)。SSD 建议 2000~4000,HDD 建议:200~400。
innodb_flush_ method控制数据文件与日志文件的刷新方式。,0_DIRECT(默认,避免双缓冲)。
innodb _hread_ concurrencyInnoDB并发线程数限制。0(默认,自适应),高并发场景可设为 CPU 核数*2。
innodb_autoinc_ lock_mode自增锁模式,影响插
入性能。
2(连续模式,高并发插入推
荐)。

(5)示例配置片段(my.cnf)

物理资源32核CPU、64G内存、500GSSD

等等

3,sql方面

SQL优化是确保数据库高效运行的关键,其核心在于通过减少资源消耗(如CPU、内存、磁盘I/0)来提升查询响应速度,避免慢查询导致用户体验下降或系统崩溃。未优化的SQL可能引发全表扫描、冗余计算或锁竞争,尤其在数据量大或高并发场景下,会导致服务器负载飙升、响应延迟,甚至影响业务连续性(如交易超时)。通过索引调优、查询改写、执行计划分析等手段,可显著降低数据库压力,支撑业务规模扩展,同时控制硬件成本与运维复杂度。

(1)创建测试表并插入数据

添加十万条测试数据

(2)使用EXPLAIN进行SQL优化步骤及实验验证

EXPLAIN是MySQL中用于分析SQL执行计划的工具,通过模拟查询执行过程输出关键信息(如访问类型type、使用索引 key、预估扫描行数rows、额外操作Extra 等),帮助开发者识别全表扫描、索引失效等性能瓶颈,从而指导优化方向(如添加索引、改写查询或调整表结构),是提升数据库效率不可或缺的诊断手段。

EXPLAIN 用于显示MySQL如何执行一条SQL语句,关键字段如下:

字段说明优化关注点
id查询序列号,相同id为同一执行层,不同id按序执行询)(如子查复杂查询的嵌套层级。
select_type查询类型(SIMPLE、PRIMARY、SUBQUERY、DERIVED等)。识别子查询或临时表操作,
table访问的表名或别名。确认查询涉及的表
type访问类型,性能从优到劣system>const>eq ref>ref
range >index>ALL.
避免ALL(全表扫描),优先优化为ref或range。
possible_ keys可能使用的索引。
rows实际使用的索引。预估扫描的行数。确认是否命中最佳索引。行数越少,查询效率越高
Extra附加信息(如Using whereUsingUsingindex文件排序)。temporary等)。发现潜在性能问题(如临时

(3)添加索引

(4)优化后查询及EXPLAIN分析

http://www.xdnf.cn/news/538669.html

相关文章:

  • IIR 巴特沃斯II型滤波器设计与实现
  • React Contxt详解
  • 孤立森林和随机森林主要区别
  • Java实现:如何在文件夹中查找重复文件
  • 如何从容应对面试?
  • vi实时查看日志
  • UA 编译和建模入门教程(zhanzhi学习笔记)
  • 基于大模型的脑出血全流程预测系统技术方案大纲
  • 物联网安全技术的最新进展与挑战
  • 深入理解pip:Python包管理的核心工具与实战指南
  • (1-5)Java 常用工具类、包装类、StringStringBuilderString
  • 计算机存储与数据单位的核心定义及换算逻辑
  • 学习黑客 PowerShell 详解
  • 相机Camera日志分析之十五:高通相机Camx 基于预览1帧的ConfigureStreams Usecase完整过程日志分析详解
  • 辅助驾驶平权与出海,Mobileye的双重助力
  • Cursor 模型深度分析:区别、优缺点及适用场景
  • IOS 创建多环境Target,配置多环境
  • GK的作用是什么?
  • C语言指针深入详解(三):数组名理解、指针访问数组、一维数组传参的本质、冒泡排序、二级指针、指针数组、指针数组模拟二维数组
  • opencascade如何保存选中的面到本地
  • 使用MCP驱动IDA pro分析样本
  • DV SSL证书管理主要有哪些功能?
  • C语言—字符函数和字符串函数
  • 如何实现从网页一键启动你的 Electron 桌面应用(zxjapp://)
  • pcie phy电气层(PCS)详解gen1、2 (rx)
  • 北斗卫星通讯终端的技术原理是什么
  • 2025-05-19 学习记录--Python-简易用户登录系统 + 计算天数
  • RAG策略
  • 第二章、IMU(Inertial Measurement Unit 惯性测量单元)
  • 包装可靠性测试【二】