mysql 故障排除与优化

news2024/10/7 10:20:13

目录

一    mysql 逻辑架构图

二      msql单实例常见故障

1,  故障一

2,  故障二

 3,  故障三

4,  故障四

5,  故障五

6,  故障六

 7,  故障七

 8,  故障八

三     mysql 主从环境常见故障

 1,  故障一

 2,  故障二

 3,  故障三

四    mysq 常见优化

1,硬件优化

2,mysql 配置文件优化

3,sql 优化

4,mysql 架构优化

五     mysql 数据库性能优化相关命令

1,查看每个客户端IP过来的连接消耗了多少资源

 2,查看某个数据文件上发生了多少IO请求。 

3, 查看每个用户消耗了多少资源

4,查看总共分配了多少内存

5, 数据库连接来自哪里,以及这些连接对数据库的请求情况是怎样的?

6,查看当前正在执行的SQL和执行show full processlist的效果相当

7,数据库中哪些SQL被频繁执行? 执行下面命令查询TOP10 SQL。

8,哪个文件产生了最多的IO,读多,还是写的多?

9,哪个表上的IO请求最多?

10 ,哪个表被访问的最多?

11, 哪些SQL执行了全表扫描,如果没有使用索引,则考虑为大型表添加索引

12, 列出所有做过排序的规范化语句

13,哪些SQL语句使用了临时表,又有哪些用到了磁盘临时表

14, 列出所有使用临时表的语句——访问最高的磁盘临时表,然后访问内存临时表

15, 哪个表占用了最多的buffer pool?

16,每个库(database)占用多少buffer pool?

六     总结


一    mysql 逻辑架构图

客户端和连接服务

核心服务功能

存储引擎层

数据存储层

二      msql单实例常见故障

1,  故障一

故障现象

问题分析

数据库未启动或者数据库端口被防火墙拦截

解决方法

启动数据库或者防火墙开放数据库监听端口

 

2,  故障二

故障现象

问题分析

密码不正确或者没有权限访问

解决方法

修改my.cnf主配置文件,在[mysqld]下添加skip-grant-tables(类似linux的单用户模式,改完密码记得把这个再注释掉)

update更新user表authentication string字段

重新授权

 3,  故障三

故障现象

在使用远程连接数据库时偶尔会发生远程连接数据库很慢的问题

问题分析

DNS解析慢、客户端连接过多

解决方法

修改my.cnf主配置文件(增加skip-name-resolve参数)

数据库授权禁止使用主机名

 

4,  故障四

故障现象

问题分析

服务器非正常关机,数据库所在空间已满,或一些其它未知的原因,对数据库表造成了损坏

因拷贝数据库导致文件的属组发生变化

解决方法

修复数据表(myisamchk、phpMyAdmin)  不一定能成功

修改文件的属组      注意! 拷贝数据时 保留原数据的属主数组

 

5,  故障五

故障现象

问题分析

超出最大连接错误数量限制

解决方法

清除缓存(flush-hosts关键字)

修改mysql配置文件(maxconnecterrors=1000)

 

6,  故障六

故障现象

问题分析

连接数超出MySQL的最大连接限制

解决方法

修改MySQL配置文件(maxconnections=10000)

临时修改参数

 7,  故障七

故障现象

问题分析

MySQL的配置文件/etc/my.cnf权限问题

解决方法

 8,  故障八

故障现象

问题分析

innodb数据文件损坏

解决方法

修改my.cnf配置文件(innodb_force_recovery=4)

启动数据库后备份数据文件

利用备份文件恢复数据

三     mysql 主从环境常见故障

 1,  故障一

故障现象

从库的Slave_l0_Running为NO

问题分析

主库和从库的server-id值一样

解决方法

修改从库的server-id的值,修改为和主库不一样

重新启动数据库并再次同步

 2,  故障二

故障现象

从库的Slave l0 Running为NO

问题分析

主键冲突或者主库删除或更新数据,从库内找不到记录,数据被修改导致

解决方法

 3,  故障三

故障现象

问题分析

从库的中继日志relay-bin损坏

解决方法

手工修复,重新找到同步的binlog和pos点,然后重新同步即可

四    mysq 常见优化

1,硬件优化

CPU:推荐使用S.M.P.架构的多路对称CPU

内存:4GB以上的物理内存

磁盘:RAID-0+1磁盘阵列或固态硬盘

2,mysql 配置文件优化

调整配置项

3,sql 优化

尽量使用索引进行查询

优化分页

GROUP BY优化

4,mysql 架构优化

架构选择:主从、主主、一主多从、多主多从

五     mysql 数据库性能优化相关命令

1,查看每个客户端IP过来的连接消耗了多少资源

mysql> select * from sys.x$host_summary;

 2,查看某个数据文件上发生了多少IO请求。 

