MySQL各种日志介绍

目录

1、日志分类

2、各种日志介绍

1、日志分类

错误日志

查询日志

慢查询日志

事务日志

二进制日志

中继日志

2、各种日志介绍

2.1、错误日志

默认时错误日志的存放位置在数据目录中,名称为“server_name.err”

错误日志记录的事件:

a)、服务器启动关闭过程中的信息

b)、服务器运行过程中的错误信息

c)、事件调试器运行一个事件时间生的信息

d)、在从服务器上启动从服务器进程时产生的信息

查看与日志相关的变量:

mysql> SHOW GLOBAL VARIABLES LIKE ‘%log%‘;

与错误日志相关的变量有两个:

log_error=/PATH/TO/ERROR_LOG_FILENAME

例如:log_error =  /mydata/data/hostname.err

定义错误日志文件。作用范围为全局或会话级别,可用于配置文件,属非动态变量。

log_warnings=#

设定是否将警告信息记录进错误日志。默认设定为1,表示启用;可以将其设置为0以禁用;而其值为大于1的数值时表示将新发起连接时产生的“失败的连接”和“拒绝访问”类的错误信息也记录进错误日志。

2.2、查询日志

查询日志记录查询语句与启动时间,建议不是在调试环境下不要开启查询日志,因为会不断占据你的磁盘空间,并会产生大量的IO。

与查询日志相关的变量:

log={YES|NO}

是否启用记录所有语句的日志信息于一般查询日志(general query log)中,默认通常为OFF。MySQL 5.6已经弃用此选项。

general_log={ON|OFF}

设定是否启用查询日志,默认值为取决于在启动mysqld时是否使用了--general_log选项。如若启用此项,其输出位置则由--log_output选项进行定义,如果log_output的值设定为NONE,即使启用查询日志,其也不会记录任何日志信息。作用范围为全局,可用于配置文件,属动态变量。

log_output={TABLE|FILE|NONE}

定义一般查询日志和慢查询日志的保存方式,可以是TABLE、FILE、NONE,也可以是TABLE及FILE的组合(用逗号隔开),默认为TABLE。如果组合中出现了NONE,那么其它设定都将失效,同时,无论是否启用日志功能,也不会记录任何相关的日志信息。作用范围为全局级别,可用于配置文件,属动态变量。

sql_log_off={ON|OFF}

用于控制是否禁止将一般查询日志类信息记录进查询日志文件。默认为OFF,表示不禁止记录功能。用户可以在会话级别修改此变量的值,但其必须具有SUPER权限。作用范围为全局和会话级别,属动态变量。

general_log_file=FILE_NAME

查询日志的日志文件名称,默认为“hostname.log",默认在数据目录。作用范围为全局,可用于配置文件,属动态变量。

2.3、慢查询日志

慢查询日志建议开启

与慢查询日志相关的变量:

slow_query_log={ON|OFF}

设定是否启用慢查询日志。0或OFF表示禁用,1或ON表示启用。日志信息的输出位置取决于log_output变量的定义,如果其值为NONE,则即便slow_query_log为ON,也不会记录任何慢查询信息。作用范围为全局级别,可用于选项文件,属动态变量。

log_slow_queries={YES|NO}

是否记录慢查询日志。慢查询是指查询的执行时间超出long_query_time参数所设定时长的事件。MySQL 5.6将此参数修改为了slow_query_log。作用范围为全局级别,可用于配置文件,属动态变量。

slow_query_log_file=/PATH/TO/SOMEFILE

设定慢查询日志文件的名称。默认为hostname-slow.log,,默认在数据目录,但可以通过--slow_query_log_file选项修改。作用范围为全局级别,可用于选项文件,属动态变量。

log_query_not_using_indexes={ON|OFF}

设定是否将没有使用索引的查询操作记录到慢查询日志。作用范围为全局级别,可用于配置文件,属动态变量。

long_query_time=#

