MySQL都有哪些日志?分别都代表什么?

MySQL日志:主要包含:错误日志、查询日志、慢查询日志、事务日志、二进制日志、中继日志;

日志是mysql数据库的重要组成部分。日志文件中记录着mysql数据库运行期间发生的变化;也就是说用来记录mysql数据库的客户端连接状况、SQL语句的执行情况和错误信息等。当数据库遭到意外的损坏时,可以通过日志查看文件出错的原因,并且可以通过日志文件进行数据恢复。

错误日志

在mysql数据库中,错误日志功能是默认开启的。并且,错误日志无法被禁止。默认情况下,错误日志存储在mysql数据库的数据文件中。错误日志文件通常的名称为hostname.err。其中,hostname表示服务器主机名。

默认情况下错误日志大概记录以下几个方面的信息:服务器启动和关闭过程中的信息(未必是错误信息,如mysql如何启动InnoDB的表空间文件的、如何初始化自己的存储引擎的等等)、服务器运行过程中的错误信息、事件调度器运行一个事件时产生的信息、在从服务器上启动服务器进程时产生的信息。

记录如下几类信息:

(1) mysqld启动和关闭过程中输出的信息;

(2) mysqld运行中产生的错误信息;

(3) event scheduler运行时产生的信息;

(4) 主从复制架构中,从服务器复制线程启动或关闭时产生的日志;

日志存储位置:

log_error= /var/log/mariadb/mariadb.log | OFF 注:# 给出文件路径,直接表示on。

log_warnings={ON|OFF} # 把警告的信息也记录下来,记录到同一个文件当中

mysql>show global variables like ‘log_error%‘;
mysql>show global variables like ‘log_warnings%‘;
+---------------+------------------------------+
| Variable_name| Value             |
+---------------+------------------------------+
| log_error  | /var/log/mariadb/mariadb.log|
| log_warnings|  1              |
+---------------+------------------------------+

查询日志

  默认情况下查询日志是关闭的。由于查询日志会记录用户的所有操作,其中还包含增删查改等信息,在并发操作大的环境下会产生大量的信息从而导致不必要的磁盘IO,会影响mysql的性能的。如若不是为了调试数据库的目的建议不要开启查询日志。

日志存储位置:

文件:file     # 自己指定的文件日志

表:table (mysql.general_log)  # 数据库当听指定的数据日志表

desc general_log;  # 里的各个字段的信息

general_log={ON|OFF}   # 是否开启,默认是没有开启的

general_log_file=HOSTNAME.log   # 如果不手动指定文件路径的话,会自动在当前的目录下创建一个以主机名为文件名的日志文件  如: general_log_file   centos7.log

log_output={FILE|TABLE|NONE}  # 日志是记录到数据库当中还是以文件的方式存储

file:   文件有效,表无效

table:  表有效,文件无效

none:   两者都无效,就算上面开启了记录日志的功能,也是无效的

mysql>show global variables like ‘log_out%‘;
mysql>show global variables like ‘general%‘;
mysql>set @@global.general_log=on; # 修改全局变量值,也可以修改当前会话的值-->session
mysql>set @@global.log_output=‘table‘;
+------------------+-------------+
| Variable_name  | Value    |
+------------------+-------------+
| general_log   |  OFF    |
| general_log_file| centos7.log|
| log_output   | FILE    |
+------------------+-------------+

慢查询日志

慢查询日志是用来记录执行时间超过指定时间的查询语句。通过慢查询日志,可以查找出哪些查询语句的执行效率很低,以便进行优化。一般建议开启,它对服务器性能的影响微乎其微,但是可以记录mysql服务器上执行了很长时间的查询语句。可以帮助我们定位性能问题的。

慢查询:运行时间超出指定时长的查询;  # 默认为10s

long_query_time

日志存储位置:

文件:FILE

表:TABLE  - - > mysql.slog_log

log_slow_queries={ON|OFF}   # 是否启用

slow_query_log={ON|OFF}    # 是否启用,mariadb默认使用  注:会根据版本的不同来指定

slow_query_log_file=

log_output={FILE|TABLE|NONE}

