事务日志

redo log

mysql的innodb引擎在开启事务后,中间的操作都会先在内存中进行。然后将这些数据先写入到redo log中--“日志先行”(Write-Ahead Logging),因为写入到rero log是磁盘某块区域的顺序写入,所以效率更高。事务提交后也不一定就立刻将redo日志里的数据写入磁盘,一般是慢慢刷新分批写入到磁盘,减轻数据库压力。如果数据库崩溃或者机器宕机,系统重启或恢复的时候,可以根据redo log中的日志信息,将已完成的事务操作写入到数据库中,而对未完成的事务则进行回滚。

undo log

uodo log只有负责数据的回滚,一般保存的是事务执行操作的前的状态。

相关变量

mysql> show variables like '%innodb_log%';

+------------------------------------+----------+

| Variable_name | Value |

+------------------------------------+----------+

| innodb_log_buffer_size | 16777216 |

| innodb_log_checksums | ON |

| innodb_log_compressed_pages | ON |

| innodb_log_file_size | 50331648 | #单个日志文件的大小

| innodb_log_files_in_group | 2 | #日志个数

| innodb_log_group_home_dir | ./ | #事务日志路径

| innodb_log_spin_cpu_abs_lwm | 80 |

| innodb_log_spin_cpu_pct_hwm | 50 |

| innodb_log_wait_for_flush_spin_hwm | 400 |

| innodb_log_write_ahead_size | 8192 |

+------------------------------------+----------+

10 rows in set (0.00 sec)

mysql> show variables like '%innodb_flush_log%';

+--------------------------------+-------+

| Variable_name | Value |

+--------------------------------+-------+

| innodb_flush_log_at_timeout | 1 |

| innodb_flush_log_at_trx_commit | 1 | #事务提交策略,建议修改为2

+--------------------------------+-------+

2 rows in set (0.00 sec)

错误日志

记录mysqld启动,运行和结束中输出的错误或警告信息

相关变量

mysql> show variables like 'log_error%';

+----------------------------+----------------------------------------+

| Variable_name | Value |

+----------------------------+----------------------------------------+

| log_error | /var/log/mysqld.log | #错误日志存放路径

| log_error_services | log_filter_internal; log_sink_internal |

| log_error_suppression_list | |

| log_error_verbosity | 2 | #mysql5.7.2后出现的系统变量,代替原来的log_warnings,错误日志的详细等级,数值越高越详细,注意:mysql 8.0,3之后版本已经移除了log_warnings变量。

+----------------------------+----------------------------------------+

4 rows in set (0.00 sec)

通用日志

记录客户端对数据库的各种操作,包括sql语句执行记录等。

相关变量

mysql> show variables like 'general_log%';

+------------------+----------------------------+

| Variable_name | Value |

+------------------+----------------------------+

| general_log | OFF | #默认未启用状态

| general_log_file | /var/lib/mysql/centos7.log | #日志存放路径

+------------------+----------------------------+

2 rows in set (0.00 sec)

mysql> show variables like 'log_output';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| log_output | FILE | #日志存放类型,有none,file,table三种类型。

+---------------+-------+

1 row in set (0.00 sec)

慢查询日志

记录执行时间超过long_query_time变量设置时间的查询,也可以记录一些没有使用索引的sql。

相关变量

mysql> show variables like 'slow_query%';

+---------------------+---------------------------------+

| Variable_name | Value |

+---------------------+---------------------------------+

| slow_query_log | OFF | #默认未开启

| slow_query_log_file | /var/lib/mysql/centos7-slow.log | #日志存放路径

+---------------------+---------------------------------+

2 rows in set (0.01 sec)

mysql> show variables like 'long_query%';

+-----------------+-----------+

| Variable_name | Value |

+-----------------+-----------+

| long_query_time | 10.000000 | #超过这个时长的查询将会被记录

+-----------------+-----------+

1 row in set (0.00 sec)

mysql> show variables like 'log_queries%';

+-------------------------------+-------+

| Variable_name | Value |

+-------------------------------+-------+

| log_queries_not_using_indexes | OFF | #开启此项后,没有使用索引的sql也将被记录

+-------------------------------+-------+

