Jusene's Blog

mysql 日志管理

字数统计: 961阅读时长: 3 min
2017/06/12 Share

mysql 日志

mysql日志是管理mysql的重要一环,需要mysql功能都是通过日志来进行工作的,常被用的日志文件如下:

  • 查询日志:query log
  • 慢查询日志:slow query log
  • 错误日志:error log
  • 二进制日志:binary log
  • 中继日志:relay log
  • 事务日志:transaction log

查询日志

查询日志即对数据进行的查询(Query)操作,此日志一般不要开启,避免无谓的io浪费。

记录查询操作可以是文件和表,受如下常用的数据库变量控制:
general_log=ON|OFF #控制是否开启查询日志
general_log_file=HOSTNAME.log #查询日志的文件格式
log_output=TABLE|FILE|NONE #查询日志输出的存储单元

慢查询日志

查询时长超过指定时长的查询操作,建议开启,并根据实际业务需求设定查询超时时间,以便作出分析。

自定义查询时长记录慢查询日志的变量:long_query_time

slow_query_log=ON|OFF #控制是否开启慢查询日志
slow_query_log_file=HOSTNAME-slow.log #慢查询日志文件命名格式
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=1 #慢查询记录速率
log_slow_verbosity #慢查询日志的详细级别

错误日志

错误日志主要记录以下的过程中产生的日志:

  • mysqld启动和关闭过程中输出的事件信息
  • mysqld运行中产生的错误信息
  • event scheduler运行一个event时产生的日志信息
  • 在主从复制架构中的从服务器上启动从服务器线程时产生的信息

log_error=/PATH/TO/LOG_ERROR_FILE
log_warnings=1|0 是否记录警告信息至错误日志文件中

二进制日志

必须开启,为了可以还原数据及错误重复等一系列分析操作,这个日志的产生为导致数据改变或潜在导致数据改变的sql语句。
核心功能:用于通过重放的机制来生成数据的文件副本

show {binary|master} logs: 查看mariadb自行管理使用的二进制日志文件列表
show master status: 查看使用中的二进制日志文件
show binary events [in ‘log_name’] [form pos] [limit [offset,] row_count] 查看二进制日志

二进制日志记录格式:

  • 基于‘语句’记录:statement
  • 基于‘行’记录:row
  • 混合模式:mixed,让系统自动判定该基于哪种方式进行

服务器变量:
log_bin=ON|OFF:
sql_log_bin=ON|OFF:是否记录二进制日志
log_bin=/PATH/TO/BIN_LOG_FILE:记录的文件位置,通常为OFF
binlog_format=STATEMENT|ROW|MIXED: 二进制日志记录的格式
max_binlog_size= 单个二进制日志文件的最大体积,默认1g:
注意:(1)到达最大值会自动滚动(2)文件达到上限时的大小未必为指定的精确值

sync_binlog=1|0: 设定是否启动二进制日志同步功能

mysqlbinlog:客户端命令工具
mysqlbinlog [options] log_file
–start-position
–stop-position

–start-datetime YYYY-MM-DD hh:mm:ss
–stop-datetime YYYY-MM-DD hh:mm:ss

二进制日志事件的格式

1
# at 4
2
#170524 15:00:36 server id 1  end_log_pos 431 Query  thread_id=1 exec_time=0 error_code=0
3
use `mydb`/*!*/;
4
SET TIMESTAMP=1446712300/*!*/;
5
CREATE TABLE tb1 (id int,name char(20))
6
'/*!*/;
  • 事件发生的日期和时间:170524 15:00:36
  • 事件发生的服务器标识:server id 1
  • 事件结束的位置:end_log_pos 106
  • 事件的类型:Query
  • 事件发生时所在服务器执行此事件的线程的ID:thread_id=1
  • 语句的时间戳与将其写入二进制文件中的事件差:exec_time=0
  • 错误代码:error_code=0
  • 事件内容:

中继日志

复制架构中,从服务器用于保存从主服务器的二进制日志中读取到的事件。

事务日志

事务日志存储引擎自行管理和使用

CATALOG
  1. 1. mysql 日志
    1. 1.1. 查询日志
    2. 1.2. 慢查询日志
    3. 1.3. 错误日志
    4. 1.4. 二进制日志
    5. 1.5. 中继日志
    6. 1.6. 事务日志