设定区别慢查询与一般查询的语句执行时间长度。这里的语句执行时长为实际的执行时间,而非在CPU上的执行时长,因此,负载较重的服务器上更容易产生慢查询。其最小值为0,默认值为10,单位是秒钟。它也支持毫秒级的解析度。作用范围为全局或会话级别,可用于配置文件,属动态变量。

2.4、事务日志

事务日志文件名为"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

#事务日志组保存的镜像数

2.5、二进制日志

记录修改数据或有可能引起数据改变的MySQL语句

二进制日志格式:

a)、statement(语句)格式:数据量小,但在数据恢复时可能出现数据不一致

b)、row(行)格式:数据量大,但数据精确

c)、mixed(混合格式):交替使用statement和row,让mysql自己判断该使用哪一种

显示二进制日志相关语句:

mysql> SHOW {BINARY | MASTER} LOGS ; #显示当前mysql有哪些二进制日志文件
mysql> SHOW MASTER STATUS; #显示当前服务器所使用的二进制日志文件及所处的位置
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000021 |      311 |              |                  |
+------------------+----------+--------------+------------------+
mysql> SHOW BINLOG EVENTS [IN ‘log_name‘] [FROM pos] [LIMIT [offset,] row_count];  #读取二进制日志的事件详情
mysql> SHOW BINLOG EVENTS IN ‘mysql-bin.000021‘;
+------------------+-----+-------------+-----------+-------------+---------------------------------------------------------+
| Log_name         | Pos | Event_type  | Server_id | End_log_pos | Info                                                    |
+------------------+-----+-------------+-----------+-------------+---------------------------------------------------------+
| mysql-bin.000021 |   4 | Format_desc |         1 |         107 | Server ver: 5.5.36-log, Binlog ver: 4                   |
| mysql-bin.000021 | 107 | Query       |         1 |         213 | use `mydb2`; DROP TABLE `tb2` /* generated by server */ |
| mysql-bin.000021 | 213 | Query       |         1 |         311 | use `mydb2`; CREATE TABLE tb2 SELECT * FROM tb1         |
+------------------+-----+-------------+-----------+-------------+---------------------------------------------------------
mysql> SHOW BINLOG EVENTS IN ‘mysql-bin.000021‘ FROM 213; #指定位置
+------------------+-----+------------+-----------+-------------+-------------------------------------------------+
| Log_name         | Pos | Event_type | Server_id | End_log_pos | Info                                            |
+------------------+-----+------------+-----------+-------------+-------------------------------------------------+
| mysql-bin.000021 | 213 | Query      |         1 |         311 | use `mydb2`; CREATE TABLE tb2 SELECT * FROM tb1 |
+------------------+-----+------------+-----------+-------------+-------------------------------------------------+

在shell下也有相关的工具读取二进制日志文件,比在交互式环境读取的信息更可读:

[[email protected] ~]# mysqlbinlog /mydata/data/mysql-bin.000021

借助二进制日志文件和mysqlbinlog命令可实现数据的恢复操作,此命令常用的4个选项:

--start-datetime=#

表示二进制日志文件中一个事件的开始时间

--stop-datetime=#

表示二进制日志文件中一个事件的结束时间

--start-position=#

表示二进制日志文件中一个事件的开始位置

--stop-position=#

表示二进制日志文件中一个事件的结束位置

二进制日志文件安全的的删除方法(删除前请备份):

语法: PURGE { BINARY | MASTER } LOGS  { TO ‘log_name‘ | BEFORE datetime_expr }

mysql> SHOW BINARY LOGS;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |     27702 |
| mysql-bin.000002 |   1063490 |
| mysql-bin.000003 |       733 |
| mysql-bin.000004 |       150 |
| mysql-bin.000005 |       126 |
| mysql-bin.000006 |       126 |
| mysql-bin.000007 |       126 |
| mysql-bin.000008 |       126 |
| mysql-bin.000009 |       126 |
| mysql-bin.000010 |       126 |
| mysql-bin.000011 |       381 |
| mysql-bin.000012 |       126 |
| mysql-bin.000013 |      1625 |
+------------------+-----------+
mysql> PURGE BINARY LOGS TO ‘mysql-bin.000010‘;  #把此二进制日志文件之前的都删除
Query OK, 0 rows affected (0.04 sec)
mysql> SHOW BINARY LOGS;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000010 |       126 |
| mysql-bin.000011 |       381 |
| mysql-bin.000012 |       126 |
| mysql-bin.000013 |      1625 |

