建设银行网站注册不了,长丰网站建设,吉林省建设厅网站杨学武,15年做哪些网站能致富本篇主要介绍MySQL日志的相关内容。
目录
一、日志简介
常用日志
一般查询日志和慢查询日志的输出形式 日志表
二、一般查询日志
三、慢查询日志
四、错误日志 一、日志简介
常用日志
在MySQL中常用的日志主要有如下几种#xff1a; 这些日志通常情况下都是关闭的 这些日志通常情况下都是关闭的需要我们通过对应的选项来打开。但也有意外在windows中错误日志是默认开启的而在Linux中则默认开启了二进制日志和错误日志。这些日志一旦开启会默认将记录日志信息的文件保存到MySQL的数据目录data中。 一般查询日志和慢查询日志的输出形式
在MySQL中我们可以通过设置--log-output这个选项来控制一般查询日志和慢查询日志的输出形式式这个选项一共有三个value值具体如下
TABLE:将日志信息输出到对应的日志表中FILE将日志信息输出到日志文件中NONE:不输出日志信息
如果没有设置value值默认为FILE如果指定了多个value值则这多个value值都生效也就是说可以既输出到表又可以输出到文件需要注意的是NONE的优先级最高这也就意味着只要包含NONE其它的value值都失效。 日志表
前面我们提到了日志表那么什么是日志表呢日志表就是根据日志信息生成的表其字段对应着日志信息中的各部分内容新增一条日志就是往日志表中插入一行数据我们可以通过日志表来查询所需要的日志信息。
通过下面的SQL语句我们能够查看日志表的建表信息 show create table 日志表名称 下面我们尝试查询一下一般查询日志的日志表的建表信息表名为general.log) 表中字段的具体含义将在后文介绍。
使用日志表主要有以下两点好处
可以通过SQL查询日志信息有利于我们过滤日志内容快速找到我们想要的日志信息客户端能够以表查询的方式来获取日志信息不在需要登录服务器主机访问文件系统
接下来我们详细介绍一下部分日志。
二、一般查询日志
一般查询日志主要用来记录客户端建立连接和断开连接的相关信息以及服务端从服务端接收的每一个SQL语句因此如果开启了一般查询日志将会消耗大量的系统资源因此通常情况下不建议开启。一般查询日志的开启与关闭可以通过 --general_log选项来开启与关闭。一般查询日志的文件名默认为host_name(当前机器的名称.log这个文件名可以通过general_log_file来设置。
一般查询日志的文件内容如下: 在该文件中我们可以看到服务器执行的每一条SQL以及连接的一些相关信息。
前面我们了解过我们可以通过表查询的方式来查询一般查询日志 查询的内容具体如下 通过上面的内容可以发现我们查询的具体SQL是只是一个编码因此我们需要将其转换为可读的字符串我们可以使用CAST函数来实现该功能CAST的使用语法如下 CAST(要转换的内容 AS 要转换为的类型 此时我们可以通过CAST优化一下我们的查询语句 SELECT event_time ,thread_id, server_id, command_type, CAST(argument AS CHAR) AS query FROM mysql.general_log; 我们再按这条语句进行查询就能看到具体的SQL语句了
三、慢查询日志
在MySQL中慢查询日志主要用来记录那些执行时间和检查的行数超过一定阈值的SQL语句时间阈值通过log-query-time来指定行数的阈值通过min_examined_row_limit来指定。对于慢查询日志记录的SQL我们需要进行分析和优化分析时我们可以使用前面介绍过的MySQldumpslow客户端程序需要注意的是获取锁的时间并不计入执行时间只计入语句的执行时间和释放锁的时间只有这个时间超过阈值才会记入日志。因此日志中语句的顺序可能与执行的顺序不同。
下面我们来看一下慢查询日志使用时的注意事项
log_query_time的默认值为10最小可设置为0慢查询日志默认为关闭需要通过--slow_query_log来开启慢查询日志文件名默认为host_name-slow.log,该文件默认保存在MySQL的数据目录中。如果需要修改文件名可以通过slow_query_log_file来修改默认情况下慢查询日志不记录管理语句管理语句包括ALTER TABLE 、ANALYZE TABLE 、 CHECK TBALE、CREATE INDEX 、DROP INDEX、OPTIMIZE TABLE和REPAIR TABLE。如果要记录管理语句需要设置log_slow_admin_statement为开启。默认情况下慢查询日志不记录不使用索引的查询如果要记录不使用索引的查询需要通过log_queries_not_using_indexs系统变量来设置。需要注意的是在开启记录不使用索引的查询后将会大大增加写入日志的SQL的数量因此我们需要通过log_throttle_queries_not_using_indexes系统变量来设置每分种写入慢查询日志的同类查询的数量以免慢查询日志太大造成影响该变量的默认值为0表示无限制。 在MySQL中主要有两种查看慢查询日志的方式一种是通过慢查询日志文件一种则是通过慢查询日志表。
慢查询日志文件中一条日志的内容大体如下 其中Query_time表示SQL语句的执行时间单位为秒Lock_time表示为该语句获取锁的时间单位为秒,Rows_sent表示服务端发送到客户端的行数Rows_examined为服务端检查的行数。
在慢查询日志中还有还有一些额外的隐藏字段这些字段默认关闭如果要启用的话可以通过系统变量--log-slow-extra。这些隐藏的字段如下
慢查询日志还可以通过对应的表slow_log)来查询,slow_log的建表语句如下 表中的字段的内容与日志文件是对应的。
四、错误日志
MySQLd的启动与关闭的次数诊断信息以及服务器运行期间发生的错误和警告一般记录在错误日志中例如MySQL需要自动检查或者修复一个表就会在错误日志中写下一条日志错误日志默认使用UTF-8编码并用英语来生成记录。
错误日志可以输出到控制台也可以输出到指定文件中“控制台”表示stderr标准错误输出。
在Windows中mysqld通过--log-error和--console来指定错误日志是输出到文件还是输出到控制台如果指定了--consle则输出到控制台如果指定了--log-error则输出到指定的文件。如果两者都有指定的话那么-log-error会失效。如果没有指定-log-error或者没有指定具体文件那么会自动在数据目录生成一个host_name.err的日志文件。在Unix和Linux系统中输出到文件还是输出到控制台都由-log-error来指定如果-log-error的值为stderr则输出到控制台如果为一个文件名则输出到该文件如果-log-error没有指定值则跟在Window中一样在数据目录下生成一个host_name.err文件。前面中提到的指定文件都可以指定为绝对路径表示将错误日志输出到该位置的文件中。
在错误日志中主要包含以下几个核心字段
time:时间戳精度为微妙msg错误日志的描述prio事件优先级包括System event-系统0Error event-错误1Warning event-警告2或者 Note/infomation event -通知/提示事件3值越小优先级越高err_code:事件错误代码err_symbol:以字符串形式表示的事件错误符例如‘ER_DUP_KEYSQL_state:事件sqlstate值与error_symbol对应例如’ER_DUP_KEY对应的SQLSTATE为23000subsystem事件发生的子系统。 对于当前已经定义的错误事件的类型我们可以通过如下SQL语句来查询 SELECT * FROM performance_schema.events_errors_summary_global_by_error WHERE SUM_ERROR_RAISED 0\G 我们来具体执行一下该sql
此时我们就能知道当前发生过哪些类型的错误事件 。需要注意的是对于Mysql对我们平常所执行的一些有语法问题的SQL的错误提示是不会记录到错误日志中的例如 当我们使用FLUSH ERROR LOGS、FLUSH LOGS 、 mysqladmin flush-logs命令来刷新错误日志时服务器会将正在写入的任何错误日志文件关闭并重新打开。如果重新打开时原来文件名的文件不存在了就会重新创建一个原来文件名的错误日志文件因此当我们需要重命名文件用来做备份文件时可以先将原本的文件重命名然后在执行刷新操作生成一个新的错误日志文件。具体可以进行如下操作(这里错误能日志的原始名为 host_name.err) mv host_name.err host_name.err-old #重命名文件 mysqladmin flush-logs #刷新文件 mv host_name.err-old 备份目录 #将重命名的文件移动到备份目录