千家信息网

Mysql的主要几种日志及慢查询方法

发表于:2024-09-24 作者:千家信息网编辑
千家信息网最后更新 2024年09月24日,本文主要给大家简单讲讲Mysql的主要几种日志及慢查询方法,相关专业术语大家可以上网查查或者找一些相关书籍补充一下,这里就不涉猎了,我们就直奔主题吧,希望Mysql的主要几种日志及慢查询方法这篇文章可
千家信息网最后更新 2024年09月24日Mysql的主要几种日志及慢查询方法

本文主要给大家简单讲讲Mysql的主要几种日志及慢查询方法,相关专业术语大家可以上网查查或者找一些相关书籍补充一下,这里就不涉猎了,我们就直奔主题吧,希望Mysql的主要几种日志及慢查询方法这篇文章可以给大家带来一些实际帮助。

mysql日志主要有以下几种:

l 错误日志:log_error

l 通用查询日志:general_log

l 二进制日志:binlog

l 慢速查询日志:log_slow_queries

l 中继日志:relay_log

l 事务日志:innodb_log

由于版本的不同,以下的目录文件目录也有所不同。

1、错误日志


【Windows下】 修改主配置文件my.ini

[mysqld]

Error-bin[=dir\[filename]]

//dir:指定错误日志的存储路径;filename:指定错误文件的文件名

删除错误日志:

Mysqladmin -u root -p flush-logs;

【Linux下】

修改主配置文件my.cnf

[mysqld]

log-error=mysql_error.log(绝对路径或若直接文件名则会存储到数据目录下)

log_warnings={on|off|2}:将不将警告信息记录日志

log_warnings表示警告信息是否记录在错误日志中,1和0也就是on和off表示记录和不记录,2则表示失败拒绝的连接信息。

在mysql云服务器上查看错误日志的配置:

mysql> show global variables like '%log%';

2、通用查询日志(非常重要!!!)


mysql所有查询语句都会被记录。

默认关闭此项记录,一般作调试用,平时开启会记录大量数据占用磁盘空间。

存储位置:文件,表(table,mysql.general_log)

默认存储在数据目录下。

Linux环境下,修改主配置文件my.cnf。

[mysqld]

general_log={on|off}

general_log_file=mysql_general.log (绝对路径或若直接文件名则会存储到数据目录下)

log_output={file|table|file,table|none}:日志输出类型

在不重启MYSQL服务的情况下,操作通用查询日志:

mysql> set global general_log=on; //开启

mysql> set global general_log=off; //关闭

mysql> mysqladmin -u root -p flush-logs //删除日志(先删除旧的,再创建一个新的)

3、二进制日志(非常重要!!!)

1》用于记录引起数据改变或存在引起数据改变的潜在可能性的语句(statement)或改变后的结果(row),也可能是二者混合。

2》包含了所有更新了的数据或者已经潜在更新了数据的所有语句,记录了数据的更改以及数据更改的事件events和位置position。

3》主要目的是在恢复时能够最大可能地恢复数据库,默认开启的。

4》Linux环境下,修改主配置文件my.cnf。

log_bin=/path/to/bin_log_file:

这是个只读变量,表明存放日志的目录位置,不能在此处写on或off,若不指定路径会存储在数据目录下。

max_binlog_size=1073741824:

设置单个二进制文件的最大尺寸,以字节为单位,超过此值大小就会自动滚动。

sync_binlog={1|0|N}:

表示每几次事务提交后是否立即将内存中的二进制日志同步到内存(binlog_cache)中。

1表示立即提交;0则不提交;N可为任意值,表示每N次;值不同对应的性能也不同,0和1的性能差别可高达5倍之多。写入磁盘的操作是使用fdatasync()函数。

binlog_format={statement|row|mixed}:

binlog日志存放的格式

expire_logs_days=N:

二进制日志的有效天数

5》可以用mysqlbinlog命令查看二进制日志文件。

mysqlbinlog:

yyyy-mm-dd hh:mm:ss

--start-datetime=

--stop-datetime=

-j, --start-position=#

--stop-position=#

--user, --host, --password

8》在mysql中查看二进制

查看二进制日志文件列表:

mysql> show master|binary logs;

查看当前正在使用的二进制日志文件:

mysql> show master status;

查看二进制日志文件中的事件:

mysql> show binlog events [in 'log_name'] [from pos] [limit [offset,] row_count]

查看二进制日志的参数配置

MariaDB [(none)]> show global variables where variable_name like '%log_bin%' or variable_name like '%binlog%';

9》清除二进制日志

清除所有日志(不存在主从复制关系)

mysql> reset master;

清除指定日志之前的所有日志

mysql> purge master logs to '日志';

清除某一时间点前的所有日志

mysql> purge master logs before '年-月-日 时:分:秒';

清除 n 天前的所有日志

mysql> purge master logs before current_date - interval 10 day;

由于二进制日志的重要性,请仅在确定不再需要将要被删除的二进制文件,

或者在已经对二进制日志文件进行归档备份,

或者已经进行数据库备份的情况下,才进行删除操作,且不要使用 rm 命令删除。

10》暂停二进制日志

Set SQL_LOG_BIN=0; //暂停二进制日志

Set SQL_LOG_BIN=1; //启动二进制日志

4、慢速查询日志(非常重要!!!)


记录所有执行时间超过long_query_time秒的sql语句,可用于找到执行时间长的查询,以用于优化。

默认未开启,开启优先级比查询日志高,默认是超过10秒的才会被记录。

存储位置:文件,表(table,mysql.slog_log)

Linux环境下,修改主配置文件/etc/my.cnf,在[mysqld]下添加"long_query_time"和"log-slow-queries=文件路径名",重启mysqld服务。

log_slow_queries={on|off}:是否开启慢查询日志(5.5以前)

slow_query_log={on|off}:是否开启慢查询日志(和上面没有区别,5.6以后)

slow_query_log_file=xxxx-slom.log:慢查询日志存放位置,默认为"主机名-slow.log"。相对路径的话,默认为数据目录下。

log_output={file|table|file,table|none}:表示存放日志的方式

log_query_time=N :表示多长时间的查询被认为慢查询,默认为10秒。

mysql自带了对慢查询日志的统计分析工具:mysqldumpslow

操作慢查询日志:

mysql> set global slow_query_log=on; //开启慢查询日志

mysql> set global slow_query_log=off; //关闭慢查询日志

删除慢查询日志:直接删除慢查询日志文件,通过mysqladmin -u root -p flush-logs重新生成一个新的慢查询日志。

Mysql的主要几种日志及慢查询方法就先给大家讲到这里,对于其它相关问题大家想要了解的可以持续关注我们的行业资讯。我们的板块内容每天都会捕捉一些行业新闻及专业知识分享给大家的。

0