1 row in set (0.00 sec)

慢查询相关分析工具

mysqldumpslow

profile

mysql> select @@profiling;

+-------------+

| @@profiling |

+-------------+

| 0 |

+-------------+

1 row in set, 1 warning (0.01 sec)

mysql> set profiling=1;

Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> show tables;

ERROR 1046 (3D000): No database selected

mysql> show databases;

+--------------------+

| Database |

+--------------------+

| information_schema |

| mysql |

| performance_schema |

| sys |

+--------------------+

4 rows in set (0.01 sec)

mysql> create tables t1(id int);

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'tables t1(id int)' at line 1

mysql> show profiles;

+----------+------------+--------------------------+

| Query_ID | Duration | Query |

+----------+------------+--------------------------+

| 1 | 0.00010625 | show tables |

| 2 | 0.01226175 | show databases |

| 3 | 0.00008175 | create tables t1(id int) |

+----------+------------+--------------------------+

3 rows in set, 1 warning (0.00 sec)

mysql> show profile;

+---------------+----------+

| Status | Duration |

+---------------+----------+

| starting | 0.000062 |

| freeing items | 0.000014 |

| cleaning up | 0.000006 |

+---------------+----------+

3 rows in set, 1 warning (0.01 sec)

mysql> show profile for query 2;

+----------------------------+----------+

| Status | Duration |

+----------------------------+----------+

| starting | 0.008047 |

| checking permissions | 0.000024 |

| Opening tables | 0.001117 |

| init | 0.000585 |

| System lock | 0.000035 |

| optimizing | 0.000205 |

| statistics | 0.000504 |

| preparing | 0.000191 |

| Creating tmp table | 0.000337 |

| executing | 0.000841 |

| end | 0.000027 |

| query end | 0.000006 |

| waiting for handler commit | 0.000021 |

| removing tmp table | 0.000006 |

| waiting for handler commit | 0.000006 |

| closing tables | 0.000016 |

| freeing items | 0.000277 |

| cleaning up | 0.000020 |

+----------------------------+----------+

18 rows in set, 1 warning (0.00 sec)

mysql> show profile cpu for query 2;

+----------------------------+----------+----------+------------+

| Status | Duration | CPU_user | CPU_system |

+----------------------------+----------+----------+------------+

| starting | 0.008047 | 0.008023 | 0.000000 |

| checking permissions | 0.000024 | 0.000015 | 0.000000 |

| Opening tables | 0.001117 | 0.001128 | 0.000000 |

| init | 0.000585 | 0.000582 | 0.000000 |

| System lock | 0.000035 | 0.000027 | 0.000000 |

| optimizing | 0.000205 | 0.000208 | 0.000000 |

| statistics | 0.000504 | 0.000503 | 0.000000 |

| preparing | 0.000191 | 0.000191 | 0.000000 |

| Creating tmp table | 0.000337 | 0.000338 | 0.000000 |

| executing | 0.000841 | 0.000847 | 0.000000 |

| end | 0.000027 | 0.000016 | 0.000000 |

| query end | 0.000006 | 0.000006 | 0.000000 |

| waiting for handler commit | 0.000021 | 0.000020 | 0.000000 |

| removing tmp table | 0.000006 | 0.000007 | 0.000000 |

| waiting for handler commit | 0.000006 | 0.000006 | 0.000000 |

| closing tables | 0.000016 | 0.000016 | 0.000000 |

| freeing items | 0.000277 | 0.000279 | 0.000000 |

| cleaning up | 0.000020 | 0.000018 | 0.000000 |

+----------------------------+----------+----------+------------+

18 rows in set, 1 warning (0.00 sec)

二进制日志

记录会引起数据改变的SQL。多用于数据还原和主从复制

相关变量

sql_log_bin #是否开启二进制日志

log_bin #指定文件位置

binlog_format #默认格式statement,建议根据需求改为row和mixed

max_binlog_size #单个二进制日志最大体积,默认1G

expire_logs_days #二进制日志自动删除的天数,默认为0

二进制日志相关命令

# 查看二进制日志文件列表和大小

mysql> show master logs;

+----------------+-----------+-----------+

| Log_name | File_size | Encrypted |