mysql> select * from sys.x$io_global_by_file_by_bytes;

 

3, 查看每个用户消耗了多少资源

mysql> select * from sys.x$user_summary;

 

4,查看总共分配了多少内存

mysql> select * from sys.x$memory_global_total;

5, 数据库连接来自哪里,以及这些连接对数据库的请求情况是怎样的?

查看当前连接情况。 

mysql> select host, current_connections, statements from sys.x$host_summary;

 

6,查看当前正在执行的SQL和执行show full processlist的效果相当

mysql> select conn_id, user, current_statement, last_statement from sys.x$session;

 

7,数据库中哪些SQL被频繁执行? 执行下面命令查询TOP10 SQL。

 mysql> select db,exec_count,query from sys.x$statement_analysis order by exec_count desc limit 10;

 

8,哪个文件产生了最多的IO,读多,还是写的多?

mysql> select * from sys.x$io_global_by_file_by_bytes limit 10;

 

9,哪个表上的IO请求最多?

mysql> select * from sys.x$io_global_by_file_by_bytes where file like "%ibd" order by total desc limit 10;

 您在尝试使用MySQL查询语句从sys.x$io_global_by_file_by_bytes系统视图中选择数据时遇到问题。该视图提供了关于文件级别的I/O操作统计信息,按照您的查询,您希望获取文件名中包含“ibd”(InnoDB表空间文件扩展名)的记录,并按total字段降序排列,最后显示前10条结果。

10 ,哪个表被访问的最多?

先访问statement_analysis,根据热门SQL排序找到相应的数据表。 

哪些语句延迟比较严重? 

查看statement_analysis中avg_latency的最高的SQL。 

mysql> select * from sys.x$statement_analysis order by avg_latency desc limit 10;

11, 哪些SQL执行了全表扫描,如果没有使用索引,则考虑为大型表添加索引

mysql> select * from sys.x$statements_with_full_table_scans;

12, 列出所有做过排序的规范化语句

mysql> select * from sys.x$statements_with_sorting

13,哪些SQL语句使用了临时表,又有哪些用到了磁盘临时表

查看statement_analysis中哪个SQL的tmp_tables 、tmp_disk_tables值大于0即可。 

mysql> select db, query, tmp_tables, tmp_disk_tables from sys.x$statement_analysis where tmp_tables>0 or tmp_disk_tables >0 order by (tmp_tables+tmp_disk_tables) desc limit 20;

14, 列出所有使用临时表的语句——访问最高的磁盘临时表,然后访问内存临时表

mysql>select * from sys.statements_with_temp_tables

15, 哪个表占用了最多的buffer pool?

mysql> select * from sys.x$innodb_buffer_stats_by_table order by allocated desc limit 10;

 

16,每个库(database)占用多少buffer pool?

mysql> select * from sys.x$innodb_buffer_stats_by_schema order by allocated desc limit 10;

六     总结

MySQL 常见的优化方法涵盖了许多方面,旨在提高查询性能、减少资源消耗和提升整体数据库系统的效率。以下是一些常见的MySQL优化策略:

  1. 选择合适的字段属性

    • 使用最适合数据特性和业务需求的数据类型,如使用INT而非VARCHAR存储整数。
    • 控制字段长度,如在不影响数据完整性的前提下,减小VARCHAR字段的最大长度。
    • 尽可能避免使用NULL,因为NULL值会增加存储开销且在查询时可能需要特殊处理。
  2. 创建和使用索引

    • 在频繁用于筛选、排序、关联的列上创建索引,尤其是主键和外键。
    • 选择合适的索引类型,如B-tree、Hash、全文索引等,依据查询模式和数据分布来决定。
    • 注意索引覆盖(covering index),即索引包含查询所需的所有列,以避免回表操作。
    • 定期分析和维护索引,删除冗余或很少使用的索引,监控并优化索引使用情况。
  3. 查询优化

    • 使用EXPLAIN分析查询计划,了解查询如何使用索引、进行全表扫描等情况,以便调整查询或索引设计。
    • 避免在WHERE子句中使用否定条件和复杂的表达式,这些可能妨碍索引的使用。
    • 减少IN子句中的值数量,大量值可能导致查询性能下降。
    • 明确指定SELECT语句中的字段名,避免使用SELECT *,特别是当表结构庞大时。
    • 当只需要单个结果时,使用LIMIT 1尽早终止查询。
    • 避免在未使用索引的列上进行排序,或者尽可能减少排序操作。
  4. 连接操作优化

    • 使用有效率的连接方式(如INNER JOIN、LEFT JOIN等),并确保关联字段上都有适当的索引。
    • 尽可能通过调整查询结构和添加适当索引来避免全表扫描和嵌套循环连接。
    • 在适当的情况下,使用JOIN替代子查询,因为JOIN通常能更有效地利用索引。
  5. 使用UNION替代临时表

    • 对于需要合并多个查询结果的情况,使用UNION而非手动创建临时表,以减少中间结果的存储和管理开销。
  6. 事务管理

    • 保持事务短小,避免长时间持有锁,减少死锁概率。
    • 合理设置事务隔离级别,平衡数据一致性与并发性能。
  7. 服务器参数调优

    • 根据服务器硬件、数据库负载和应用特点调整MySQL配置参数,如innodb_buffer_pool_sizequery_cache_sizemax_connections等。
    • 监控系统性能指标(如CPU、内存、磁盘I/O等),并据此调整参数。
  8. 数据分片与分区

    • 对于超大型表,考虑使用分表(水平拆分)或分区(垂直拆分)策略,分散数据和查询负载。
    • 选择合适的分片/分区键,确保数据分布均匀,查询能够高效路由。
  9. 缓存策略

    • 利用MySQL内置的查询缓存(如果适用),但需注意其在高并发场景下的局限性。
    • 对于读多写少的场景,考虑使用外部缓存系统(如Memcached、Redis)缓存热点数据。
  10. 定期维护与清理

    • 定期分析和优化表,如运行ANALYZE TABLEOPTIMIZE TABLE命令。
    • 清理不需要的数据,如归档旧数据、删除冗余记录,以减少数据规模和查询范围。

