【MySQL高级篇笔记-其他数据库日志(下) 】

这篇具有很好参考价值的文章主要介绍了【MySQL高级篇笔记-其他数据库日志(下) 】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

此笔记为尚硅谷MySQL高级篇部分内容

目录

一、MySQL支持的日志

1、日志类型

2、日志的弊端

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

三、通用查询日志(general query log)

1、问题场景 

2、查看当前状态

3、启动日志

方式 1 :永久性方式

方式2:临时性方式 

4、查看日志

5、停止日志

方式1:永久性方式 

方式2:临时性方式

6、 删除\刷新日志

四、错误日志(error log)

1、启动日志

2、查看日志

3、删除\刷新日志

五、二进制日志(bin log)

1、查看默认情况

2、日志参数设置

方式1:永久性方式

方式2:临时性方式

3、查看日志

4、使用日志恢复数据

5、删除二进制日志

6、其它场景

六、再谈二进制日志(binlog) 

1、写入机制

2、binlog与redolog对比

3、两阶段提交 

七、中继日志(relay log)

1、介绍

2、查看中继日志 

3、恢复的典型错误


千万不要小看日志。很多看似奇怪的问题,答案往往就藏在日志里。很多情况下,只有通过查看日志才能发现问题的原因,真正解决问题。所以,一定要学会查看日志,养成检查日志的习惯,对提升你的数据库应用开发能力至关重要。

MySQL8.0 官网日志地址:MySQL :: MySQL 8.0 Reference Manual :: 5.4 MySQL Server Logs

一、MySQL支持的日志


1、日志类型

MySQL有不同类型的日志文件,用来存储不同类型的日志,分为 二进制日志 、 错误日志 、 通用查询日志慢查询日志 ,这也是常用的4种。MySQL 8又新增两种支持的日志: 中继日志数据定义语句日志 。使用这些日志文件,可以查看MySQL内部发生的事情。

这 6 类日志分别为:

  • 慢查询日志: 记录所有执行时间超过long_query_time的所有查询,方便我们对查询进行优化。

  • 通用查询日志: 记录所有连接的起始时间和终止时间,以及连接发送给数据库服务器的所有指令,对我们复原操作的实际场景、发现问题,甚至是对数据库操作的审计都有很大的帮助。

  • 错误日志: 记录MySQL服务的启动、运行或停止MySQL服务时出现的问题,方便我们了解服务器的状态,从而对服务器进行维护。

  • 二进制日志: 记录所有更改数据的语句,可以用于主从服务器之间的数据同步,以及服务器遇到故障时数据的无损失恢复。

  • 中继日志: 用于主从服务器架构中,从服务器用来存放主服务器二进制日志内容的一个中间文件。从服务器通过读取中继日志的内容,来同步主服务器上的操作。

  • 数据定义语句日志: 记录数据定义语句执行的元数据操作。

除二进制日志外,其他日志都是文本文件。默认情况下,所有日志创建于MySQL数据目录

2、日志的弊端

  • 日志功能会降低MySQL数据库的性能。例如,在查询非常频繁的MysQL数据库系统中,如果开启了通用查询日志和慢查询日志,MySQL数据库会花费很多时间记录日志。

  • 日志会占用大量的磁盘空间。对于用户量非常大、操作非常频繁的数据库,日志文件需要的存储空间设置比数 据库文件需要的存储空间还要大二、

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


前面章节《性能分析工具的使用》已经详细讲述。

三、通用查询日志(general query log)


通用查询日志用来 记录用户的所有操作 ,包括启动和关闭MySQL服务、所有用户的连接开始时间和截止时间、发给 MySQL 数据库服务器的所有 SQL 指令等。当我们的数据发生异常时,查看通用查询日志还原操作时的具体场景,可以帮助我们准确定位问题。

1、问题场景 

【MySQL高级篇笔记-其他数据库日志(下) 】

2、查看当前状态

mysql> SHOW VARIABLES LIKE '%general%';
+------------------+------------------------------+
| Variable_name | Value |
+------------------+------------------------------+
| general_log | OFF | #通用查询日志处于关闭状态
| general_log_file | /var/lib/mysql/atguigu01.log | #通用查询日志文件的名称是atguigu01.log
+------------------+------------------------------+
2 rows in set (0.03 sec)

3、启动日志

方式 1 :永久性方式

