(3.12)mysql基础深入——mysql日志文件/其他文件(socket/pid/表结构/Innodb)

关键词:mysql日志文件,mysqldumpslow分析工具

目录:日志文件的分类

  1、错误日志(error log)

  2、二进制日志(binlog):mysqlbinlog分析查看工具

  3、慢查询日志(show query log):mysqldumpslow分析工具

  4、通用日志(general log)

  5、重做日志(redo log)

  6、中继日志(relay log)

  7、DDL日志(ddl log)

  8、其他文件(socket/pid/表结构/Innodb)

详情:

1、错误日志(error log)

  1. 1.1】查看错误日志是否启用
    mysql> show variables like 'log_err%';
  2.  
  3. 1.2】配置文件设置
    [mysqld]
  4. log-error=[path/[file_name]]
  5.  
  6. 1.3】重建错误日志文件(如果日志文件不存在,mysql启动或者执行flush logs时会创建新的日志文件)
  7.  
  8. 1mysqladmin -u root -p flush-logs
    2mysql> flush logs;

  【1】概念:mysql启动、运行、关闭过程的记录,记录错误、警告、正常的信息。-- 相当于oracle的alert日志

  【2】参数查看:show variables like '%log_error%';

    

    解析:log_error_verbosity :(1)只记录错误日志  (2)记录错误+警告信息  (3)记录错误+警告+正常信息

  【3】linux系统异常日志:/var/log/messages