综上所述,MySQL优化是一个综合性的过程,涉及到数据库设计、查询编写、服务器配置、硬件资源等多个层面。实施优化时应结合实际业务场景,持续监控数据库性能,并根据性能分析结果进行有针对性的调整。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1560876.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

校园二手书交易|基于springboot的校园二手书交易设计与实现(附项目源码+论文)

基于springboot校园二手书交易平台的设计与实现 目录 基于springboot校园二手书交易平台的设计与实现 一、摘要 二、相关技术 java、tomcat、mysql、spring、sprigBoot、mybatis、query、vue 三、系统设计 3.1 整体功能设计图 3.2 功能具体细节设计 四、数据库设计 五…

砍树c++

题目&#xff1a; 代码&#xff1a; #include<bits/stdc.h> using namespace std; long long n,m,a[100000005]; bool jltm(int x){long long sum0;for(int i1;i<n;i){if(a[i]>x) sumsuma[i]-x;}//计算此时锯片高度砍掉的木材if(sum>m) return 1;else return 0…

城市排涝与海绵城市教程

原文链接&#xff1a;城市排涝与海绵城市教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247599633&idx3&snbfe71e1b4f918864fdfe8e33db8a104b&chksmfa8207f6cdf58ee03dea20cc64bb106aadd729fcbf0a1ce3f920d3e767f78e53fa6a094d8d2a&token21066…

Linux_应用篇(02) 文件 I/O 基础

本章给大家介绍 Linux 应用编程中最基础的知识&#xff0c;即文件 I/O&#xff08;Input、 Outout&#xff09; &#xff0c; 文件 I/O 指的是对文件的输入/输出操作&#xff0c;说白了就是对文件的读写操作&#xff1b; Linux 下一切皆文件&#xff0c;文件作为 Linux 系统设计…

微信小程序wx.navigateTo无法跳转到Component组件问题解决。(共享元素动画必备)

关于Component构造器官方是有文档说明的&#xff0c;然后官方文档内部也给出了组件是可以通过像pages一样跳转的。但是官方文档缺少了必要的说明&#xff0c;会引起wx.navigateTo无法跳转到组件问题&#xff01; 以下是官方文档截图&#xff1a; 解决方式&#xff1a; 组件创建…

IP归属地在互联网行业中的应用

摘要&#xff1a;IP&#xff08;Internet Protocol&#xff09;地址归属地是指互联网上某个IP地址所对应的地理位置信息。在互联网行业中&#xff0c;IP归属地具有重要的应用价值&#xff0c;包括网络安全、广告定向、用户定位等方面。IP数据云将探讨IP归属地在互联网行业中的应…

解锁流量密码:自养号测评助亚马逊、shein店铺销量飙升

流量是影响一款产品销售的重要因素&#xff0c;当一款产品的流量增多&#xff0c;那么其销量也会随之增加&#xff0c;相反的&#xff0c;流量减少&#xff0c;那么销量也会随之降低。那卖家们又该如何提高店铺流量呢&#xff1f;下面我们就来分享一些提高店铺流量的方法。 无…

入门stm32单片机,0基础是怎么做到的

大家好&#xff0c;今天给大家介绍8步就能系统入门stm32单片机&#xff0c;文章末尾附有分享大家一个资料包&#xff0c;差不多150多G。里面学习内容、面经、项目都比较新也比较全&#xff01;可进群免费领取。 对于没有基础的大学生来说&#xff0c;想要系统入门STM32单片机&a…

