Mysql运维之日志管理


本文摘自PHP中文网,作者齐天大圣,侵删。

一般成熟的软件,都会有自己的日志文件。通过这些日志来快速定位问题。在Mysql中,日志分为以下几类:

  • 慢查询日志,当sql的执行时间超过设定值时,便会记录

  • 错误日志,mysql启动、停止或运行时发生错误时,会记录到错误日志里

  • 二进制日志,该日志记录那些改变数据库数据时的sql语句,通过他,我们可以来恢复Mysql数据

  • 查询日志,当开启时,会记录查询SQL。

今天我们来讲讲慢查询、错误日志以及查询日志,二进制日志文件,将放以后用新的一篇文章来详细讲解。

错误日志

错误日志写记录Mysql启动、停止时出现的问题,另外也记录Mysql在运行中发生的重大问题。可以使用show variables like 'log_err%';查看错误日志文件的位置。

1

2

3

4

5

6

7

8

mysql> show variables like 'log_err%';

+---------------------+-------------------------------+

| Variable_name       | Value                         |

+---------------------+-------------------------------+

| log_error           | ./iZbp171edtq2kx5iy0xufeZ.err |

| log_error_verbosity | 3                             |

+---------------------+-------------------------------+

2 rows in set (0.01 sec)

错误日志,默认使用主机名作为文件名,以err作为后缀名,存放在mysql目录下的/var目录中。如果我们想修改的话,可以修改配置文件log_error项。可以使用相对路径或绝对路径,使用相对路径的话只会修改错误日志文件名,而使用绝对路径则可以修改错误日志存放的位置。

错误日志的查看也非常简单,直接使用cat或vim来查看即可。

通用查询日志

通用查询日志会记录用户所有的操作,所以一般占用空间较大,日常运维中一般都不会开启,并且默认情况也是关闭该日志的。如想开启的话,则可以在配置文件中加入log选项。

慢查询日志

慢查询是一个非常好的排查SQL问题工具,很多情况下,都是我们的sql导致系统运行不畅。笔者以前犯过这个错误,使用的一条非常复杂的查询语句,系统刚上不旧就502了。前段时间,发现公司的老项目也是出现了相应的问题,该项目使用的dedecms,当数据量达到一定程度,就会出现大量的慢查询,然后整个系统的cpu就跑满了。所以,我们要经常查看慢查询日志,找过sql的问题所在。

慢查询配置项

  • slow-query-log={0|off|1|on} 是否开启慢查询日志功能

  • slow-query-time=10 设定的阀值,单位为秒,支持浮点数。当sql的执行时间超过该值,就会记录在慢查询日志中。如果设置为0,则会记录所有查询

  • slow_query_log_file=/mydata/data/hostname-slow.log 慢查询日志存放的位置及文件名

  • log_queries_not_using_indexes=OFF 该项表示没有使用索引的查询也会记录到慢查询日志中去。

案例

现在,我将自己的mysql的慢查询日志打开,并且将时间设置为0,记录所有的SQL。然后来带大伙看看慢查询日志是怎样的。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Tcp port: 3306  Unix socket: /tmp/mysql.sock

Time                 Id Command    Argument

# Time: 2020-05-31T12:00:01.895700Z

# User@Host: blog[blog] @ localhost []  Id:     3

# Query_time: 0.000170  Lock_time: 0.000000 Rows_sent: 0  Rows_examined: 0

use blog;

SET timestamp=1590926401;

SET NAMES utf8mb4;

# Time: 2020-05-31T12:00:01.902684Z

# User@Host: blog[blog] @ localhost []  Id:     3

# Query_time: 0.006914  Lock_time: 0.006529 Rows_sent: 0  Rows_examined: 120

SET timestamp=1590926401;

SELECT * FROM knowledge

            WHERE is_delete=0 AND star < 5 AND show_time <= 1590854400   ORDER BY  show_time ASC

            LIMIT 1;

我们主要看Query_time行

  • Query_time:查询时间

  • Lock_time:锁表时间

  • Rows_sent:获取的数据行

  • Rows_examined:扫描的数据行

以上就是Mysql运维之日志管理的详细内容,更多文章请关注木庄网络博客

相关阅读 >>

mysql数据表的基本操作之表结构操作,字段操作实例分析

如何修改mysql数据库表结构

mysql性能优化

linux操作系统操作mysql常用命令小结

分布式事务的图文详解

mysql面试的知识总结(附示例)

mysql如何添加多行数据?

如何修改mysql的安装路径

linux环境下安装mysql5.7.36数据库教程

mysql存储引擎:myisam和innodb的区别

更多相关阅读请进入《mysql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...