log_slow_filter=admin,filesort,filesort_on_disk,full_join,full_scan,query_cache,query_cache_miss,tmp_table,tmp_table_on_disk

注:定义过滤器的,如上面,基于管理的、排序、磁盘排序、全连接、查询等等(默认值)

log_slow_rate_limit

log_slow_verbosity

+-----------------+-----------+
| Variable_name | Value   |
+-----------------+-----------+
| log_output   | FILE    |  
| long_query_time  | 10.000000   |  
| slow_query_log  | OFF     |
| slow_query_log_file  | centos7-slow.log |
| log_slow_queries   | OFF    |                                                                                                       |
| log_slow_rate_limit  | 1    |                                                                                                        |
| log_slow_verbosity  |    
| log_slow_filter    | admin,filesort,filesort_on_disk,full_join,full_scan,
query_cache,query_cache_miss,tmp_table,tmp_table_on_disk |                                   |
+-----------------+-----------+

事务日志

事务型存储引擎innodb用于保证事务特性的日志文件,存储引擎在修改表的数据时只需要修改其内存拷贝,再把改修改行为记录到持久在硬盘上的事务日志中,而不用每次都将修改的数据本身持久到磁盘。事务日志采用追加的方式,因此写日志的操作是磁盘上一小块区域内的顺序I/O,而不像随机I/O需要在磁盘的多个地方移动磁头,所以采用事务日志的方式相对来说要快得多。事务日志持久以后,内存中被修改的数据在后台可以慢慢的刷回到磁盘。目前大多数的存储引擎都是这样实现的,我们通常称之为预写式日志,修改数据需要写两次磁盘。

如果数据的修改已经记录到事务日志并持久化,但数据本身还没有写回磁盘,此时系统崩溃,存储引擎在重启时能够自动恢复这部分修改的数据。具有的恢复方式则视存储引擎而定。

日志存储位置:

innodb_log_files_in_group   # 至少要有2个

注:在数据库目录下 - -> ib_logfile0 、ib_logfile1

innodb_log_group_home_dir

innodb_log_file_size

innodb_mirrored_log_groups

注:能将信息存储的随机,变成顺序存储的一个过程(提升了读写性能),因为首先全部写入的事务日志,然后全部写入,并不是执行一个事务写入一次(数据存放的位置基于不固定)。

+---------------------------+---------+
| Variable_name         | Value  |
+---------------------------+---------+
| innodb_log_files_in_group | 2     |
| innodb_log_group_home_dir | ./    |
| innodb_mirrored_log_groups| 1     |
| innodb_log_file_size    | 5242880 |
+---------------------------+---------+

二进制日志

用于记录引起数据改变或存在引起数据改变的潜在可能性的语句(STATEMENT)或改变后的结果(ROW),也可能是二者混合;

功用:“重放”  # 读语句是不会记录的

二进制日志也叫作变更日志,主要用于记录修改数据或有可能引起数据改变的mysql语句,并且记录了语句发生时间、执行时长、操作的数据等等。所以说通过二进制日志可以查询mysql数据库中进行了哪些变化。

二进制日志中常用的定义格式:

log_bin=/PATH/TO/BIN_LOG_FILE # 最好放在其它目录、磁盘上,万一数据库崩了,还要依靠二进制日志恢复

session.sql_log_bin={ON|OFF}  # 是否开启二进制日志文件

max_binlog_size=1073741824   # 单位字节,单个文件最大值,超过自动滚动

sync_binlog={1|0}         # 是否做同步(数据从内存同步到磁盘)

binlog_format={STATEMENT|ROW|MIXED}

1、语句(statement):默认的记录格式;

2、行(row):定义的并非数据本身而是这一行的数据是什么;

3、混合模式(mixed):交替使用行和语句、由mysql服务器自行判断。

其中基于行的定义格式数据量会大一些但是可以保证数据的精确性。

示例格式:

# at 553

#160831  9:56:08 server id 1  end_log_pos 624  Query  thread_id=2  exec_time=0  error_code=0

SET TIMESTAMP=1472608568/*!*/;