修改my.cnf或者my.ini配置文件来设置。在[mysqld]组下加入log选项,并重启MySQL服务。

格式如下:

[mysqld]
general_log=ON
general_log_file=[path[filename]] #日志文件所在目录路径,filename为日志文件名   

如果不指定目录和文件名,通用查询日志将默认存储在MySQL数据目录中的hostname.log文件中,hostname表示主机名。

方式2:临时性方式 

SET GLOBAL general_log=on;  # 开启通用查询日志
SET GLOBAL general_log_file=’path/filename’; # 设置日志文件保存位置

对应的,关闭操作SQL命令如下:

SET GLOBAL general_log=off;  # 关闭通用查询日志

查看设置后情况:

SHOW VARIABLES LIKE 'general_log%';

4、查看日志

通用查询日志是以文本文件的形式存储在文件系统中的,可以使用文本编辑器直接打开日志文件。每台MySQL服务器的通用查询日志内容是不同的。

  • 在Windows操作系统中,使用文本文件查看器;

  • 在Linux系统中,可以使用vi工具或者gedit工具查看;

  • 在Mac OSX系统中,可以使用文本文件查看器或者vi等工具查看。

SHOW VARIABLES LIKE 'general_log%';结果中可以看到通用查询日志的位置

【MySQL高级篇笔记-其他数据库日志(下) 】 

在通用查询日志里面,我们可以清楚地看到,什么时候开启了新的客户端登陆数据库,登录之后做了什么 SQL 操作,针对的是哪个数据表等信息。

5、停止日志

方式1:永久性方式 

【MySQL高级篇笔记-其他数据库日志(下) 】

方式2:临时性方式

【MySQL高级篇笔记-其他数据库日志(下) 】

6、 删除\刷新日志

【MySQL高级篇笔记-其他数据库日志(下) 】

四、错误日志(error log)


1、启动日志

【MySQL高级篇笔记-其他数据库日志(下) 】

2、查看日志

【MySQL高级篇笔记-其他数据库日志(下) 】

3、删除\刷新日志

【MySQL高级篇笔记-其他数据库日志(下) 】

【MySQL高级篇笔记-其他数据库日志(下) 】

五、二进制日志(bin log)


binlog可以说是MySQL中比较 重要 的日志了,在日常开发及运维过程中,经常会遇到。
binlog即binary log,二进制日志文件,也叫作变更日志(update log)。它记录了数据库所有执行的DDL DML 等数据库更新事件的语句,但是不包含没有修改任何数据的语句(如数据查询语句select、show等)。
binlog主要应用场景:

  • 一是用于 数据恢复
  • 二是用于 数据复制 

【MySQL高级篇笔记-其他数据库日志(下) 】

1、查看默认情况

【MySQL高级篇笔记-其他数据库日志(下) 】

2、日志参数设置

方式1:永久性方式

【MySQL高级篇笔记-其他数据库日志(下) 】

方式2:临时性方式

【MySQL高级篇笔记-其他数据库日志(下) 】

3、查看日志

【MySQL高级篇笔记-其他数据库日志(下) 】

【MySQL高级篇笔记-其他数据库日志(下) 】

【MySQL高级篇笔记-其他数据库日志(下) 】

【MySQL高级篇笔记-其他数据库日志(下) 】

4、使用日志恢复数据

【MySQL高级篇笔记-其他数据库日志(下) 】

5、删除二进制日志

【MySQL高级篇笔记-其他数据库日志(下) 】

【MySQL高级篇笔记-其他数据库日志(下) 】

6、其它场景

二进制日志可以通过数据库的 全量备份 和二进制日志中保存的 增量信息 ,完成数据库的 无损失恢复 。但是,如果遇到数据量大、数据库和数据表很多(比如分库分表的应用)的场景,用二进制日志进行数据恢复,是很有挑战性的,因为起止位置不容易管理。
在这种情况下,一个有效的解决办法是 配置主从数据库服务器 ,甚至是 一主多从 的架构,把二进制日志文件的内容通过中继日志,同步到从数据库服务器中,这样就可以有效避免数据库故障导致的数据异常等问题。

六、再谈二进制日志(binlog) 


1、写入机制

【MySQL高级篇笔记-其他数据库日志(下) 】

【MySQL高级篇笔记-其他数据库日志(下) 】

【MySQL高级篇笔记-其他数据库日志(下) 】