二进制日志相关变量:

log_bin={YES|NO}

是否启用二进制日志,如果为mysqld设定了--log-bin选项,则其值为ON,否则则为OFF。其仅用于显示是否启用了二进制日志,并不反应log_bin的设定值,即不反应出二进制日志文件存放的具体位置,在my.cnf中可定义。作用范围为全局级别,属非动态变量。值可与log_error一样值为一个路径,不要加后缀

log_bin = /mydata/data/mysql-bin

#定制二进制文件路径,不要加后缀

binlog_cache_size = 32768

#启动mysql服务器时二进制日志的缓存大小

binlog_format={ROW|STATEMENT|MIXED}

指定二进制日志的类型,5.5.31以前默认为STATEMENT,以后默认为MIXED。如果设定了二进制日志的格式,却没有启用二进制日志,则MySQL启动时会产生警告日志信息并记录于错误日志中。作用范围为全局或会话,可用于配置文件,且属于动态变量。

binlog_stmt_cache_size = 32768

#基于statement(语句)格式的缓存大小

expire_logs_days={0..99}

设定二进制日志的过期天数,超出此天数的二进制日志文件将被自动删除。默认为0,表示不启用过期自动删除功能。如果启用此功能,自动删除工作通常发生在MySQL启动时或FLUSH日志时。作用范围为全局,可用于配置文件,属动态变量。

max_binlog_cache_size{4096 .. 18446744073709547520}

二进定日志缓存空间大小,5.5.9及以后的版本仅应用于事务缓存,其上限由max_binlog_stmt_cache_size决定。作用范围为全局级别,可用于配置文件,属动态变量。

max_binlog_size={4096 .. 1073741824}

设定二进制日志文件上限,单位为字节,最小值为4K,最大值为1G,默认为1G。某事务所产生的日志信息只能写入一个二进制日志文件,因此,实际上的二进制日志文件可能大于这个指定的上限。作用范围为全局级别,可用于配置文件,属动态变量。

max_binlog_stmt_cache_size  = 18446744073709547520

#基于statement格式的二进制日志文件的最大缓存大小

sql_log_bin={ON|OFF}

用于控制二进制日志信息是否记录进日志文件。默认为ON,表示启用记录功能。用户可以在会话级别修改此变量的值,但其必须具有SUPER权限。作用范围为全局和会话级别,属动态变量。

sync_binlog=#

设定多久同步一次二进制日志至磁盘文件中,0表示不同步,任何正数值都表示对二进制每多少次写操作之后同步一次。当autocommit的值为1时,每条语句的执行都会引起二进制日志同步,否则,每个事务的提交会引起二进制日志同步。

在生产环境下建议不要把二进制日志文件与数据放在同一目录。

2.6、中继日志

在复制环境中产的的日志信息

与中继日志相关的变量:

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参数同时为二进制日志和中继日志设定日志文件体积上限。作用范围为全局级别,可用于配置文件,属动态变量。

时间: 2024-08-02 22:59:12

MySQL各种日志介绍的相关文章

MySQL数据库日志介绍

第1章 binlog日志 1.1 binlog日志介绍 MySQL的binlog日志作用是用来记录mysql内部增删改等对mysql数据库有更新的内容的记录(对数据库的改动),对数据库查询的语句如show,select开头的语句,不会被binlog日志记录.binlog日志只要用于数据库的增量恢复,以及主从复制. mysql数据目录下的如下文件就是mysql的binlog日志: [[email protected] ~]# ll /data/3306/ total 88 -rw-rw---- 1

MySQL二进制日志功能介绍

