mysql 几种日志

mysql 几种日志

原文:http://blog.csdn.net/wll_1017/article/details/44979539

 

mysql 5.5 有以下几种日志: 

 

错误日志(error log): log-err

查询日志(general query log): log

慢查询日志:-log-slow-queries       

二进制日志 (binary log): log-bin

 中继日志( relaylog)

innodb 在线redo 日志

1. 错误日志

错误日志记录着mysqld启动和停止,以及服务器在运行过程中发生的错误的相关信息。在默认情况下,系统记录错误日志的功能是关闭的,错误信息被输出到标准错误输出。需要在启动的时候开启 log-error选项

如果没有指定文件名 默认hostname.err,默认路径为datadir目录

指定日志路径两种方法

编辑my.cnf    写入 log-error=[path]

通过命令参数错误日志 mysqld_safe --user=mysql --log-error=[path] &

2 查询日志 general query log

Geleral log记录了服务器接收到的每一个查询或是命令,无论这些查询或是命令是否正确甚至是否包含语法错误,general log 都会将其记录下来,记录的格式为 {Time ,Id ,Command,Argument }。也正因为mysql服务器需要不断地记录日志,开启General log会产生不小的系统开销。因此,Mysql默认是把General log关闭的。  general  query log写入日志是在客户端执行命令,并且释放锁之前,写入日志

 

数据库访问量很大,想要从SQL方面进行优化,因为为了性能考虑,一般general log不会开启。slow log可以定位一些有性能问题的sql,而general log会记录所有的SQL。l

 

general querylog和slow query log开始支持写到文件或者数据库表两种方式,并且日志的开启,输出方式的修改,都可以在Global级别动态修改。

 

 查看日志的存放方式show variables like 'log_output';

3、慢查询日志:-log-slow-queries

 慢查询日志采用的是简单的文本格式,可以通过文本编辑器查看其中的内容,其中记录了语句的执行时刻,执行消耗的时间,执行用户,连接主机等相关信息。mysql还提供了专门分析日志的工具, mysqlslowdump用来解决可能存在的性能问题。

慢查询只有在大于 

 long_query_time 指定时间的sqlstatement , min_examined_row_limit最小检查行数限制 才会被检查,语句被写入slow log 是在语句被执行后,并且释放锁之前,默认情况下,慢查询日志是被关闭的

 

long_query_time的值被设置为0-10之间,默认值是10.

log_slow_admin_statements : 系统管理语句就在慢查询日志中. 系统管理语句包括 ALTER TABLE, ANALYZE TABLE, CHECK TABLE, CREATEINDEX, DROP INDEX, OPTIMIZE TABLE, and REPAIR TABLE.

log_queries_not_using_indexes默认情况下,管理语句和不使用索引的语句是不会记录在慢查询中的,需要人工设置

log-short-format  记录少量的日志 

log_throttle_queries_not_using_indexes:5.6.5版本开始新增了一个参数log_throttle_queries_not_using_indexes,用来表示每分钟允许记录到slow log的且未使用索引的SQL语句次数。 该值默认为0,表示没有限制。在生产环境下,若没有使用索引,此类SQL语句会频繁地被记录到slow log,从而导致slow log文件的大小不断增加,故DBA可通过此参数进行配置。

log_slow_slave_statements  :默认情况下a replication slave does not write replicated queries to the slowquery log. To change this, use thelog_slow_slave_statements system variable.

 

---指定初始化参数,开启慢查询

slow_query_log= 1   0是关闭慢查询,1是打开

slow_query_log_file=  /var/lib/mysql/log-slow-query.log    ---指定慢查询日志的名称,如果你没有指定慢查询日志的名称,默认会在数据文件目录下创建 host_name-slow.log慢查询日志

show variableslike 'log_output';              ---日志存放的方式,是表还是文件

4 二进制日志:-log-bin

二进制日志不会记录select ,show 等不修改数据的语句。打开二进制日志会消耗一些系统系能,但是对于复制和系统恢复,所带来的好处大于减少的性能, 

二进制日志即binlog日志 记录数据定义语言(DDL)和数据控制语言(DML) 但不包括数据查询语言。

 

二进制日志的功能

1、恢复(recovery)

2、复制(replication)

 

binlog  还有其他的一下附加参数

max_binlog_size设置binlog的最大存储上线,当日志达到该日志的上限时,mysql会重新创建一个日志开始记录,不过偶尔也会超出该设置的binlog,一般都是以为即将达到上限时候,产生了一个比较大的事物,为了保证事物的安全,mysql不会将同一个事物分开记录到两个binlog

 

binlog-do-db=db_name 明确告诉mysql,需要对某个数据库记录binlog,如果有了binlog-do-db=db_name  显示指定,mysql会忽略正对其他书库执行query,而仅仅记录正对指定数据库执行的query

 

binlog-ignore-db=db_name :显示的指定忽略某个数据库的binlog记录。

5  中继日志( relaylog)

 中继日志也是二进制日志,用来给slave 库恢复

6 innodb 在线redo 日志 innodb redo log

innodb 是一个事物安全的存储引擎,其事物安全性主要通过在线的redo日志和记录在表空间的undo信息来保证。redo 日志中记录了innodb所做的所有物理变更和事物信息。innodb的redo日志同样默认存放在数据目录下面。可以通过innodb_log_group_home_dir 来更改日志的存放位置。

通过innodb_log_files_in_group设置日志的数量。

 

 更新日志:-log-update

更新日志是在mysql 比较老的版本上使用的,其功能和binlog 基本类似,只不过,不是以二进制格式来记录,而是简单的文本格式记录内容,自从mysql增加了binlog功能之后,就很少使用更新日志了。

总结:

日志直接性能损耗数据库系统中最为昂贵的IO 资源,在默认情况下,系统仅打开错误日志,关闭了其他所有日志,以达到尽可能减少IO 损耗提高系统性能的目的。

但在实际应用场景中,都至少需要打开二进制日志,因为这是MySQL 很多存储引擎进行增量备份的基础,也是MySQL 实现复制的基本条件。有时候为了进一步的性能优化,定位执行较慢的SQL 语句,很多系统也会打开慢查询日志来记录执行时间超过特定数值的SQL 语句。

一般情况下,在生产系统中很少有系统会打开查询日志。因为查询日志打开之后会将MySQL 中执行的每一条Query 都记录到日志中,会该系统带来比较大的IO 负担,而带来的实际效益却并不是非常大。

一般只有在开发测试环境中,为了定位某些功能具体使用了哪些SQL语句的时候,才会在短时间段内打开该日志来做相应的分析。所以,在MySQL 系统中,会对性能产生影响的MySQL日志(不包括各存储引擎自己的日志)主要是Binlog 。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值