2、二进制日志(binlog)

  

  1. 2.1】# 查看二进制文件
    mysql> show variables like 'log_bin%'; #查看是否启用
    mysql> show binary logs; #查看二进制文件个数及名称
  2.  
  3. 2.2】配置文件设置
    [mysqld]
  4. log-bin = PATH/[FILENAME] #这里定义的只是一个索引文件,例如这里给/log/binlog,那么会生成binlog.index,而实际存放数据是类似于binlog.00001 之类的,超出范围会继续新建binlog.00002,以此类推
  5. expire_logs_days=10     #清除binlog文件中超过10天的内容,默认值为0,表示“没有自动删除”。当mysql启动或刷新二进制日志时可能删除该文件
  6. max_binlog_size=100M    #单个binlog文件的最大容量,如果有大事务运行,运行到一半binlog到达最大值了这个时候不会立马新建,而是会持续写到这个文件里,所以有binlog超出该值也正常。
  1. #常用实践:
    [mysqld]
  2. server_id=3306 #服务ID,主从必须不一致。(建议数字:ip+端口) 5.7.3以后版本,必须加
  3. #目录必须存在且授权好,binlog为索引文件,实际文件会自动根据索引文件建立如binlog.0000001
  4. log_bin=/mysql/log/3306/binlog
    sql_log_bin=on #开启binlog,如果用了log_bin配置,会自动开启
  5. log_bin_index=/mysql/log/3306/binlog.index   #不设置的话,会根据log_bin值名称自动生成binlog.index
  6. binlog_format='row' #(row,statement,mixed) #3种模式
  7. binlog_rows_query_log_events=on #打开才能查看详细记录
    expire_logs_days=10 #超过10天的数据会被认定为过期,且会被清理
    max_binlog_size=100M #表示单个二进制文件的最大值为100M,如果有大事务可能会超出最大值
    binlog_row_image=full #(full,minimal,noblob),分别表示binlog中内容全记录,只记录被操作的,和不记录二进制
  8.  
  9. 2.2.1flush disk相关的
  1. binlog流程如下:
    # 数据操作buffer pool > binlog buffer > file system buffer > commit > binlog file
    在写binlog file之前,commit3种模式,分别是:0,1N
    sync_binlog=0:mysql不会主动同步Binlog内容到磁盘文件中,而是依赖操作系统刷新文件的机会刷binlog file.一般是1S/次
    sync_binlog=1:默认值,mysql主动刷新file system buffer到磁盘上的binlog file中,每1commit,就主动fsync一次。
    sync_binlog=N:非01mysql主动刷新file system buffer到磁盘上的binlog file中,每Ncommit,就主动fsync一次。
  2.  
  3. 2.2.2】数据库先写redo log还是先写binlog?
    答案:先写redo LOG,再写binlog。如果2个有任一失败,就会回滚。
    sync_binlog配合另一个参数innodb_flush_log_at_trx_commit;
    如果都是1,数据库挂了以后,最多只丢一条一句或一个事务的数据;
    show variables like 'innodb_flush_log_at_trx_commit';
    但会影响性能,只能说在数据要求非常高的场景下使用。
  1.  
  2. 2.3】删除二进制文件
    2.3.1】一般形式
    PURGE MASTER LOGS;
    PURGE {MASTER | BINARY} LOGS TO 'log_name' #删除log_name 之前建立的文件,不包含该文件
    PURGE {MASTER | BINARY} LOGS BEFORE 'date' #删除某个时间之前的所有文件内容,不包含该天
    2.3.2】删除所有二进制文件
    RESET MASTER; #执行该语句,所有二进制日志将被删除,mysql 会重新创建二进制日志,新的日志文件扩展名将重新从000001开始编号
  3.  
  4. 2.4】阅读查看二进制文件
    mysqlbinlog /log/binlog.00001 > /tmp/binlog1.log
  1. 2.5binlog恢复数据
  1. mysqlbinlog恢复数据的语法如下:
  2.  
  3. mysqlbinlog [option] filename |mysql -uuser -ppass
  4. option是一些可选项,filename是日志文件名
  5.  
  6. 比较重要的两对option参数是
  7.  
  8. --start-datetime、--stop-datetime
  9.  
  10. --start-position、--stop--position
  11.  
  12. --start-date、--stop-date可以指定恢复数据库的起始时间点和结束时间点
  13.  
  14. --start-position、--stop--position可以指定恢复数据的开始位置和结束位置
  15.  
  16. 使用mysqlbinlog恢复mysql数据库到20147215::48时的状态,执行下面命令
  17.  
  18. mysqlbinlog --stop-datetime="2014-7-2 15:27:48 " D:\mysql\log\binlog\binlog. |mysql -u user -p password
  19. 该命令执行成功后,会根据binlog.000008日志文件恢复20147215::48前的所有操作。
  20.  
  21. 这种方法对误操作的删除数据比较有效

  【1】概念:记录数据库发生更改的SQL语句,以二进制方式保存在磁盘中。--相当于Oracle的归档日志

  【2】作用:备份恢复、复制、审计

  【3】特点:

    (1)记录是SQL语句的形式

    (2)commit提交的时候才写binlog,提交之前写binlog_buffer,提交时才回写到binlog日志文件。

        binlog不会被覆盖,会一直存在(但可以设置保留多场时间的数据,可清多少天之前的数据清理) 

    (3)对所有表起作用

  【4】查看:mysqlbinlog -vv [binlog_filename]