BEGIN

/*!*/;

事件的起始位置:# at 553

事件发生的日期时间:#160831  9:56:08

事件发生的服务器id:server id 1   # 默认的都是1

事件的结束位置:end_log_pos 624

事件的类型:Query

事件发生时所在服务器执行此事件的线程的ID: thread_id=2

语句的时间戳与将其写入二进制日志文件中的时间差:exec_time=0    # 没有1秒都为0

错误代码:error_code=0

设定事件发生时的时间戳:SET TIMESTAMP=1472608568/*!*/;

事件内容:BEGIN

mysql>SHOW MASTER|BINARY LOGS;  # 查看所有二进制日志文件信息
mysql>SHOW MASTER STATUS;      # 查看当前的二进制日志文件信息(文件、节点位置)
mysql>SHOW BINLOG EVENTS IN ‘bin-log.000002‘;  # 查看某个二进制日志文件当中详细信息
[root-xdg]# mysqlbinlog -j 223  bin-log.000002  # bash当中查看二进制日志命令,文件路径

中继日志

当要使用主-从复制的时候,就要使用到中继日志了,它是从主数据库服务器上记录下来二进制日志文件,再同步到自己的数据库服务器上的中继日志文件,然而读取中继日志文当中的内容来进行同步的功能;

主数据库服务器:会开启一个dump-thread的进程来响应

从数据库服务器:会开启一个io-thread的进程来请求,通过SQL-thread来执行中继日志当中的信息同步到本地

日志存储位置:

 relay_log = /path/filename  # 在配置文件当中开启记录中继日志

server_id = 2  # 主-从配置的时候,分别指定不同的设备名

+-----------------------+----------------+
| Variable_name      | Value       |
+-----------------------+----------------+
| relay_log         | /app/relay-log |
| relay_log_index     |           |
| relay_log_info_file  | relay-log.info |
| relay_log_purge     | ON         |
| relay_log_recovery   | OFF        |
| relay_log_space_limit | 0          |
| server_id           | 2            |
+-----------------------+----------------+

原文地址:http://xddggg.blog.51cto.com/13290981/1981023

时间: 2024-11-05 13:38:14

MySQL都有哪些日志?分别都代表什么?的相关文章

学会读懂 MySql 的慢查询日志

在前边的博客<何时.怎样开启 MySql 日志?>中,我们了解到了怎样启用 MySql 的慢查询日志. 今天我们来看一下怎样去读懂这些慢查询日志.在跟踪慢查询日志之前.首先你得保证最少发生过一次慢查询.假设你没有能够自己制造一个:[email protected]# mysql -e 'SELECT SLEEP(8);上述操作所做的事情仅仅有一个:"睡"(啥也不做)八秒.这个长度应该足以被记录在你的慢查询日志里了(我通常推荐针对长于 2 或 3 秒的查询进行慢查询记录).首

Mysql数据库之Binlog日志使用总结

binlog二进制日志对于mysql数据库的重要性有多大,在此就不多说了.下面根据本人的日常操作经历,并结合网上参考资料,对binlog日志使用做一梳理: 一.binlog日志介绍1)什么是binlogbinlog日志用于记录所有更新了数据或者已经潜在更新了数据(例如,没有匹配任何行的一个DELETE)的所有语句.语句以"事件"的形式保存,它描述数据更改. 2)binlog作用因为有了数据更新的binlog,所以可以用于实时备份,与master/slave主从复制结合. 3)和binl

《Mycat学习笔记》 第二篇. MySql 读写分离与日志分析——主从多结点

1    环境说明 接上篇环境   <Mycat学习笔记> 第一篇. MySql 读写分离与日志分析——主从单结点 http://www.cnblogs.com/kaye0110/p/5134588.html 增加一套 mysql 实例,端口为3308 ,通过Binlog方式同步主机情况 localhost : 3306 主机,    在mycat 中配置为 writehost 1 localhost : 3307 从机 a ,在mycat 中配置为 readhost localhost :

