MySQL日志管理之事务日志和错误日志

MySQL的日志是用来记录用户的相关操作、系统的运行状态等信息的文件结合。

事务日志就是mysql执行事务过程中产生的日志。

  • redo log:基于WAl机制在数据更改前先把对应操作记录下来。
  • undo log:记录和日志操作相反的操作。(例如撤销以前的操作)

  • 事务日志一般是存储引擎自行管理和使用的,默认存放在mysql数据文件夹里面的。

  • 因为事务日志是追加写入的,所以推荐将事务日志单独放在一个磁盘上面。

  • 查看和日志相关的信息(日志大小、所在位置、有几个日志等)

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_write_ahead_size | 8192     |
+-----------------------------+----------+
7 rows in set (0.00 sec)
[root@CentOS8 mysql]# ll -h /var/lib/mysql/
total 121M
-rw-r----- 1 mysql mysql   56 Sep 16 23:36 auto.cnf
-rw------- 1 mysql mysql 1.7K Sep 16 23:36 ca-key.pem
-rw-r--r-- 1 mysql mysql 1.1K Sep 16 23:36 ca.pem
-rw-r--r-- 1 mysql mysql 1.1K Sep 16 23:36 client-cert.pem
-rw------- 1 mysql mysql 1.7K Sep 16 23:36 client-key.pem
-rw-r----- 1 mysql mysql  277 Sep 16 23:49 ib_buffer_pool
-rw-r----- 1 mysql mysql  12M Sep 16 23:49 ibdata1
-rw-r----- 1 mysql mysql  48M Sep 16 23:49 ib_logfile0
-rw-r----- 1 mysql mysql  48M Sep 16 23:36 ib_logfile1
-rw-r----- 1 mysql mysql  12M Sep 16 23:49 ibtmp1
drwxr-x--- 2 mysql mysql 4.0K Sep 16 23:36 mysql
srwxrwxrwx 1 mysql mysql    0 Sep 16 23:49 mysql.sock
-rw------- 1 mysql mysql    6 Sep 16 23:49 mysql.sock.lock
drwxr-x--- 2 mysql mysql 4.0K Sep 16 23:36 performance_schema
-rw------- 1 mysql mysql 1.7K Sep 16 23:36 private_key.pem
-rw-r--r-- 1 mysql mysql  452 Sep 16 23:36 public_key.pem
-rw-r--r-- 1 mysql mysql 1.1K Sep 16 23:36 server-cert.pem
-rw------- 1 mysql mysql 1.7K Sep 16 23:36 server-key.pem
drwxr-x--- 2 mysql mysql  12K Sep 16 23:36 sys

  • 调整日志文件的个数和单个日志文件的大小
  • 将事务日志等文件迁移到一个新的分区中,和其他文件分开,因为事务日志文件写入方式是追加写入的。放在独立的分区中使得数据存放连续,可以减少磁盘的碎片。

MySQL写文件有两块缓存,一块是MySQL的缓冲区,还有一块是操作系统内核的缓冲区。

  • 通过 innodb_flush_log_at_trx_commit 定义事务的提交方式:
innodb_flush_log_at_trx_commit=0 --- 1S写一次磁盘

每隔一秒把MySQL缓冲区(log buffer)刷到文件系统中(os buffer)去,并且调用文件系统的"flush"操作将缓存刷新到磁盘上去。

也就是说一秒之前的日志都保存在日志缓冲区,也就是内存上,如果机器宕掉,可能丢失1秒的事务数据

innodb_flush_log_at_trx_commit=1:只要提交数据就把数据写入磁盘,但是会带来比较多的ip操作。

表示在每次事务提交的时候,都把log buffer刷到文件系统中(os buffer)去,并且调用文件系统的"flush"操作将缓存刷新到磁盘上去。

这样的话,数据库对IO的要求就非常高了,如果底层的硬件提供的IOPS比较差,那么MySQL数据库的并发很快就会由于硬件IO的问题而无法提升

innodb_flush_log_at_trx_commit=2 --- 1S写一次磁盘

表示在每次事务提交的时候会把mysql缓冲区(log buffer)刷到文件系统(os buffer)中去,但并不会立即刷写到磁盘。

如果只是MySQL数据库挂掉了,由于文件系统没有问题,那么对应的事务数据并没有丢失。

mysql崩溃的概率比操作系统崩溃的概率高,所以安全性比0要强一点

高并发业务行业最佳实践,是使用第三种折衷配置(=2)

MySQL错误日志记录的就是mysql启动、运行过程中产生的错误信息。

查看MySQL错误日志的存放位置:

mysql> SHOW GLOBAL VARIABLES LIKE 'log_error';

例如:

mysql5.6:
mysql> show variables like 'log_error';
+---------------+------------------+
| Variable_name | Value            |
+---------------+------------------+
| log_error     | ./CentOS8.cc.err |
+---------------+------------------+
1 row in set (0.01 sec)

mysql5.7:
mysql> show variables like 'log_error';
+---------------+---------------------+
| Variable_name | Value               |
+---------------+---------------------+
| log_error     | /var/log/mysqld.log |
+---------------+---------------------+
1 row in set (0.00 sec)

mysql8.0:
mysql> show global variables like 'log_error';
+---------------+---------------------------+
| Variable_name | Value                     |
+---------------+---------------------------+
| log_error     | /var/log/mysql/mysqld.log |
+---------------+---------------------------+
1 row in set (0.01 sec)

  • 默认情况下,错误日志存储在mysql数据库的数据文件中
  • 错误日志文件通常的名称为hostname.err
MySQL的三个目录:
二进制/源码包目录:网上下载的安装包存放位置

mysql的数据存放目录:MySQL数据存放位置