+----------------+-----------+-----------+

| bin-log.000001 | 32388 | No |

| bin-log.000002 | 156 | No |

+----------------+-----------+-----------+

2 rows in set (0.00 sec)

mysql> show binary logs;

+----------------+-----------+-----------+

| Log_name | File_size | Encrypted |

+----------------+-----------+-----------+

| bin-log.000001 | 32388 | No |

| bin-log.000002 | 156 | No |

+----------------+-----------+-----------+

2 rows in set (0.00 sec)

# 查看正在使用的二进制日志文件

mysql> show master status;

+----------------+----------+--------------+------------------+-------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+----------------+----------+--------------+------------------+-------------------+

| bin-log.000002 | 156 | | | |

+----------------+----------+--------------+------------------+-------------------+

1 row in set (0.00 sec)

# 查看二进制文件内容

mysql> show binlog events;

+----------------+-------+----------------+-----------+-------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

| Log_name | Pos | Event_type | Server_id | End_log_pos | Info

|

+----------------+-------+----------------+-----------+-------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

| bin-log.000001 | 4 | Format_desc | 1 | 125 | Server ver: 8.0.21, Binlog ver: 4 |

| bin-log.000001 | 125 | Previous_gtids | 1 | 156 | |

| bin-log.000001 | 156 | Anonymous_Gtid | 1 | 235 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |

| bin-log.000001 | 235 | Query | 1 | 418 | CREATE DATABASE /*!32312 IF NOT EXISTS*/ `hellodb` /*!40100 DEFAULT CHARACTER SET utf8 */ /* xid=16 */ |

| bin-log.000001 | 418 | Anonymous_Gtid | 1 | 495 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |

| bin-log.000001 | 495 | Query | 1 | 634 | use `hellodb`; DROP TABLE IF EXISTS `classes` /* generated by server */ |

| bin-log.000001 | 634 | Anonymous_Gtid | 1 | 713 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'

# 删除二进制文件

PURGE BINARY LOGS TO 'mysql-bin.00001';

PURGE BINARY LOGS BEFORE '2020-10-10 10:10:10';

RESET MASTER TO 1234;

SHOW BINARY LOGS;

+-------------------+-----------+-----------+

| Log_name | File_size | Encrypted |

+-------------------+-----------+-----------+

| master-bin.001234 | 154 | No |

+-------------------+-----------+-----------+

#切换日志文件

flush logs;

二进制日志客户端查看工具

mysqlbinlog

[root@centos7 mysql]#mysqlbinlog bin-log.000002

/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;

/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;

DELIMITER /*!*/;

# at 4

#201013 22:29:02 server id 1 end_log_pos 125 CRC32 0x8f94c3aa Start: binlog v 4, server v 8.0.21 created 201013 22:29:02 at startup

# Warning: this binlog is either in use or was not closed properly.

ROLLBACK/*!*/;

BINLOG '

rrmFXw8BAAAAeQAAAH0AAAABAAQAOC4wLjIxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAACuuYVfEwANAAgAAAAABAAEAAAAYQAEGggAAAAICAgCAAAACgoKKioAEjQA

CigBqsOUjw==

'/*!*/;

# at 125

#201013 22:29:02 server id 1 end_log_pos 156 CRC32 0x5873f06a Previous-GTIDs

# [empty]

SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;

DELIMITER ;

# End of log file

/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;

/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