Mysql主从复制、二进制日志、基于GTID的主从复制、双主复制

 一.主从复制的工作原理   Mysql在Master与slave之间实现整个复制的过程由3个线程来完成的,   其中两个线程(SQL线程和IO线程)在 Slave端,   另外一个线程(IO)在Master端   要实现Mysql的复制必须首先打开Master端的binary log(也就是二进制日志)否则无法实现. Mysql复制基本过程如下:   (1)Slave上面的IO 线程链接上Master,并且请求指定日志文件的位置(或者 从开始的日志之后的日志内容)   (2)Master接收到

如何在MySql中记录SQL日志

SQL server有一个sql profiler可以实时跟踪服务器执行的SQL语句,这在很多时候调试错误非常有用.例如:别人写的复杂代码.生产系统.无调试环境.无原代码... ... 查了一下资料,My SQL可以用下面方法跟踪sql 语句,以下方法以Windows平台为例,linux雷同: 1  配置my.ini文件(在安装目录,linux下文件名为my.cnf 查找到[mysqld]区段,增加日志的配置,如下示例: [mysqld]log="C:/temp/mysql.log"l

重新学习MySQL数据库10:MySQL里的那些日志们

重新学习MySQL数据库10:MySQL里的那些日志们 同大多数关系型数据库一样,日志文件是MySQL数据库的重要组成部分.MySQL有几种不同的日志文件,通常包括错误日志文件,二进制日志,通用日志,慢查询日志,等等.这些日志可以帮助我们定位mysqld内部发生的事件,数据库性能故障,记录数据的变更历史,用户恢复数据库等等.本文主要描述错误日志文件. 1.MySQL日志文件系统的组成 a.错误日志:记录启动.运行或停止mysqld时出现的问题. b.通用日志:记录建立的客户端连接和执行的语句.

一切都是问题,一切都着落在自身

生活中经常遇到同学问这类问题:      这种方法行不行?你觉得这种方法可以吗?      特别是问一些其实是可以通过自己实际操作(或搜索)就可得到答案的问题,你会觉得很郁闷. 当然细想下来自己曾经也经常犯这类毛病,问一些明明可以通过实际操作或搜索得到答案的问题. 可是为什么会犯这类毛病呢? 1.没有意识自己去尝试 其实有的时候,你也很无语,为什么一遇到之前没遇到过的问题就自然而然的问他人,而不尝试先自己解决一下呢. 为什么?因为没有养成自己去尝试解决问题的意识.这么说吧,一遇到新问题就向他人请

mysql开启慢查询日志及验证过程

mysql慢查询 1.慢查询作用? 它能记录下所有执行超过long_query_time时间的sql语句,帮你找到执行慢的sql,方便我们对这些sql语句进行优化. 2.如何开启慢查询? 首先我们先查看mysql服务器的慢查询状态是否开启. 执行如下指令: 我们可以看到log_slow_queries状态为ON,说明当前已经开启慢查询.如果没有开启,进行如下操作: 方法一:找到mysql的配置文件my.cnf(/etc/my.cnf),在mysqld下方加入慢查询的配置语句(注意一定要在[mys

mysql 通过慢查询日志查写得慢的sql语句

MySQL通过慢查询日志定位那些执行效率较低的SQL 语句,用--log-slow-queries[=file_name]选项启动时,mysqld 会写一个包含所有执行时间超过long_query_time 秒的SQL语句的日志文件,通过查看这个日志文件定位效率较低的SQL . 慢查询日志在查询结束以后才记录,所以在应用反映执行效率出现问题的时候查询慢查询日志并不能定位问题,可以使用show processlist命令查看当前MySQL在进行的线程,包括线程的状态.是否锁表等,可以实时地查看SQ

rsyslog+mysql+loganalyzer 环境搭建日志服务器

环境:CentOS6.6 rsyslog+mysql+loganalyzer 环境搭建日志服务器 Client端:    192.168.2.10 MySQL服务器:  192.168.2.11 # Client端安装必备的软件包 yum install rsyslog-mysql -y 生成了2个文件: /lib64/rsyslog/ommysql.so           #rsyslog支持数据库的模块文件 /usr/share/doc/rsyslog-mysql-5.8.10/creat