mysql程序存放目录:MySQL应用程序的安装位置
log-err是定义是否启用错误日志的功能和错误日志的存储位置

例如:

[root@CentOS8 mysql]# cat /etc/my.cnf | grep -v -E '^#';

[mysqld]
datadir=/var/lib/mysql
log-error=/var/log/mysqld.log

log_warnings用于标识警告信息是否一并记录到错误日志中

  • log_warnings的值为0,表示不记录警告信息。
  • log_warnings的值为1,表示警告信息一并记录到错误日志中。
  • log_warnings的值大于1,表示”失败的连接”的信息和创建新连接时”拒绝访问”类的错误信息也会被记录到错误日志中。
mysq5.6默认值:
mysql> SHOW GLOBAL VARIABLES LIKE 'log_warnings';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_warnings  | 1     |
+---------------+-------+
1 row in set (0.00 sec)

mysql8.0或5.7默认值:
mysql> SHOW GLOBAL VARIABLES LIKE 'log_error_verbosity';
+---------------------+-------+
| Variable_name       | Value |
+---------------------+-------+
| log_error_verbosity | 2     |
+---------------------+-------+
1 row in set (0.00 sec)

注意:mysql8.0将log_warnings变成了long_error_verbosity

Original: https://www.cnblogs.com/heyongshen/p/16698810.html
Author: 背对背依靠
Title: MySQL日志管理之事务日志和错误日志

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/578590/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • redis变慢查询

    Redis 通常是我们业务系统中一个重要的组件,比如:缓存、账号登录信息、排行榜等。 一旦 Redis 请求延迟增加,可能就会导致业务系统”雪崩”。 我在单…

    Linux 2023年5月28日
    099
  • 四年测试的面试题分享

    其实想说为什么每次面试都要先来点自我介绍,说来说去简历上都有,我曾想过不能快速进入面试阶段嘛 我的专业技能: 基本上这些专业技能是在工作上用过或者自己摸索过,实战经验比较少,下面是…

    Linux 2023年6月8日
    083
  • 简单动态页面的爬取

    ch6&7 动态渲染页面的爬取 ajax数据爬取 动态渲染页面的爬取 selenium的使用 splash的使用 1. ajax数据爬取 ajax数据的爬取主要依靠分析XH…

    Linux 2023年6月7日
    095
  • CH9344 Windows驱动安装与GPIO使用教程

    USB 转四串口芯片 CH9344 用于为 USB 主机扩展 4 路高速异步串口,支持串口波特率高达 12Mbps。芯片内部高度集成,外围精简,提供 VIO 电源引脚,部分串口 I…

    Linux 2023年6月7日
    085
  • Linux基础02

    import paramiko class SSHProxy(object): def __init__(self, hostname, port, username, passw…

    Linux 2023年6月7日
    079
  • 【翻译】如何编写 Git 提交消息

    个人博客及创作索引页正在制作中,此处仅释出本地第一大版本。原文档基于 Hexo 及相关插件,不兼容于此处的格式暂不统一修复。 《【翻译】如何编写 Git 提交消息》[1]的简体中文…

    Linux 2023年6月13日
    0129
  • RPA 微信财务报销机器人 竹间智能

    bash;gutter:true; 1、首先通过微信对话机器人收集报销信息及内容 2、上传发票并进行OCR识别 3、收集相关的出差信息,支持对话中修改内容 4、完成信息收集后,后台…

    Linux 2023年6月7日
    096
  • linux下启动MongoDB权限不够

    bash: ./mongod: 权限不够 解决办法: 在MongoDB安装目录下: chmod -R 740 bin Original: https://www.cnblogs.c…

    Linux 2023年6月14日
    081
  • CPU架构对redis的性能影响

    CPU架构对redis的性能影响 主流CPU架构 一个CPU处理器中通常有多个运行核心,每一个运行核心称为一个物理核,每个物理核都可以运行应用程序。每个物理核都拥有 私有的一级缓存…

    Linux 2023年5月28日
    0107
  • jdk8 时间

    package p2022; import java.text.SimpleDateFormat; import java.util.Date; /** * @descriptio…

    Linux 2023年6月8日
    098
  • 详解 Flink DataStream中min(),minBy(),max(),max()之间的区别

    解释 官方文档中: The difference between min and minBy is that min returns the minimum value, wher…

    Linux 2023年6月7日
    097
  • 位运算(一)

    位运算的一般应用 功能 例子 运算 去掉最后一位 1110101->111010 x>>1 在最后加0 1110101->11101010 x< 通过…

    Linux 2023年6月8日
    0135
  • shell 同时执行多任务下载视频

    本文为博主原创,转载请注明出处: shell 脚本不支持多线程,但我们需要用shell 脚本同时跑多个任务时怎么让这些任务并发同时进行,可以采用在每个任务 后面 添加一个 &amp…

    Linux 2023年5月28日
    0104
  • go——数组

    GO——数组 一、一维数组声明方式: 1. var 数组名 [数组长度] 数组类型 var arr [5]int //定义一个数组,有5个元素,数组类型为整形 2.var 数组名=…

    Linux 2023年6月7日
    0106
  • 文本编辑命令

    一、vim编辑器 1、vim的三种模式 一般模式(正常模式):以vim打开文件就直接进入到此模式,此模式中可以使用上下左右按键进行移动光标,也可以在此模式下进行文件的复制粘贴删除等…

    Linux 2023年6月6日
    0110
  • ES查询区分大小写

    ES查询在默认的情况下是不区分大小写的,在5.0版本之后将 string类型拆分成两种新的数据类型, text用于全文搜索(模糊搜索), keyword用于关键字搜索(精确搜索)。…

    Linux 2023年6月8日
    0107
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球