二进制日志记录所有更新数据的SQL语句,其中也包含可能更新数据的SQL语句,例如DELETE语句执行过程中无匹配的行.二进制日志中还包含了与执行SQL语句相关的内容,例如SQL语句执行的时间.错误代码等.  二进制日志功能介绍 MySQL中的二进制日志主要有两个功能:数据恢复和数据复制. 数据恢复--MySQL本身具备数据备份和恢复功能.例如我们可以每天午夜12:00进行数据备份.但是,此类备份功能并不是对数据库的实时备份,如果数据库在下午17:00出现故障无法恢复,那么从前一天午夜12:00到

mysql之general_log日志介绍

以下操作演示都是基于mysql5.6.36版本:工作中经常遇到这样的问题:mysql数据访问能量很大,想要从sql方面优化.研发经常会问到能看到哪些SQL执行比较频繁吗?能看到哪些SQL执行比较频繁吗?回道:不能哦,只能看到当前正在运行的SQL和慢日志里记录的SQL.因为为了性能考虑,一般general log不会开启.slow log可以定位一些有性能问题的sql,而general log会记录所有的SQL.然而有时候生产上的mysql出现性能问题,短时间开启general log,来回去sq

MySQL的日志原理

1.mysql日志概念 概念:日志文件(log)就是一个跟踪记录的列表,它可以协助我们时刻掌握系统及应用服务的动作状态,在故障排查的时候提供最详细准确地信息,帮助我们快速查找原因,减少我们凭主观的经验去猜测,这样的答案更具有说服力,机器通常是不会撒谎的. 1.1.如何开启mysql日志 1.1.1.确认日志是否启用 show globalvariables like '%log_bin%'; 如果启用了,即ON,日志文件就在MySQL的安装目录的data目录下,可以看出上面没有开启. Linux

MYSQL启用日志,查看日志

MYSQL启用日志,查看日志 MYSQL启用日志 [[email protected]]# whereis my.ini [[email protected]]# vi /etc/my.cnf [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # Default to using old password format for compatibility with mysql 3.x # cli

MySQL慢日志查询全解析:从参数、配置到分析工具【转】

转自: MySQL慢日志查询全解析:从参数.配置到分析工具 - MySQL - DBAplus社群——围绕数据库.大数据.PaaS云,运维圈最专注围绕“数据”的学习交流和专业社群http://dbaplus.cn/news-11-694-1.html 一.慢查询日志概念 MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中.long_query_time的默认值为

MySQL高级知识- MySQL的架构介绍

[TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性. Mysql是开源的,所以你不需要支付额外的费用. Mysql支持大型的数据库.可以处理拥有上千万条记录的大型数据库. MySQL使用标准的SQL数据语言形式. Mysql可以允许于多个系统上,并且支持多种语言.这些编程语言包括C.C+

MySQL二进制日志总结

二进制日志简单介绍 MySQL的二进制日志(binary log)是一个二进制文件,主要用于记录修改数据或有可能引起数据变更的MySQL语句.二进制日志(binary log)中记录了对MySQL数据库执行更改的所有操作,并且记录了语句发生时间.执行时长.操作数据等其它额外信息,但是它不记录SELECT.SHOW等那些不修改数据的SQL语句.二进制日志(binary log)主要用于数据库恢复和主从复制,以及审计(audit)操作. 官方文档关于二进制日志(binary log)的介绍如下: T

MySQL多实例介绍及安装

一.MySQL多实例介绍 (1)什么是MySQL多实例? 简单的说,就是在一台一台机器上开启多个不同的服务端口(如:3306,3307,3308)等,运行多个MySQL服务进程: 这些服务进程通过不同的socket监听不同的服务端口来提供各自的服务. 这些MySQL多实例公用一套MySQL安装程序,使用不同或相同的my.cnf配置文件,启动程序,数据文件.在提供服务时,多实例 MySQL在逻辑上看来试各自独立的多个实例的自身是根据配置文件对应的设定值:来取得服务器的相关硬件资源的多少. 做个比喻