百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

MySQL 日志实践

toyiye 2024-06-21 12:14 8 浏览 0 评论

错误日志

主要是用来记录MySQL服务器启动、运行或停止时遇到的问题,像使用 mysql --initialize初始化mysql的基础数据时候,默认给root用户生成的密码就放在错误日志里面。


错误日志的配置只需要一个配置选项即可:

  • log_error :指定错误日志的存放位置和文件名

例如:

log_error = /var/log/mysql/error.log

MySQL的警告日志信息默认也是写入错误日志中的,一般这个值不用修改,使用默认的就行了。

警告日志通过以下参数可以进行配置:

  • log_warnings:用于mysql5.7之前的版本,默认值是1,表示将警告日志写入错误日志中。0表示不写入错误日志文件。值大于1,表示”失败的连接”的信息和创建新连接时”拒绝访问”类的错误信息也会被记录到错误日志中。
  • log_error_verbosity:mysql5.7及后面版本用的配置选项,默认的值是3

通用日志

通用日志主要是记录所有关于服务器的活动,包括所有客户端的连接和所有执行的SQL语句,mysql的通用日志是关闭的,如果需要设置可以通过 general_log 选项开启通用日志。


通用查询日志记录了大量的信息,它可能会对数据库服务器的性能产生显著影响,特别在高负载的生产环境中。而且还会占用大量磁盘空间和磁盘 I/O 问题,所以一般调试的时候才会开启通用日志。


配置通用日志主要使用以下选项:

  • general_log:设置是否开启通用日志,默认为关闭(0),1表示开启
  • general_log_file:设置通用日志的存放位置和文件名

例如:

[mysqld]
general_log       = 1  # 1表示开启 0表示关闭
general_log_file  = /var/log/mysql/mysql.log

慢查询日志

慢查询日志记录了执行时间超过特定阈值的所有查询,可以根据这些信息监控和诊断数据库性能问题。

一般情况下是需要调试时候才开启慢查询日志,如果长期开启可能会对数据库性能产生一定的影响,且在大型或高负载的环境中日志文件可能会快速增长,占用过多磁盘空间。


可以通过以下选项来配置慢查询日志:

  • slow_query_log:用于设置是否开启慢查询日志,1表示开启,0表示关闭
  • slow_query_log_file:用于指定慢查询日志的存放位置和文件名
  • long_query_time:用于指定慢查询日志的阈值,单位秒,默认为10s,超过这个时间的就会被记录到slow_query_log_file指定的文件。

例如:

[mysqld]
slow_query_log       = 1
slow_query_log_file  = /var/log/mysql/slow.log
long_query_time      = 2

二进制日志

二进制日志(Binary Log)是一种特殊类型的日志文件,它记录了所有修改数据库内容的操作,比如 INSERT、UPDATE 和 DELETE 语句,以及数据定义语言(DDL)语句,如 CREATE TABLE、ALTER TABLE 等。


MySQL 的二进制日志并不是由纯粹的0和1序列组成的简单文件。实际上,它是一种特殊的二进制格式文件,这种格式旨在高效地存储和记录数据库更改操作。这种专门为 MySQL 优化的格式,既保证了存储和传输的高效性,也便于使用相应的工具进行内容查看和分析。例如mysqlbinlog这个工具就可以查看二进制文件的内容。


MySQL的二进制日志不像通用日志、慢查询日志一样耗费性能,二进制日志对性能的影响通常较小。一般在主从复制的架构中才需要开启二进制日志。


通过以下选项可以完成对二进制日志的配置:

  • log_bin :指定二进制日志的文件名,使用这个选项的时候就开启了二进制日志
  • expire_logs_days:设置二进制日志文件的自动过期天数。过了这个期限,旧的日志文件会被自动删除。
  • max_binlog_size:指定单个二进制日志文件的最大大小。达到这个大小后,MySQL 会关闭当前日志文件,并创建一个新的日志文件。
  • binlog_do_db:指定只有哪些数据库的更改会被记录在二进制日志中。
  • binlog_ignore_db:指定哪些数据库的更改不应该被记录在二进制日志中。
  • skip-log-bin:用于完全禁用二进制日志,配置了这个选项,会覆盖 log_bin 的设置,导致二进制日志不会被启用。

说明: MYSQL5.7只设置了全局系统变量log_bin,没有设置全局系统变量server_id的话,那么MySQL启动不了,而且错误日志没有任何错误信息。


例如:

log_bin              = /var/log/mysql/mysql-bin.log
expire_logs_days     = 14
max_binlog_size      = 256M
binlog-do-db         = position_ehcommon
binlog-do-db         = iot
binlog-do-db         = map

中继日志

中继日志(Relay Log)是在主从复制环境中使用的一种特殊日志文件,可以理解为二进制日志换一个名字,在主从复制环境中,中继日志是存放在从服务器上的。


在 MySQL 的主从复制环境中,中继日志(Relay Log)的作用是暂存从主服务器接收的二进制日志(Binary Log)事件,并在从服务器上执行这些事件以实现数据同步。


一旦这些事件在从服务器上成功执行并且数据同步完成,相应的中继日志文件就不再需要了,因此会被自动删除。这是从服务器自动进行的,以确保不会因为长时间累积大量的中继日志而占用过多的磁盘空间。

重做日志

重做日志(Redo Log)是InnoDB存储引擎特有的日志系统,用于保证事务的持久性和恢复能力。重做日志也是以二进制格式存储存储的,并且如果使用的引擎是innodb,默认是开启了重做日志


重做日志的作用:

数据恢复:重做日志记录了对数据库所做的更改。这些记录用于确保即使在系统崩溃的情况下,这些更改也不会丢失。在数据库崩溃后,重做日志用于恢复未提交的更改,以确保数据的一致性和完整性。

优化写入性能:数据先写入重做日志,然后再异步更新数据文件,可以提高数据库的写入性能。


虽然默认开启了重做日志,但是也可以根据一些参数来进行调整:

  • innodb_log_file_size:设置每个重做日志文件的大小,太小可能导致频繁的日志刷新,影响性能;日志太大可能增加恢复时间。
  • innodb_log_files_in_group:定义了日志文件组中文件的数量。

MySQL异常断电和重做日志:

1、启动时的事务检查: 当 MySQL 启动时,它会检查重做日志(Redo Log),以确定是否有未完成的事务。这是为了确保在系统崩溃或关闭时,数据库能够恢复到一致的状态。


2、完成或回滚事务: 如果发现有未完成的事务,MySQL 会使用重做日志中的信息来完成这些事务(如果它们在崩溃时已经被标记为提交)或者回滚这些事务(如果它们还没有提交)。


3、异常断电的影响: 在异常断电的情况下,重做日志可能会在写入过程中被部分损坏。这意味着日志中可能包含不完整或损坏的信息,使得 MySQL 无法准确地完成或回滚事务。


4、启动失败: 如果 MySQL 无法从重做日志中恢复一致的数据库状态(可能是由于日志损坏),它可能无法正常启动。这是因为启动过程中无法保证数据的完整性和一致性。

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码