MySQL日志

来源:互联网 发布:淘宝网商品分类 编辑:程序博客网 时间:2024/05/17 22:39

MySQL中有4种类型的日志:错误日志error log;二进制日志binary log;查询日志general log和慢日志slow log。
除了错误日志以外,其他log默认都是不启用的,需要配置数据库参数来enable。
日志是服务器级别的文件,即对于每种log,所有数据库的信息都混合在一个文件中。

错误日志
错误日志记录MySQL启动和停止的过程,以及MySQL运行过程中发生的严重错误。当数据库出现任何错误而无法正常运行时,应首先查看错误日志。
错误日志所在的位置由log_error参数指定。默认该文件在data dir目录下,默认文件名为host_name.error。

二进制日志
二进制日志(BINLOG),包括数据库中运行的所有的DDL和DML语言,但是不包括查询语言和没有实际更新的update语句。也就是说仅记录会导致数据库结构或数据发生改变的语句。注意一个二进制文件记录所有数据库的变化,而不是每个数据库有自己单独的二进制文件。
二进制日志默认不开启。开启方式如下:

1, 在/etc/mysql/my.cnf中添加log-bin和server-id参数:
log-bin=mysql-bin – mysql-bin是文件的前缀名
server-id=1

2, 重启MySQL后,在/var/lib/mysql下,也就是设置的data dir下就可以找到二进制日志文件。
mysql-bin.000001
mysql-bin.index

3, 二进制日志不可直接查看,需要使用mysqlbinlog查看日志内容:
shell>mysqlbinlog filename

下面是一段二进制日志示例:

BEGIN/*!*/;at 299        160128 13:56:27 server id 1  end_log_pos 353 CRC32 0x964fbee2   Table_map: `lillian_test`.`t1` mapped to number 108at 353160128 13:56:27 server id 1  end_log_pos 397 CRC32 0x0c0a6030   Write_rows: table id 108 flags: STMT_END_FBINLOG 'i62pVhMBAAAANgAAAGEBAAAAAGwAAAAAAAEADGxpbGxp    YW5fdGVzdAACdDEAAgMDAAPivk+Wi62pVh4BAAAALAAAAI0BAAAAAGwAAAAAAAEAAgAC//wBAAAAAgAAADBgCgw='/*!*/;at 397

由上例我们可以看出,日志采用了statement和row混合记录方式。可以明显看出DDL和DML语句的是statement部分,而不可读的BINLOG部分为row部分。使用binlog_format参数可以选择使用statement,row或是混合方式。可以使用show variables命令查看。
对于日志中的不可读部分,可以使用下面的命令查看:

mysqlbinlog -vv binlog.000001 –base64-output=DECODE-ROWS

由于二进制日志记载了所有数据变化,因此可能会短时间内增长的很大。删除二进制日志是DBA的日常工作之一。三种途径来实现:
1,清空二进制日志:reset master;
2,删除二进制日志到指定的文件/时间点:
purge master log to/before ‘yyyy-mm-dd hh24:mi:ss’
3,通过设置expire-logs-days参数来设置过期时间,实现自动清理log。

查询日志
查询日志和慢日志都可以选择保存在表中或文件中。使用general_log参数开启查询日志,文件位置由general_log_file指定。但由于该日志记录了客户端所有语句,在一些情况下会影响性能,因此无特别需要不建议开启。
查询日志是纯文本,可以直接查看。

慢查询日志
慢查询日志记录所有执行时间超过long_query_time参数,并且扫描记录数不少于min_examined_row_limit的所有SQL语句的日志。
在默认情况下,两类语句不会被记录到慢查询日志中:
1,管理语句
2,不使用索引进行的查询语句

使用log_slow_queries=[filename]来启用该日志。该日志也是文本格式的。

0 0