3、慢查询日志(slow query log)

  1. 3.1】查看慢查询日志路径与开启
  2. show variables like 'slow_query%';
  3.  
  4. 3.2】配置文件参数(下面选其一)
  5. [mysqld]
  6. log-slow-queries=[path/[filename]] #开启慢查询并指定日志文件
  7. long_query_time=n #超过n秒的查询记录到慢查询日志中,为0则记录所有查询
  8. [mysqld]
  9. ###***logs
  10. long_query_time = #慢查询判断时间/s,为0记录所有查询
  11. slow_query_log = #是否开启1开启0关闭
  12. slow_query_log_file=/mysql/slow.log #开启后指定日志文件路径
  13.  
  14. 3.3】文件内容释义
    #time:2019-03-20T00:14:20+08:00
    #User@Host:root[root]@[10.10.10.11] ID:4
    #Query_time:0.01 这条SQL执行总时间,locak_time:0.001,锁等待时间
    #Row_sent:10 这条SQL返回给用户有几条数据 Rows_examined:109,这条SQL一共检查扫描处理了多少行数据。
  15.  
  16. 3.4】慢查询的原因
    1lock_time锁等待时间太长  (2examined处理的数据太多
  17.  
  18. 3.5】相关参数:
    1log_queries_not_using_indexes:默认值off,当off时,表示如果使用了索引,就算慢,也不会记录日志。建议on
    2log_throttle_queries_not_using_indexes:默认值0,即默认1分钟刷一次。表示每1分钟记录下所有未使用索引的SQL5.6以后才有此参数)。建议10分钟以上
    3log_output:默认是文件(FILE值),还有一个值是table
  19.  
  20. 3.6】如何分析查看是否有使用索引?
    使用执行计划(1desc select……   (2)explain select……
  21.  
  22. 3.7】慢查询日志分析工具(mysql自带)
    mysqldumpslow /mysql/slow_query.log
    使用 mysqldumpslow --help 查看使用方式
    常用核心参数
  1. 3.7.】-s ORDER what to sort by (al, at, ar, c, l, r, t), 'at' is default
  2. al: average lock time
  3. ar: average rows sent
  4. at: average query time
  5. c: count
  6. l: lock time
  7. r: rows sent
  8. t: query time
  9.  
  10. 3.7.】-t NUM just show the top n queries
  11. 3.7.】-g PATTERN grep: only consider stmts that include this string
    3.7.4
    1)举例取慢查询日志文件中锁定时间最长的10SQL
      mysqldumpslow -s al -t 10 /mysql/slow_query.log
    2)获取慢查询日志文件中平均用时最长的包括right join10SQL
      mysqldumpslow -s at -t 10 -g "right join" /mysql/slow_query.log

  【3.8】删除慢查询日志

    (1)mysqladmin -u root -p flush logs  (2)mysql> flush logs;

  【3.9】注意事项

  记住,慢查询日志只会记录已经查询完的SQL语句,正在执行的不会被记录;

【3.10】MySQL的slow log中Query_time包含了Lock_time吗?

首先先给出结论,Query_time包含了Lock_time

下面给出slow log的头部示例:
# Time: 2019-10-08T08:46:34.635823Z
# User@Host: root[root] @ localhost [] Id: 16
# Query_time: 0.064742 Lock_time: 0.000460 Rows_sent: 1 Rows_examined: 9997

其中:
1、Query_time为SQL的消耗时间
2、Lock_time为锁等待的时间,包括行锁、MDL锁等
3、是否记录slow log的判定条件为SQL的实际执行时间(Query_time - Lock_time)是否超过long_query_time或者是否开启log_queries_not_using_indexes

 

4、通用日志(general log)

记录数据库的所有操作,任何情况下都不建议开启

  1. 4.1】查看通用日志
    mysql> show variables like '%general%'
  2.  
  3. 4.2】配置文件设置
    [mysqld]
  4. log[=path/[filename]] #可以指定通用日志文件,也可以只写一个log(默认路径)
  5.  
  6. 4.3】查看内容

  

5、重做日志(redo log)(深入了解参考:https://www.cnblogs.com/f-ck-need-u/archive/2018/05/08/9010872.html)

  1. 5.1】作用
      mysql数据库挂了之后,通过redo log + 旧的数据块 进行数据前滚,再undo进行回滚保障数据一致性
  2.  
  3. 5.2】特点
    1mysql数据库记录dml操作,redo log是循环的,能保障脏页没有写磁盘上时,对应的redo log不会被覆盖。
    2mysql里的redo log只能用于崩溃恢复
    3)只针对innodb的表起作用
  4.  
  5. 5.3log buffer => log file 触发机制
    1)强制每1s写一次。
    2)大于log buffer空间1/2的时候
    3commit的时候
    4log buffer写到1M的时候
    5)日志先写机制,后台的脏页写磁盘之前,就先把日志写过来。
  6.  
  7.  innodb_flush_log_at_trx_commit =1 #innodb每次提交事务redo buffer 刷新到redo log
     innodb_doublewrite =on #开启innodb特性“二次写”
  8.  
  9. 5.4】查看物理文件位置

  

  即为datadir目录牟其中ib_logfile0/ib_logfile1为redo log file,ibdata1为 undo log file

  

  1.  

6、中继日志(relay log)

  1. 6.1】概念
  2.  
  3.   与二进制日志有些相似,用于存取从服务器的IO线程接受来自主服务器发来的变更日志。一般用于主从复制。
  4.  
  5. 6.2】查看
    show variables like '%relay%';  

  

  1.  

