mysql之 日志体系(错误日志、查询日志、二进制日志、事务日志、中继日志)
一、 mysql错误日志:
错误日志记录的事件:
a)、服务器启动关闭过程中的信息
b)、服务器运行过程中的错误信息
c)、事件调试器运行一个事件时间生的信息
d)、在从服务器上启动从服务器进程时产生的信息
log_error参数指定错误日志存放路径以及文件名。如果不指定文件,默认文件名是[host_name].err,保存路径为%datadir%。
mysql> system hostname
mysql
mysql> show variables like '%datadir%';
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| datadir | /var/lib/mysql/ |
+---------------+-----------------+
mysql> show variables like 'log_error';
+---------------+--------------------------+
| Variable_name | Value |
+---------------+--------------------------+
| log_error | /var/lib/mysql/mysql.err |
+---------------+--------------------------+
错误日志中记录的信息分为三类:[Note],[warning],[Error]。可以通过设置log_warnings来控制警告信息是否被记录,默认值为1表示记录,为0表示禁用。如果大于1,则对于连接失败、新连接拒绝等类型的消息也会被写入到错误日志中去。
mysql> show variables like "%log_warning%";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_warnings | 1 |
+---------------+-------+
1 row in set (0.00 sec)
二、 mysql的查询日志:
查询日志记录查询语句与启动时间,建议不是在调试环境下不要开启查询日志,因为会不断占据你的磁盘空间,并会产生大量的IO。
查询日志有两种,分别是慢查询日志(Slow Query Log)和通用查询日志(General Query Log)。而且mysql的查询日志不仅可以记录到文件,还能自动保存到MySql数据库中的表对象里。
1、慢查询日志:
指的是所有查询语句执行时间超过系统变量long_query_time(默认值是10秒)指定的参数值,并且访问的记录数超过系统变量min_examined_row_limit(默认值是0条)的数量的语句。这里的执行时间是不包括初始化表锁的开销。
慢查询日志中语句记录和顺序有可能跟执行顺序不同,因为每条语句执行完并且释放了锁资源之后,mysqld才会将符合条件的sql语句写入到慢查询日志中去。
开启和禁用慢查询日志通过以下两个系统参数,这两个参数可以动态修改:
slow_query_log 指定是否输出慢查询日志,1表示输出,0表示不输出,默认为0。
slow_query_log_file 指定日志文件存储路径和文件名,如果没有指定,默认文件名为[host_name]-slow.log,保存路径为%datadir%。
mysql> show variables like "%slow_query_log%";
+---------------------+-------------------------------+
| Variable_name | Value |
+---------------------+-------------------------------+
| slow_query_log | OFF |
| slow_query_log_file | /var/lib/mysql/mysql-slow.log |
+---------------------+-------------------------------+
全局禁用/开启慢查询日志:
SET GLOBAL slow_query_log='OFF';
SET GLOBAL slow_query_log='ON';
其他参数:
long_query_time
log_short_format
log_slow_admin_statements
log_queries_not_using_indexes
log_throttle_queries_not_using_indexes
log_slow_slave_statements
mysqld判断一条sql语句是否需要被记录到慢查询日志时做的判断步骤如下:
1)判断执行的是查询语句,还是管理性语句
2)查询语句执行的时间达到或者超过了long_query_time参数值,或者是符合log_queries_not_using_indexes条件
3)查询的记录量达到了min_examined_row_limit参数值
4)查询语句不违反log_throttle_queries_not_using_indexes设定的值
如果慢查询日志非常大,可以用mysql自带的mysqldumpslow命令,或者其他第三方工具查看分析。
2、通用查询日志:
这个日志可以记录mysqld进程所做的几乎所有操作,包括sql语句执行,数据库对象管理,客户端的连接和断开。
这个日志的最大功能是审计。
开启和禁用通用查询日志通过以下两个系统参数,这两个参数可以动态修改:
general_log 指定是否输出慢查询日志,1表示输出,0表示不输出,默认为0。
general_log_file 指定日志文件存储路径和文件名,如果没有指定,默认文件名为[host_name].log,保存路径为%datadir%。
mysql> show variables like "general_log%";
+------------------+--------------------------+
| Variable_name | Value |
+------------------+--------------------------+
| general_log | OFF |
| general_log_file | /var/lib/mysql/mysql.log |
+------------------+--------------------------+
全局禁用/开启通用日志:
SET GLOBAL general_log='OFF';
SET GLOBAL general_log='ON';
会话级禁用/开启通用日志:
SET sql_log_off='OFF';
SET sql_log_off='ON';
通用查询日志文件中语句出现的顺序,是按照mysqld接收的顺序。
3、配置查询日志:
在mysql服务启动时指定--log-output选项,可以决定查询日志是保存在操作系统中的文件里,还是保存在数据库系统中的专用表。
--log-output 可选值有三个:table,输出到表,对应的表有general_log和slow_log
file,输出到日志文件
none,不输出查询日志
--log-output可以设定多个值。
默认情况下,日志表使用CSV引擎,5.1以后,日志表也可以修改为MyIsam引擎。
日志表(general_log和slow_log)支持create table,alter table,drop table,truncate table,rename,check。不支持lock tables,insert,update,delete操作,日志表的增删改查均由mysql服务内部自己进行。
flush tables with read lock以及设置全局系统变量read_only,对日志表无效。
日志表的写操作不会计入二进制日志,有复制环境的话,日志表的内容也不会被复制到其他Slaves节点。
用flush tables或flush logs来刷新日志表或者日志文件。
日志表不允许创建分区。
三、 二进制日志文件:
通过二进制日志文件,可以主要实现三个重要的功能:用于复制,用于恢复,用于审计。
启用二进制日志文件,在mysql服务启动时添加参数log-bin=[base_name]。如果不指定参数值,默认文件名为[host_name]-bin.log,保存路径为%datadir%。
mysql> show variables like "%log_bin%";
+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| log_bin | OFF |
| log_bin_basename | |
| log_bin_index | |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
| sql_log_bin | ON |
+---------------------------------+-------+
二进制日志文件不会只有一个,从序号1开始起,每次启动mysql服务或者刷新日志时,生成一个新的二进制日志文件。而且单个日志文件不可能无限增长,当涨到参数max_binlog_size指定的大小时,就会创建新的二进制日志文件。但是也有可能日志文件比max_binlog_size指定的值要大,假如有执行的事务很大,所有的事务信息必须写到一个日志文件中去。
为了跟踪二进制日志文件的状态,mysql服务创建了一个和二进制日志文件同名,但是扩展名为.index的二进制日志索引文件。这个文件中包含所有可供使用的二进制日志文件。
如果拥有super权限的用户执行操作前,执行了set sql_log_bin=0命令,则会禁止其执行的语句生产二进制日志。
--binlog-do-db和--binlog-ignore-db两个选项,表示指定那些库记录或者不记录二进制日志,这两个选项每次只能设定一个值,如果有多个库,反复设置多条。
二进制日志文件的格式有三种:基于行格式记录(row-based logging)、基于语句记录(statement-based logging)、混合模式记录(mixed-based logging)。
因为mysql中既有支持事务的存储引擎,也有不支持事务的存储引擎,因此在操作基于不同的存储引擎对象时,二进制日志的处理也不一样。
对于非事务表来说,语句执行后就会立即写入二进制日志文件中。而对于事务表,则要到等到当前没有任何锁定或未提交的信息时才会写入二进制日志文件中,以确保日志被记录的始终是其执行的顺序。
四、 事务日志:
事务日志文件名为"ib_logfile0"和“ib_logfile1”,默认存放在表空间所在目录
与事务日志相关变量:
innodb_log_group_home_dir=/PATH/TO/DIR #设定InnoDB重做日志文件的存储目录。在缺省使用InnoDB日志相关的所有变量时,其默认会在数据目录中创建两个大小为5MB的名为ib_logfile0和ib_logfile1的日志文件。作用范围为全局级别,可用于选项文件,属非动态变量。
innodb_log_file_size={108576 .. 4294967295} #设定日志组中每个日志文件的大小,单位是字节,默认值是5MB。较为明智的取值范围是从1MB到缓存池体积的1/n,其中n表示日志组中日志文件的个数。日志文件越大,在缓存池中需要执行的检查点刷写操作就越少,这意味着所需的I/O操作也就越少,然而这也会导致较慢的故障恢复速度。作用范围为全局级别,可用于选项文件,属非动态变量。
innodb_log_files_in_group={2 .. 100} #设定日志组中日志文件的个数。InnoDB以循环的方式使用这些日志文件。默认值为2。作用范围为全局级别,可用于选项文件,属非动态变量。
innodb_log_buffer_size={262144 .. 4294967295} 设定InnoDB用于辅助完成日志文件写操作的日志缓冲区大小,单位是字节,默认为8MB。较大的事务可以借助于更大的日志缓冲区来避免在事务完成之前将日志缓冲区的数据写入日志文件,以减少I/O操作进而提升系统性能。因此,在有着较大事务的应用场景中,建议为此变量设定一个更大的值。作用范围为全局级别,可用于选项文件,属非动态变量。
innodb_flush_log_at_trx_commit = 1 #表示有事务提交后,不会让事务先写进buffer,再同步到事务日志文件,而是一旦有事务提交就立刻写进事务日志,并且还每隔1秒钟也会把buffer里的数据同步到文件,这样IO消耗大,默认值是"1",可修改为“2”
innodb_locks_unsafe_for_binlog = OFF #这个变量建议保持OFF状态,详细的原理不清楚
innodb_mirrored_log_groups = 1 #事务日志组保存的镜像数
五、 中继日志:
在复制环境中产的的日志信息
与中继日志相关的变量:
log_slave_updates #用于设定复制场景中的从服务器是否将从主服务器收到的更新操作记录进本机的二进制日志中。本参数设定的生效需要在从服务器上启用二进制日志功能。
relay_log=file_name #设定中继日志的文件名称,默认为host_name-relay-bin。也可以使用绝对路径,以指定非数据目录来存储中继日志。作用范围为全局级别,可用于选项文件,属非动态变量。
relay_log_index=file_name #设定中继日志的索引文件名,默认为为数据目录中的host_name-relay-bin.index,作用范围为全局级别,可用于选项文件,属非动态变量。
relay-log-info-file=file_name #设定中继服务用于记录中继信息的文件,默认为数据目录中的relay-log.info。作用范围为全局级别,可用于选项文件,属非动态变量。
relay_log_purge={ON|OFF} #设定对不再需要的中继日志是否自动进行清理。默认值为ON。作用范围为全局级别,可用于选项文件,属动态变量。
relay_log_space_limit= #设定用于存储所有中继日志文件的可用空间大小。默认为0,表示不限定。最大值取决于系统平台位数。作用范围为全局级别,可用于选项文件,属非动态变量。
max_relay_log_size={4096..1073741824} #设定从服务器上中继日志的体积上限,到达此限度时其会自动进行中继日志滚动。此参数值为0时,mysqld将使用max_binlog_size参数同时为二进制日志和中继日志设定日志文件体积上限。作用范围为全局级别,可用于配置文件,属动态变量。
mysql之 日志体系(错误日志、查询日志、二进制日志、事务日志、中继日志)的更多相关文章
- java 日志体系目录
java 日志体系目录 1.1 java 日志体系(一)log4j1.log4j2.logback.jul.jcl.slf4j 1.2 java 日志体系(二)jcl 和 slf4j 2.1 java ...
- mysql基础之日志管理(查询日志、慢查询日志、错误日志、二进制日志、中继日志、事务日志)
日志文件记录了MySQL数据库的各种类型的活动,MySQL数据库中常见的日志文件有 查询日志,慢查询日志,错误日志,二进制日志,中继日志 ,事务日志. 修改配置或者想要使配置永久生效需将内容写入配置文 ...
- MySQL-五种日志(查询日志、慢查询日志、更新日志、二进制日志、错误日志)、备份及主从复制配置
开启查询日志: 配置文件my.cnf: log=/usr/local/mysql/var/log.log 开启慢查询: 配置文件my.cnf: log-slow-queries=/usr/local/ ...
- MySQL基础篇(07):用户和权限管理,日志体系简介
本文源码:GitHub·点这里 || GitEE·点这里 一.MySQL用户 1.基础描述 在数据库的使用过程中,用户作为访问数据库的鉴权因素,起到非常重要的作用,安装MySQL时会自动生成一个roo ...
- MYSQL启动报1067错误,系统日志中是“服务 mysql 意外停止” Mysql日志中则是:“Plugin \'FEDERATED\' is disabled”
MYSQL启动报1067错误,系统日志中是"服务 mysql 意外停止" Mysql日志中则是:"Plugin \'FEDERATED\' is disabled&quo ...
- centos shell编程6一些工作中实践脚本 nagios监控脚本 自定义zabbix脚本 mysql备份脚本 zabbix错误日志 直接送给bc做计算 gzip innobackupex/Xtrabackup 第四十节课
centos shell编程6一些工作中实践脚本 nagios监控脚本 自定义zabbix脚本 mysql备份脚本 zabbix错误日志 直接送给bc做计算 gzip innobacku ...
- mysql数据库优化之开启慢查询日志
进入mysql数据库,使用 show variables like 'slow_query_log'; 查看是否开启了慢查询日志 value值为OFF,则慢查询日志没有开启,在开启慢查询日志之前,我们 ...
- mysql:general_log 日志、数据库线程查询、数据库慢查询
开启general log会将所有到达MySQL Server的SQL语句记录下来.一般不会开启开功能,因为log的量会非常庞大.但个别情况下可能会临时的开一会儿general log以供排障使用. ...
- mysql配置调优-开启慢查询日志-slow_query_log
工作中,会遇到需要查看mysql的top 20 慢sql,逐个进行优化,加上必要的索引这种需求,这时就需要开启数据库的慢查询日志的功能 1.查询当前慢查询日志的状态 # 默认为关闭状态 mysql - ...
随机推荐
- [Python Web]配置 nginx 遇到错误排查(初级)
配置 nginx 遇到错误排查(初级) 系统版本:ubuntu 14.04,nginx 版本:nginx/1.4.6 (Ubuntu) 本文不是一步步搭建 nginx 的过程,而是我在使用 nginx ...
- struts2 之 ThreadLocal 和 ActionContext
1. ThreadLocal:该类提供了线程局部(thtead-local)变量.threadLocal是一个容器,该容器中存放的数据可以保证线程安全. 案例如: public class Threa ...
- 关于Java中Arrays.sort()方法TLE
最近一直在练用Java写题,今天无意发现一道很简单的二分题(链接),我一开始是直接开int[]数组调用Arrays.sort()去排序,没想到TLE了,原来是因为jdk中对于int[]的排序是使用快速 ...
- 树莓派的GPIO编程
作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁转载. 树莓派除了提供常见的网口和USB接口 ,还提供了一组GPIO(General Purpose Input/ ...
- 为大数据软件准备JAVA、Python环境
环境:SUSE 11 64位 安装JAVA JDK 1.确定版本.一般都是安装最新的JDK(Java SE Development Kit).个别软件和系统需要特定版本的JDK,根据实际需要下载. 2 ...
- 微信小程序后台音乐播放注意事项
wx.seekBackgroundAudio(OBJECT) 作用:控制音乐播放进度. 注意: 该事件 会触发 wx.onBackgroundAudioPlay(CALLBACK) 事件 ,也就是相当 ...
- Linux系统操作指令汇总
1.系统配置 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIO ...
- [效率]Source insight标题栏中路径显示完整路径的方法
使用Source insight的时候,默认是不显示文件的全路径的,这一点有那么一段时间让我很纠结,因为很多函数都是基于硬件架构的,一个函数有很多时间.查看文件的全路径是非常有必要,可以通过以下实现: ...
- 微坑---微信小程序ios上时间字符串转换为时间戳时,在开发工具上和安卓手机上运行成功
给定一个时间字符串 var time="2017-02-27 16:42:53" js有三种转换为时间戳的方法:1.var timestamp = Date.parse(time ...
- springboot(十):邮件服务
springboot仍然在狂速发展,才五个多月没有关注,现在看官网已经到1.5.3.RELEASE版本了.准备慢慢在写写springboot相关的文章,本篇文章使用springboot最新版本1.5. ...