校园招聘管理系统(源码+文档)

校园招聘管理系统&#xff08;小程序、ios、安卓都可部署&#xff09; 文件包含内容程序简要说明含有功能项目截图客户端热门岗位校园招聘首页个人简历添加个人简历我的界面注册界面查看个人简历界面个人资料界面登录界面消息界面退出登录 管理端登录界面![请添加图片描述](htt…

GLTFExporter是一个用于将3D场景导出为glTF格式的JavaScript库。

demo案例 GLTFExporter是一个用于将3D场景导出为glTF格式的JavaScript库。下面我将逐个讲解其入参、出参、属性、方法以及API使用方式。 入参&#xff08;Input Parameters&#xff09;: GLTFExporter的主要入参是要导出的场景对象和一些导出选项。具体来说&#xff1a; s…

JRT业务开发起步

这是一段充满挑战与奋斗的旅程&#xff0c;自第一行Java代码的写下起&#xff0c;便历经重重险阻。从细微的代码行&#xff0c;逐步汇聚成实用的工具类方法&#xff1b;从工具类方法的积累&#xff0c;逐渐构建起功能强大的工具包&#xff1b;再从工具包的整合&#xff0c;最终…

python Cyber_record 包 一些命令

python Cyber_record 包 1. 查看record文件的统计信息 cyber_record info -f 20231101211111.record.00005 c record_file: 20231101211111.record.00005 version: 1.0 begin_time: 2023-11-01 21:13:48.099650 end_time: 2023-11-01 21:14:19.267622 duration: 3…

jenkins手把手教你从入门到放弃01-jenkins简介(详解)

一、简介 jenkins是一个可扩展的持续集成引擎。持续集成&#xff0c;也就是通常所说的CI&#xff08;Continues Integration&#xff09;&#xff0c;可以说是现代软件技术开发的基础。持续集成是一种软件开发实践&#xff0c; 即团队开发成员经常集成他们的工作&#xff0c;通…

STM32L4R9 的 QuadSPI Flash 通讯速率不理想

1. 引言 客户反应 STM32L4R9 同 QSPI Flash 通讯&#xff0c;测出来的读取速率为 10MB/s&#xff0c; 和理论值相差较大。 2. 问题分析 按照客户的时钟配置和 STM32L4R9 的数据手册中的数据&#xff0c;OSPI 读数速率为 10MB/s 肯定存在问题。同时我们也可以在 AN4760 应用手…

SharedPreferences.Editor 中 apply 与 commit 方法的区别

在 Android 开发中&#xff0c;SharedPreferences 是我们用来存储简单键值对数据的工具。这就像是在口袋里带着一个小笔记本&#xff0c;随时记录下要点或标记。但当涉及到保存这些笔记时&#xff0c;你有两个选择&#xff1a;apply 或 commit。它们乍看之下似乎可以互换使用&a…

【SqlServer】Alwayson收缩日志

Alwayson收缩日志 压缩失败直接压缩压缩失败 直接压缩 加入高可用组之后,不能设置成简单模式。 USE [databasename] CHECKPOINT DECLARE @bakfile nvarchar(100) SET @bakfile=D:\data

DHCP服务搭建

DHCP搭建 一、DHCP简介 1、概念 DHCP&#xff08;Dynamic Host Configuration Protocol&#xff0c;动态主机配置协议&#xff09;是一种网络协议&#xff0c;用于自动分配IP地址和其他网络配置信息给网络上的设备。通过DHCP&#xff0c;计算机或其他设备可以自动获取IP地址、…

Android算法部署项目 | 在Android平台基于NCNN部署YOLOv5目标检测算法

项目应用场景 面向 Android 安卓平台使用 NCNN 部署 YOLOv5 目标检测算法&#xff0c;使用 Android Studio 进行开发&#xff0c;项目具有 App UI 界面。 项目效果&#xff1a; 项目细节 > 具体参见项目 README.md (1) 安装编译 NCNN&#xff0c;或者直接去 Releases Tenc…

深入理解鸿蒙生命周期:从应用到组件

在开发鸿蒙&#xff08;HarmonyOS&#xff09;应用时&#xff0c;理解生命周期的概念至关重要。生命周期不仅关乎应用的性能优化&#xff0c;还涉及到资源管理和用户体验等多个方面。本文将详细解析鸿蒙操作系统中应用、页面和组件的生命周期&#xff0c;帮助开发者更好地掌握这…

HC-SR04使用指南(STM32)

基于STM32和HC-SR04模块实现超声波测距功能 本文用的单片机是STM32F103C8T6&#xff0c;超声波测距模块是HC-SR04&#xff0c;显示距离是通过上位机显示。 HC-SR04硬件概述 HC-SR04超声波距离传感器的核心是两个超声波传感器。一个用作发射器&#xff0c;将电信号转换为40 K…