MySQL数据库故障排查案例分析

本文介绍了MySQL数据库无法启动时的故障排查方法,包括清空错误日志、检查权限并重新启动。此外,文章详细讲解了慢查询日志的配置、分析和处理,以及如何使用工具如mysqlsla进行优化。还探讨了二进制日志的配置、作用、刷新条件和删除方法,以及记录二进制日志的三种模式。为企业数据库管理提供了实用指南。
摘要由CSDN通过智能技术生成

新手安装数据库时,遇到数据库无法启动时的排查方法具体如下。
1)先清空错误日志文件,然后重新启动MySQL服务,再查看日志文件报什么错误,并根据错误日志进行处理。
2)如果无法解决,则删除数据文件,重新初始化数据库。
假设在排查故障时,得到的错误日志提示为:
180321 17:36:26 InnoDB: Completed initialization of buffer pool
180321 17:36:26 InnoDB: Operating system error number 13 in a file operation.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
InnoDB: File name ./ibdata1
根据提示可知,该错误是权限问题导致的问题,可对数据目录递归执行权限,然后再重启数据库。命令如下:
[root@songls data]# chown -R mysql:mysql /data/mysql/error
(2)慢查询日志
1.慢查询日志介绍
简单地理解,慢查询日志(slow query log)就是记录执行时间超出指定值(long_query_time)或其他指定条件(例如,没有使用到索引,结果集大于1000行)的SQL语句。
2.慢查询日志相关参数说明
慢查询的参数,对于数据库SQL的优化非常重要,是SQL优化的前提,因此,这里以表的形式进行说明,具体见表

3.慢查询日志重要参数配置
企业中常见的配置慢查询的参数为:
slow-query-log = ON #<==慢查询开启开关
long_query_time = 2 #<==记录大于2秒的SQL语句。
log_queries_not_using_indexes #<==没有使用到索引的SQL语句。
slow-query-log-file = /data/mysql/slow/slow.log #<==记录SQL语句的文件。
min_examined_row_limit = 800 #<==记录结果集大于800行的SQL语句。
可将上述参数配置到my.cnf里,配置完毕重启MySQL服务,并进行检查:
mysql> show variables like ‘slow_query%’;
±--------------------±----------------------------+
| Variable_name | Value |
±--------------------±----------------------------+
| slow_query_log | ON | #<==开关已打开。
| slow_query_log_file | /data/mysql/slow.log | #<==文件路径已生效。
±--------------------±----------------------------+
2 rows in set (0.00 sec)
mysql> show variables like ‘%long_query%’;
±----------------±---------+
| Variable_name | Value |
±----------------±---------+
| long_query_time | 2.000000 | #<==记录大于2秒的查询已生效。
±----------------±---------+
1 row in set (0.01 sec)
mysql> show variables like ‘%log_queries_not%’;
±------------------------------±------+
| Variable_name | Value |
±------------------------------±------+
| log_queries_not_using_indexes | ON | #<==记录没有使用索引的查询已生效。
±------------------------------±------+
1 row in set (0.00 sec)

mysql> show variables like ‘%min_examined_row_limit%’;
±-----------------------±------+
| Variable_name | Value |
±-----------------------±------+
| min_examined_row_limit | 800 | #<==记录查询结果集大于800行的SQL已生效。
±-----------------------±------+
1 row in set (0.00 sec)
到此,就已经设定好记录慢查询SQL语句的条件了,那么,对于每天所产生的

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值