7、DDL日志(ddl log)

  

  1. 7.1】概念
      记录元数据变更的操作(DDL操作)
  2.  
  3. 7.2】文件
      ddl_log.log
    #为了在DDL崩溃后恢复,以二进制方式存取,不可读,文件大小最大约4G,大约100W行数据。
    #如果慢了后要清理,否则就不能再运行别的DDL语句。

8、其他文件(socket/pid/表结构/Innodb)

【8.1】socket 套接字文件

  【8.1.1】组成:ip+端口(本地IP:port,远程IP:port)    

  【8.1.2】进行网络通信必须5种信息:协议、本地IP、本地协议端、远程IP、远程协议端口

  【8.1.3】查看定义:show variables like '%socket%';

  【8.1.4】如果主机上有多个实例,通过连接socket可以连接相应实例

      如:mysql -uroot -p -S /mysql/data/3306/mysql.sock

  【8.1.5】建立连接的大致过程

    (1)建立socket套接字

    (2)给socket套接字赋予地址

    (3)建立socket连接

  【8.1.6】配置文件

    [mysqld]

    socket = [path/file_name]

【8.2】pid文件

  【8.2.1】查看

  show variables like '%pid%';(每次启动都会去写入pid文件)

【8.3】表结构文件

  innodb:二进制形式文件(1).frm为表定义 信息  (2).ibd 表的数据和索引信息

    MyISAM:(1).frm 为表定义信息   (2).MYD 为表数据文件  (3).MYI 为表索引文件

【8.4】innodb存储引擎相关的文件

  【8.4.1】表空间文件:数据文件、临时文件;

      独立表空间设置参数:show variables like 'innodb_file_per_table';

      (1)参数为 off/0,就是共享表空间。所有的库/表数据都放在一个或几个文件  

      (2)参数为on/1,就是独立表空间。每一个表都有自己的表空间(即每个表都有独立的文件)

  【8.4.2】数据文件与临时文件

      show variables like '%innodb%data%';

      如图:

      (1)临时文件:innodb_data_file_path 。如下图,这里没有路径,那么默认就在datadir下。

      (2)临时文件

      

  【8.4.3】配置文件

      [mysqld]

      innodb_data_file_path=ibdata1:1G:autoextend:max:5G

      innodb_temp_data_file_path = ibtemp1:200M:autoextend:max:10G

【8.5】redo文件与undo文件

  【8.5.1】查看

    (1)redo:show variables like '%innodb_log%';

        

        选中的行是存放位置,./  就是datadir;

    (2)undo:show variables like '%innodb_undo%';
        

      同上。

【8.6】其他文件总结,所有文件几乎都在配置文件里配置了。

但是undo与redo一般情况下是默认的。

  

如图:

【1】ib_logfile0/ib_logfile0 :为redo文件。

【2】ibtemp1:为Innodb临时文件

【3】ibdata1:为Innodb共享表空间、原数据文件、undo日志、double write 存放

【4】ib_buffer_pool:innodb缓存池预热保存文件

