Mysql日志详解

1. 错误日志:

  • mysql执行过程中的错误信息/告警信息
  • event scheduler运行时所产生信息
  • mysq启动和停止过程中产生的信息
  • 主从复制结构中,重从服务器IO复杂线程的启动信息
mysql> show variables where variable_name="log_error" or variable_name="log_warnings";
+---------------+---------------------+
| Variable_name | Value               |
+---------------+---------------------+
| log_error     | /var/log/mysqld.log |
| log_warnings  | 2                   |
+---------------+---------------------+
2 rows in set (0.00 sec)

log_error:错误日志的存放路径

log_warnings:表示是否记录告警信息到错误日志,0表示不记录告警信息,1表示记录告警信息,大于1表示各类告警信息,例如有关网络故障的信息和重新连接信息写入错误日志

2. 查询日志

查询自然--general log,查询日志记录了数据库执行的命令,不管这些语法是否正确,都会被记录。由于数据库操作命令非常多而且比较频繁,所以开启了查询日志以后,数据库可能需要不停的写入查询,这样会增大服务器的IO压力,增加很多的系统开销,所以默认情况下,mysql的查询日志是没有开启的,但是开启查询日志也有助于我们分析那些语句执行密集,执行密集的select语句对应的数据是否能够被缓存,查询日志也可以帮助我们分析问题,所以,我们可以更具实际情况决定是否开启查询日志,如果需要可以手动开启。

mysql> show variables where variable_name like "%general_log%" or variable_name = "log_output";
+------------------+-------------------------+
| Variable_name    | Value                   |
+------------------+-------------------------+
| general_log      | OFF                     |
| general_log_file | /data/mysqldata/jan.log |
| log_output       | FILE                    |
+------------------+-------------------------+
3 rows in set (0.00 sec)

general_log:表示查询日志是否开启,ON表示开启,OFF表示未开启,默认未OFF

log_output:表示当查询日志开启以后,以哪种方式存放。FILE--文件,TABLE--表mysql.general_log中(慢查询存放于表mysql.slow_log),FILE,TABLE表示同时存放于文件和表中,NONE表示不记录日志。log_output不仅控制查询日志,还控制慢查询日志。

general_log_file:表示查询日志存放于文件的路径

3. 慢查询日志

某些sql语句执行完毕所花费的时间特别长,我们将这种响应比较慢的语句记录在慢查询日志中,只要超过指定时间的sql语句,都称为“慢查询”,被记录在慢查询日志中。慢查询日志默认情况下是关闭的,默认设置下,超过10s的语句才会被记录到慢查询日志中。

mysql> show  variables where variable_name like 'slow_query%' or variable_name='long_query_time' or variable_name='log_queries_not_using_indexes';
+-------------------------------+------------------------------+
| Variable_name                 | Value                        |
+-------------------------------+------------------------------+
| log_queries_not_using_indexes | OFF                          |
| long_query_time               | 10.000000                    |
| slow_query_log                | OFF                          |
| slow_query_log_file           | /data/mysqldata/jan-slow.log |
+-------------------------------+------------------------------+
4 rows in set (0.00 sec)

slow_query_log:表示查询日志是否开启,ON表示开启,OFF表示未开启,默认OFF

slow_query_log_file:表示查询日志存放于文件的路径

long_query_time:表示多长时间的查询被认为"慢查询",默认10s

log_queries_not_using_indexes:表示如果运行的sql语句没有使用到索引,也被记录到慢查询日志,OFF表示不记录,ON表示记录,默认OFF

4.二进制日志

二进制日志是一个二进制文件,记录了对MySQL数据库执行更改的所有操作,并且记录了语句发生时间、执行时长、操作数据等其他额外信息,但是他不记录SELECT、SHOW等那些不改变数据库的SQL语句。二进制日志主要用于数据库恢复和主从复制,以及审计操作。

mysql> show variables where variable_name="log_bin" or variable_name="log_bin_basename" or variable_name="max_binlog_size" or 
variable_name="log_bin_index" or variable_name="binlog_format" or variable_name="sql_log_bin" or variable_name="sync_binlog"; +------------------+------------+ | Variable_name | Value | +------------------+------------+ | binlog_format | ROW | | log_bin | OFF | | log_bin_basename | | | log_bin_index | | | max_binlog_size | 1073741824 | | sql_log_bin | ON | | sync_binlog | 1 | +------------------+------------+ 7 rows in set (0.00 sec)

log_bin:表示二进制日志是否开启,ON表示开启,OFF表示未开启,默认OFF

log_bin_basename:二进制日志文件前缀名,二进制日志就记录在该文件中

max_binlog_size:二进制日志文件的最大大小,超过此大小,二进制文件会自动滚动

log_bin_index:二进制日志文件索引文件名,用于记录所有的二进制文件

binlog_format:决定了二进制日志的记录方式,STATEMENT以语句的形式记录,ROW以数据修改的形式记录,MIXED以语句和数据修改混合形式记录

sql_log_bin:决定是否对二进制日志进行日志记录,ON表示执行记录,OFF表示不执行记录,默认OFF,这个是会话级别变量可以通SET sql_log_bin = {0|1}来改变该变量值

sync_binlog:决定二进制日志写入磁盘时机,如果sync_binlog为0,操作系统来决定什么时候写入磁盘,如果sync_binlog为N(N=1,2,3..),则每N次事务提交后,都立即将内存中的二进制日志写入磁盘,如何选择取决于安全性与性能的权衡.

二进制日志的三种记录方式

STATEMENT:记录对数据库做出修改的语句,比如,update A set test='test',如果使用statement模式,那么这条update语句将被记录到二进制日志中,使用statement模式时,优点是binlog日志量少,IO压力小,性能高,缺点是为了尽可能一致的还原操作,除了记录语句本身外,可能还需要记录一些相关信息,而且,在使用一些特定函数时,并不能保证恢复操作与记录完全一致

ROW:记录对数据库做出的修改的语句所影响到的数据行以及这些行的修改,比如,update A set test='test',如果使用row模式,那么这条update所影响到的行所对应的修改,将会记录在binlog中,使用row模式时,优点是能完还原和复制被日志记录时的操作,缺点是日志量较大,IO压力比较大,性能消耗比较大

MIXED:混合上述两种模式,一般使用statement方式进行记录,如果遇到一些特殊函数使用row方式进行记录,这种记录方式称为mixed

posted on 2020-10-14 22:24  InnoLeo  阅读(211)  评论(0编辑  收藏  举报