【MySQL高级篇笔记-其他数据库日志(下) 】

【MySQL高级篇笔记-其他数据库日志(下) 】

【MySQL高级篇笔记-其他数据库日志(下) 】

2、binlog与redolog对比

  • redo log 它是物理日志,记录内容是“在某个数据页上做了什么修改”,属于 InnoDB 存储引擎层产生的。

  • 而 binlog 是逻辑日志,记录内容是语句的原始逻辑,类似于“给 ID=2 这一行的 c 字段加 1”,属于MySQL Server 层

  • 虽然它们都属于持久化的保证,但是则重点不同。

    • redo log让InnoDB存储引擎拥有了崩溃恢复能力。

    • binlog保证了MySQL集群架构的数据一致性。

3、两阶段提交 

在执行更新语句过程,会记录redo log与binlog两块日志,以基本的事务为单位,redo log在事务执行过程中可以不断写入,而binlog只有在提交事务时才写入,所以redo log与binlog的 写入时机 不一样。

【MySQL高级篇笔记-其他数据库日志(下) 】

redo log与binlog两份日志之间的逻辑不一致,会出现什么问题?

【MySQL高级篇笔记-其他数据库日志(下) 】

由于binlog没写完就异常,这时候binlog里面没有对应的修改记录。

【MySQL高级篇笔记-其他数据库日志(下) 】

为了解决两份日志之间的逻辑一致问题,InnoDB存储引擎使用两阶段提交方案。

【MySQL高级篇笔记-其他数据库日志(下) 】

使用两阶段提交后,写入binlog时发生异常也不会有影响 

【MySQL高级篇笔记-其他数据库日志(下) 】

另一个场景,redo log设置commit阶段发生异常,那会不会回滚事务呢?

【MySQL高级篇笔记-其他数据库日志(下) 】

并不会回滚事务,它会执行上图框住的逻辑,虽然redo log是处于prepare阶段,但是能通过事务id找到对应的binlog日志,所以MySQL认为是完整的,就会提交事务恢复数据。

七、中继日志(relay log)


1、介绍

中继日志只在主从服务器架构的从服务器上存在。从服务器为了与主服务器保持一致,要从主服务器读取二进制日志的内容,并且把读取到的信息写入 本地的日志文件 中,这个从服务器本地的日志文件就叫中继日志 。然后,从服务器读取中继日志,并根据中继日志的内容对从服务器的数据进行更新,完成主从服务器的 数据同步


搭建好主从服务器之后,中继日志默认会保存在从服务器的数据目录下。


文件名的格式是: 从服务器名 -relay-bin.序号 。中继日志还有一个索引文件: 从服务器名 -relay-bin.index ,用来定位当前正在使用的中继日志。

2、查看中继日志 

【MySQL高级篇笔记-其他数据库日志(下) 】

【MySQL高级篇笔记-其他数据库日志(下) 】

3、恢复的典型错误

如果从服务器宕机,有的时候为了系统恢复,要重装操作系统,这样就可能会导致你的 服务器名称 与之前 不同 。而中继日志里是 包含从服务器名 的。在这种情况下,就可能导致你恢复从服务器的时候,无法从宕机前的中继日志里读取数据,以为是日志文件损坏了,其实是名称不对了。
解决的方法也很简单,把从服务器的名称改回之前的名称。

 

高级篇笔记PDF自取

链接:https://pan.baidu.com/s/1pVqrTwIZFoED77i-EFmw6g?pwd=3333 
提取码:3333文章来源地址https://www.toymoban.com/news/detail-481943.html