(3.12)mysql基础深入——mysql日志文件/其他文件(socket/pid/表结构/Innodb)的更多相关文章

  1. (3.11)mysql基础深入——mysql文件分类与配置文件管理

    (3.11)mysql基础深入——mysql文件分类与管理 关键词:mysql配置文件,mysql参数文件,mysql中的my.cnf 目录:mysql数据库文件分类: [1]参数文件:my.cnf ...

  2. (3.14)mysql基础深入——mysql 日志分析工具之pt-querty-digest【待完善】

    (3.14)mysql基础深入——mysql 日志分析工具之pt-querty-digest 关键字:Mysql日志分析工具.mysqlsla 常用工具 [1]mysqldumpslow:官方提供的慢 ...

  3. (3.13)mysql基础深入——mysql日志分析工具之mysqlsla【待完善】

    (3.13)mysql基础深入——mysql 日志分析工具之mysqlsla 关键字:Mysql日志分析工具.mysqlsla 常用工具 [1]mysqldumpslow:官方提供的慢查询日志分析工具 ...

  4. (3.15)mysql基础深入——mysql默认数据库/系统数据库

    (3.15)mysql基础深入——mysql默认数据库 关键词:Mysql默认数据库,mysql系统数据库 系统数据库的组成 一共4个 [1]information_schema(可以理解成字典表) ...

  5. (3.16)mysql基础深入——mysql字符集

    (3.16)mysql基础深入——mysql字符集 关键字:mysql字符集,mysql编码 目录 1.概念 2.常用的字符编码 3.查看mysql字符集 [3.1]查看服务器支持的字符集 [3.2] ...

  6. (3.4)mysql基础深入——mysql.server启动脚本源码阅读与分析

    (3.4)mysql基础深入——mysql.server启动脚本源码阅读与分析 my.server主要分为3大部分 [1]变量初始化部分 [2]函数声明部分 [3]具体执行部分 #!/bin/sh # ...

  7. (3.2)mysql基础深入——mysql源码阅读工具安装与应用

    (3.2)mysql基础深入——mysql源码阅读工具安装与应用 关键字:mysql源码阅读工具 工具列举:一般多用[1][2][3]吧 [1]source insight [2]写字板/记事本 UE ...

  8. (3.1)mysql基础深入——mysql二进制与源码目录结构介绍

    (3.1)mysql基础深入——mysql二进制与源码目录结构介绍 关键字:二进制目录结构,源码目录结构(编译安装目录结构) 1.二进制安装程序目录结构 [1] BIN -- mysql的可执行文件( ...

  9. MySQL基础、MySQL安装和MariaDB安装

    MySQL基础 目录 MySQL基础 关系型数据库介绍 数据结构模型 RDBMS专业名词 关系型数据库的常见组件 SQL语句 MySQL安装与配置 MySQL安装 MariaDB安装 关系型数据库介绍 ...

随机推荐

  1. PyQt4程序图标

    程序图标就是一个小图片,通常显示在程序图标的左上角(ubuntu gnome在最上侧). #!/usr/bin/python # -*- coding:utf-8 -*- import sys fro ...

  2. Linux虚拟机下mysql 5.7安装配置方法图文教程

    一. 下载mysql5.7 http://mirrors.sohu.com/mysql/MySQL-5.7/ Linux下载: 输入命令:wget http://mirrors.sohu.com/my ...

  3. linux-find【递归搜索文件名】

    1 命令格式: $ find <指定目录> <指定条件> <指定动作>   最常见示例:查找文件名(忽略大小写) $find . -iname sqlquery.j ...

  4. luanet性能测试

    测试环境 intel-i5 双核 2.53HZ 服务器客户端均在本机运行 测试内容:echo回射,每个包的字节数在20字节内 luanet 连接数 每秒回射数 1 19,000/s 10 12,500 ...

  5. 【技术分享会】 @第五期 angularjs

    前言 AngularJS 最初由Misko Hevery 和Adam Abrons于2009年开发,后来成为了Google公司的项目.AngularJS弥补了HTML在构建应用方面的不足,其通过使用标 ...

  6. Node.js- sublime搭建node的编译环境

    自动配置: 1.安装package control(见 http://www.cnblogs.com/padding1015/p/7763014.html) 2.sublime编辑器中,按快捷键:ct ...

  7. 跟我一起写Makefile:使用函数

    跟我一起写Makefile:使用函数 两个排版不一样 书籍下载 书籍下载

  8. Javascript 变态题解析

    读者可以先去做一下感受感受. 当初笔者的成绩是 21/44... 当初笔者做这套题的时候不仅怀疑智商, 连人生都开始怀疑了.... 不过, 对于基础知识的理解是深入编程的前提. 让我们一起来看看这些变 ...

  9. 关于Virtual Box虚拟机里的系统不能启动的解决方法

    当我们的虚拟机在非正常关闭后,再次启动机器时,Virtual Box会出现 Runtime error opening 'C:\Users\admin\VirtualBox VMs\Windows S ...

  10. iOS教程:Core Data数据持久性存储基础教程

    目录[-] 创建Core Data工程 创建数据模型 测试我们的数据模型 来看看SQL语句的真面目 自动生成的模型文件 创建一个表视图 之后看些什么? 就像我一直说的,Core Data是iOS编程, ...