wdcp mysql日志文_mysql的日志简单总结相关推荐

  1. mysql ib_logfile 数量_Mysql 事务日志(Ib_logfile)

    mysql的innodb中事务日志ib_logfile(0/1) 概念: 事务日志或称redo日志,在mysql中默认以ib_logfile0,ib_logfile1名称存在,可以手工修改参数,调节开 ...

  2. mysql二进制日志特点_MySQL二进制日志分析-概述篇

    MySQL从3.23版本开始引入了二进制日志,用于的数据复制, 二进制日志根据MySQL的版本不同,目前有4个版本: https://dev.mysql.com/doc/internals/en/bi ...

  3. mysql qpstps测试_mysql操作日志

    关于 mysql操作日志的搜索结果 回答 增量备份的原理就是使用了mysql的binlog日志.本次操作的MySQL版本为5.5.40 for Linux (x86_64).增量备份要确保打开了二进制 ...

  4. mysql二进制日志管理_MYSQL二进制日志管理脚本

    MYSQL二进制日志管理脚本脚本原理是每小时对进行flush生成新的二进制日志,将二进制日志备份至NFS,并压缩存放:#!/bin/bash#Purpose:管理二进制日志,每小时刷新二进制日志,并将 ...

  5. linux中mysql数据库启用日志记录_MYSQL启用日志,和查看日志

    mysql有以下几种日志: 错误日志:     -log-err 查询日志:     -log 慢查询日志:   -log-slow-queries 更新日志:     -log-update 二进制 ...

  6. 开启mysql日志记录_Mysql开启日志记录

    vim /etc/my.conf.d/server.cnf: #lower_case_tables_name = 1 #错误日志 log_error = /var/log/mysql_error.lo ...

  7. mysql二进制日志重置_MySQL二进制日志备份和恢复详解

    原文链接:http://www.showerlee.com/archives/681 ****经实践,该教程ok,特在此分享**** 基本概念 定义: 二进制日志包含了所有更新了数据或者已经潜在更新了 ...

  8. mysql 主从日志文件_mysql 主从日志文件mysql

    [导读]默认情况下mysql会一直保留mysql-bin文件,这样到一定时候,磁盘可能会被撑满,这时候是否可以删除这些文件呢,是否可以安全删除,是个问题,不建议使用rm命令删除,这样有可能会不安全,正 ...

  9. mysql增加重做日志组_mysql重做日志

    一.重做日志(redo log) 1.作用 确保事务的持久性. 防止在发生故障的时间点,尚有脏页未写入磁盘,在重启mysql服务的时候,根据redo log进行重做,从而达到事务的持久性这一特性. 2 ...

最新文章

  1. 计算机相关专业学习经验总结
  2. 初一模拟赛总结(2019.3.9)
  3. .net pdf转图片_pdf2image类库实现批量pdf转图片
  4. linux 安装libcurl4-gnutls-dev,curl / curl.h,libcurl,libcurl4-openssl-dev,libcurl4-nss-dev库之间的区别?...
  5. 有多少漏洞都会重来:从ElasticSearch到MongoDB和Redis
  6. Spring框架----切入点表达式的写法
  7. Selenium的定位元素
  8. Redhat7系统root用户密码破解
  9. 计算机b类核心期刊有哪些,cssci、A类、B类、C类、核心期刊都是什么等级的期刊?...
  10. VEH与SetUnhandledExceptionFilter
  11. 清明五一假期催热周边自驾游 迪庆州应势推出“杜鹃花之旅”
  12. 手写Bundle Adjustment
  13. 用putty连接虚拟机下ubuntu ssh
  14. 上班拧螺丝的时候不小心空手造了个RPC框架,赶紧记录一下
  15. 大小限制_微信传文件有大小限制怎么办?教你3秒把100MPPT压缩成10M
  16. 解决方案:h5网页外部浏览器唤起微信分享,唤起微信面板,分享朋友圈方案,兼容大部分浏览器
  17. Linux 进程挂起、恢复相关命令
  18. source insight 4.0 选择后,相同单词全部高亮
  19. 中国财团买得了 Opera,买不了仙童半导体?
  20. Ubuntu18.04解决github提交代码Support for password authentication was removed 问题

热门文章

  1. 【elasticsearch】 Elasticsearch集群规模和容量规划的底层逻辑
  2. 【es】Elasticsearch:inverted index,doc_values及source
  3. 【java】java如何证明java发生了指令重排序
  4. Spark Structured : HIve jdbc方式访问待下划线的表,找不到表的错误
  5. 【Kafka】报错:Error while fetching metadata with correlation id 1 : {topic_lcc=LEADER_NOT_AVAILABLE}
  6. drools 7.x DSL领域语言入门
  7. SpringCloud集成Dubbo实现RPC调用
  8. 这一次搞懂 Spring 的 Bean 实例化原理
  9. SpringBoot 如何统计、监控 SQL运行情况?
  10. java多线程 游戏_java利用多线程和Socket实现猜拳游戏