Mysql日志

Mysql日志分类

错误日志、二进制日志、查询日志、慢查询日志、中继日志、通用日志、事务日志/redo日志(innodb)。

错误日志

它记录了mysqld的启动和停止,以及服务器运行过程中发生的任何严重错误时的相关信息。当数据库出现任何故障导致无法正常启动时,可以首先查看此信息。

记录的位置:--log-error[=filename]来指定日志记录的路径,或者直接写在配置文件my.cnf中默认写在DATADIR目录下,并且以主机名命名,.err结尾。如:/usr/local/mysql/data/server3.example.com.err。rpm包安装,日志在/var/log/mysqld.log

二进制日志:

binlog记录所有的DDL,DML语句,但不包括查询语句,语句以"事件"的形式保存,描述了数据更改的过程。此日志对于灾难时的数据恢复起着极其重要的作用

配置文件中制定log-bin=mysql-bin、或者启动的时候指定--log-bin[=filename],没有指定路径写到DATADIR中

读取日志:

mysqlbinlog mysql-bin.000006

删除日志:

查看当前的所有二进制日志:system ls -ltr mysql-bin*     #-t按mtime之间排序,-r反排

-rw-rw----. 1 mysql mysql 835 Dec 6 23:26 mysql-bin.000001

-rw-rw----. 1 mysql mysql 126 Dec 10 17:37 mysql-bin.000002

-rw-rw----. 1 mysql mysql 126 Dec 10 17:42 mysql-bin.000003

-rw-rw----. 1 mysql mysql 126 Dec 10 17:50 mysql-bin.000004

-rw-rw----. 1 mysql mysql 150 Dec 10 17:52 mysql-bin.000005

-rw-rw----. 1 mysql mysql 114 Dec 10 17:52 mysql-bin.index

-rw-rw----. 1 mysql mysql 511 Dec 10 17:57 mysql-bin.000006

1. reset master

2. purge master logs to 'mysql-bin.000006' 表示删除mysql-bin.000006之前的(不包括自身)日志,purge(清洗,净化)

3. purge master logs before '2015-12-11 10:07:00' 删除指定日志之前的日志文件

4. 由mysql自动删除文件,指定过期时间即可:--exprie_logs-day=3

其他的选项:

--binlog-do-db = dbname            只记录有指定此选项的数据库,其他不记录

--binlog-ignore-db = dbname         只忽略有指定此选项的数据库

如果要记录或者忽略多个数据库,可以将上面的选项添加多次,指定不同的数据库名字即可

--innodb-safe-binlog此项经常和—sync-binlog=N(每写N次日志同步磁盘)一起配合使用,是的事务在日志中的更加安全

set sq_log_bin=0 ,具有super权限的客户端可以使用此项跳过对语句写入二进制日志中去。

查询日志:

配置文件中指定log=filename,一切的操作都会记录在这个文件中。

打开查询的日志一般用于调试程序,采样等操作。由于记录所有的log必定会影响mysql的性能, 所以一般只是临时的使用,当然不会写在配置文件中,写在配置文件中还得要重启mysql。

set global general_log_file='/tmp/log.log1'

set global general_log=1;

 

慢查询日志:

慢查询日志记录包含所有执行时间超过参数long_query_time (单位:s)所设定的值sql语句。获得表锁定的时间不算作执行的时间。

查看当前的慢查询限定时间:show variables like 'long%';

打开慢查询:slow_query_log=on|off

配置文件指定: slow_query_log_file [=filename]

查看慢查询:对于大量的慢查询日志,可以用mysqldumpslow工具查看汇总情况,mysqldumpshow mysql-slow.log

还可以使用mysqlsla工具进行分析 download:https://github.com/daniel-nichter/hackmysql.com。个人比较喜欢

还可以使用percona-toolkit分析,太复杂不太喜欢 ##yum install percona-toolkit,  ## pt-query-digest /tmp/log.slow 

可用 benchmark(count,expr)来做测试使用,其中表示,expr执行count次的结果

常用慢查询日志相关参数。

long_queries_not_using_indexs ##记录所有没有使用到索引的查询语句

min_examined_row_limit=1000 ##记录哪些由于查找了多余1000次而引发的慢查询

log_slow_admin_statements ##记录慢的optimize、analyze、alter table的语句

log_slow_slave_statement ##记录由于slave所产生的慢查询语句

小节:

  • 系统故障时,首先查看错误日志
  • 记录数据库的变更,数据的备份,数据的复制等操作,二进制日志必须打开,有助于进行数据恢复。
  • 如果希望记录数据库发生一切操作,包括select,则需使用log=filename,一般不要打开,会影响服务器的性能。
  • 如果希望查看系统的性能问题,定位有问题的查询语句,则需要打开慢查询日志:--log-slow-queries.
原文地址:https://www.cnblogs.com/wxl-dede/p/5038332.html