到了这里,关于【MySQL高级篇笔记-其他数据库日志(下) 】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • MySQL数据库 --- 高级篇

    MySQL数据库 --- 高级篇

    1.1.1、连接层 最上层是一些客户端和链接服务,包含本地sock 通信和大多数基于客户端/服务端工具实现的类似于TCP/IP的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念,为通过认证安全接入的客户端提供线程。同样在该层上

    2024年02月08日
    浏览(9)
  • MySQL数据库高级操作

    MySQL数据库高级操作

    if not exists:表示检测要创建的表是否已存在,如果不存在就继续创建 int(4) zerofill:表示若数值不满4位数,则前面用“0”填充,例0001 auto_increment:表示此字段为自增长字段,即每条记录自动递增1,默认从1开始递增;自增长字段数据不可以重复;自增长字段必须是主键;如添

    2024年02月09日
    浏览(16)
  • MySQL数据库高级查询语句

    MySQL数据库高级查询语句

    基于这两个数据库表格来实现以下实验 concat(x,y)将提供的参数x和y拼接成一个字符串 trim()返回去除指定格式的值 GROUP BY 有一个原则,凡是在 GROUP BY 后面出现的字段,必须在 SELECT 后面出现; 凡是在 SELECT 后面出现的、且未在聚合函数中出现的字段,必须出现在 GROUP BY 后

    2024年02月11日
    浏览(52)
  • MySQL数据库——高级查询语句

    MySQL数据库——高级查询语句

    数据库是用来存储数据,更新,查询数据的工具,而查询数据是一个数据库最为核心的功能,数据库是用来承载信息,而信息是用来分析和查看的。所以掌握更为精细化的查询方式是很有必要的。本文将围绕数据的高级查询语句展开。 1.指定指字段进行查询——SELECT 语法:

    2024年02月11日
    浏览(50)
  • MySQL数据库管理高级语句

    MySQL数据库管理高级语句

    复制表及内容     克隆表 获取数据表的表结构、索引等信息    清空表,删除表内的所有数据       删除的特点: 创建临时表 临时表创建成功之后,使用SHOWTABLES命令是看不到创建的临时表的, 临时表会在连接退出后被销毁。 如果在退出连接之前,也可以可执行增删改查

    2024年02月11日
    浏览(51)
  • 数据库应用:MySQL数据库SQL高级语句与操作

    数据库应用:MySQL数据库SQL高级语句与操作

    目录 一、理论 1.克隆表与清空表 2.SQL高级语句 3.SQL函数 4.SQL高级操作 5.MySQL中6种常见的约束 二、实验  1.克隆表与清空表 2.SQL高级语句 3.SQL函数 4.SQL高级操作 5.主键表和外键表  三、总结 克隆表:将数据表的数据记录生成到新的表中。 (1)克隆表 ① 先创建再导入 ② 创建

    2024年02月13日
    浏览(49)
  • Navicat迁移局域网内其他PC机的MySQL数据库

    Navicat迁移局域网内其他PC机的MySQL数据库

    刚换了个电脑,旧电脑的MySQL数据库太多了,转成.sql文件,再传输到新电脑上运行,太麻烦了。于是想着能不能通过局域网连到我旧电脑的MySQL上,然后直接进行数据库迁移。   打开DOS命令窗口输入IP config命令查看本机的IP。这里可以看到新电脑的IP是 192.168.1.24 。   然后

    2024年02月01日
    浏览(15)
  • k8s创建数据库mysql
MySQL数据库之日志管理

    k8s创建数据库mysql MySQL数据库之日志管理

     本文使用的是本机挂载数据,这样存在一个弊端没有pvc挂载好  重点来了: 这种共享宿主机存储的方法似乎可以解决Mysql数据库数据恢复的场景,我们似乎可以万事大吉了! But ,有的老铁会问:如果我得宿主机挂了怎么办?或者Pod没有在上一次节点上拉起,而是在新的节点

    2023年04月27日
    浏览(146)
  • 数据库应用:MySQL高级语句(一)

    数据库应用:MySQL高级语句(一)

    目录 一、理论 1.常用查询 2.函数 3.进阶查询 二、实验 1.普通查询 2.函数 3.进阶查询 三、问题 1.MySQL || 运算符不生效 四、总结 常用查询包括:增、删、改、查; 对 MySQL 数据库的查询,除了基本的查询外,有时候需要对查询的结果集进行处理。 (1)selelct select,显示表格中

    2024年02月17日
    浏览(41)
  • 【MySQL数据库】MySQL 高级SQL 语句一

    【MySQL数据库】MySQL 高级SQL 语句一

    ) % :百分号表示零个、一个或多个字符 _ :下划线表示单个字符 ‘A_Z’:所有以 ‘A’ 起头,另一个任何值的字符,且以 ‘Z’ 为结尾的字符串。例如,‘ABZ’ 和 ‘A2Z’ 都符合这一个模式,而 ‘AKKZ’ 并不符合 (因为在 A 和 Z 之间有两个字符,而不是一个字符)。 ‘ABC%’

    2024年02月09日
    浏览(673)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包