MySQL 日志(二)

本篇将继续介绍MySQL日志的相关内容

目录

一、二进制日志

简介

注意事项 

删除二进制日志

查看二进制日志

二进制日志的格式  

二、服务器日志维护



一、二进制日志

简介

二进制日志中主要记录了MySQL的更改事件(不包含SELECT和SHOW),例如:表的创建和表中数据的修改(增删改)。二进制日志还会将这些更改语句的执行时间记录下来,开启二进制日志会对服务器的性能产生一定消耗。二进制日志中还会记录可能进行数据修改的语句,例如没有匹配到具体行的删除和更新语句。

二进制日志主要用于下面这两种场景:

  • 主从节点数据复制:在主从复制时,从节点服务器会去获取主节点的二进制日志文件,并在从节点服务器上重新执行日志中所记录的修改语句,从而保证主从服务器数据的一致性。
  • 数据恢复:当服务器根据某一时间点的备份文件进行数据恢复时,会去重新执行二进制日志文件中记录的该时间后记录的修改语句,以使服务器恢复到一个最新的状态。

二进制日志中记录的语句中如果包含了用户的密码等信息,会对该信息进行加密处理,不会以文本的形式显示,以保证安全。

我们可以通过下面这条SQL来查询有关二进制日志的相关系统变量

show variables like '%bin%'

 

对于与二进制日志有关的状态变量,我们可以根据下面这条SQL查询:

SHOW STATUS LIKE '%bin%';

                                         

注意事项 

接下来我们来看一下二进制日志相关的注意事项:

• 在Linux中默认启用二进制日志,也就是说,log_bin的默认值为on,如果需要禁用二进制日志可以值定--skip-log-bin 或者 --disable-log-bin选项,如果同时指定了--log-bin选项则后指定的选项优先

• 选项--log-bin的值会被用于指定二进制日志文件的基本名,如果没有指定该选项的值,则默认使用基本名称binlog,通常建议指定一个名称

• 二进制日志文件的文件名由基本名 + 数字扩展名组成,服务器每创建一个新的二进制日志文件时,都会在上一个日志文件的数字扩展名的基准上加1来新的数字扩展名。当服务器中发生如下事件时,会自动创建一个新的二进制日志文件:

  • 服务器启动或者重新启动
  • 服务器执行刷新日志操作
  • 当日志文件大小超过max_binlog_size(该选项表示为单个日志的最大字节数,最小值为4kb,最大为1GB),需要注意的是,二进制日志的值可能会超过max_binlog_size,因为二进制日志是以事务为单位的,它会完整的记录整个任务,,不会出现拆分的情况,因此当记录一个大事务时,即使当前已经超过max_binlog_size指定的值了,也会继续把事务记录完。

 • mysqld会生成一个包含二进制日志文件名的日志索引文件,默认情况下,该索引文件与二进制日志文件具有相同的基本名,扩展名为index。该名称可以通过--log-bin-index来修改。

• 二进制日志文件及其索引文件默认保存在数据目录中,可以通过--log-bin指定绝对路径加基本名来进行修改。--log-bin对应的系统变量为log_bin_basename

• 在MySQL5.7中,启用二进制日志必须指定服务器ID,具体为指定sever_id的值。而在MySQL8.0中,server_id默认为1,在集群环境中,每台MySQL服务器都必须有一个唯一的服务器id.

• 二进制日志会在事务或者语句完成之后,释放锁和提交事务之前进行日志的记录,以保证日志按事务提交的顺序进行记录

• 在一个未提交的事务中,对支持事务的表(InnoDB表)的修改的更改会被缓存,直到服务器收到commit语句,并在commit执行之前,才会将之前的缓存写入到二进制日志文件中。

• 如果发生回滚,则在整个事务中记录一个回滚语句,但是对不支持事务的表(MyISAM表)的修改不能回滚,所有这些修改都会被记录到日志文件,然后复制到从节点

• 非事务的表在执行后会立即存储到二进制日志文件中。而事务表如果没有手动开启事务,则会在每次执行修改语句时都会自动开启一个事务。

• 当处理事务的线程启动时,会分配一个大小为binlog_cache_size的缓冲区来缓存修改语句,如果语句的大小比缓冲区的值大,线程则打开一个临时文件来存储事务,临时文件在线程结束时删除。binlog_cache_use状态变量表示缓冲区存储事务的数量,binlog_cache_disk_use则表示有缓冲区中的事务有多少使用了临时文件,结合这两个状态变量的值,可以将binlog_cache_size的值进行调优,以获得一个最为合适的大小,从而避免使用临时文件。max_binlog_cache_size用来设置缓冲区的最大空间,设置的默认值和最大值都为 4GB,最小为4096字节,如果事务语句大于这个值,事务将会执行失败然后回滚。

删除二进制日志

我们可以使用reset master语句来删除所有的二进制日志文件,或者使用purge binary logs来删除一部分二进制日志文件,具体如下:

reset master #重置二进制日志文件和索引文件为初始状态

purge binary logs to 二进制日志文件 #删除指定的二进制日志文件前面的所有日志文件并更新索引文件

purge binary logs before 时间  #删除指定时间前的所有二进制日志文件并更新索引

查看二进制日志

下面我们来看一下如何查看二进制日志文件:

首先,我们可以通过前面提到过多mysqlbinlog程序来查看,语法如下:

mysqlbinlog 二进制日志文件 > 要导出到的文件地址

其次我们还可以通过SQL语句来查看 ,具体如下:

show  binlog events in 日志名称 from 从第几条语句开始查 limit 查多少条

二进制日志的格式  

在二进制日志中有三种不同的格式,具体如下:

  • 基于语句的日志格式(STATEMENT),记录具体执行的SQL语句
  • 基于行的日志格式(ROW , 默认),记录表中每一行所受到的影响
  • 混合日志记录格式(MIXED),该种格式下,默认使用基于语句的日志记录。如果MySQL认为基于语句的格式不能保证主从复制的数据安全,会自动切换到基于行的日志格式,例如主节点在语句中用了UUID函数,如果记录原始语句会导致从节点生成的值和主节点的不一样,从而导致主从节点数据不一样,因此次时使用基于行的格式来记录UUID的真实值,而不再记录原始SQL语句。

我们可以通过--binlog-format来指定使用哪种格式。 

基于行与基于语句的区别,可以参考下面的内容:

基于语句: update student set age = 18 where id betwenn 10 and 20;

基于行 : update student set age = 18 where id = 10

                 update student set age = 18 where id = 11

                 update student set age = 18 where id = 12

                 update student set age = 18 where id = 13

                .   ....

                 update student set age = 18 where id = 20

                        

二、服务器日志维护

MySQL服务器会创建很多日志文件来记录MySQL的执行情况,但是,随着时间的推移,日志文件可能会增长的非常大,从而耗费大量的磁盘空间,因此我们需要定期备份或者删除旧的日志文件。

在MySQL中,二进制日志文件默认的过期时间为30天,过期后会自动进行删除,,该期限可以通过系统变量binlog_expire_logs_sencond来指定单位为秒,当我们需要使用新的日志文件时,我们可以执行FLUSH LOGS 、 mysqladmin flush-logs,mysqladmin refresh、mysqldump --flush-logs、mysqldump -- master -date等命令来刷新日志。另外当二进制日志文件大小达到max_binlog_size时会自动刷新日志。flush logs支持刷新某一种日志,具体如下:

FLUSH BINARY LOGS # 刷新⼆进制⽇志

FLUSH ERROR LOGS # 刷新错误⽇志

FLUSH GENERAL LOGS # 刷新⼀般查询⽇志

FLUSH RELAY LOGS # 刷新中继⽇志

FLUSH SLOW LOGS # 刷新慢查询⽇志 1

需要注意的是一般查询日志、错误日志,慢查询日志只是关闭并重新打开日志,因此在执行日志刷新时需要特殊操作一下,具体可以参考前面错误日志的刷新。

最后还需要注意在运行时对一般日查询日志和慢查询日志进行改名时,需要先禁用日志(设置general_log、slow_query_log为OFF),然后再重命名,最后再重新启用这两个日志。因为当我们在运行时重命名日志后,MySQL会因找不到原来的日志而保错

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/713303.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Base64编码的工作原理与实际应用

目录 前言 一、什么是Base64编码? 二、Base64编码的原理 三、Base64编码的应用场景 四、为什么要使用Base 64 五、Base64加密解密的实现 前言 当你需要将二进制数据转换为可传输和存储的文本格式时,Base64编码是一个常用的选择。在这篇博客中&#…

C++ 51 之 继承中的构造和析构

对象构造和析构的调用原则 继承中的构造和析构 子类对象在创建时会首先调用父类的构造函数父类构造函数执行完毕后,才会调用子类的构造函数当父类构造函数有参数时,需要在子类初始化列表(参数列表)中显示调用父类构造函数析构函数调用顺序和构造函数相…

可以用来制作硬模空心耳机壳的胶粘剂有哪些种类?

可以用来制作硬模空心耳机壳的胶粘剂有哪些种类? 制作耳机壳的胶粘剂有很多种类,常见的有环氧树脂胶水、UV树脂胶、快干胶、热熔胶等。 这些胶粘剂都有不同的特点和适用场景,可以根据自己的需求选择合适的类型。 例如: 环氧树脂…

Adobe设计替代软件精选列表

Adobe软件的替代列表,最初由 XdanielArt 收集,并由社区改进。您可以随意打开问题或拉出请求,或从数据中创建图像(以便于共享)。列表总是按照免费和开源选项的顺序排列,但根据您的用例,它可能不是最佳选择 替代因素 &am…

Python 潮流周刊#56:NumPy 2.0 里更快速的字符串函数

△△请给“Python猫”加星标 ,以免错过文章推送 本周刊由 Python猫 出品,精心筛选国内外的 250 信息源,为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景:帮助所有读者精进 Python 技术&am…

【linux】认识“文件”的本质,理解“文件系统”的设计逻辑,体会linux优雅的设计理念

⭐⭐⭐个人主页⭐⭐⭐ ~~~~~~~~~~~~~~~~~~ C站最❤❤❤萌❤❤❤博主 ~~~~~~~~~~~~~~~~~~~ ​♥东洛的克莱斯韦克-CSDN博客♥ ~~~~~~~~~~~~~~~~~~~~ 嗷呜~ ✌✌✌✌ 萌妹统治世界~ 🎉🎉🎉🎉 ✈✈✈✈相关文章✈✈✈✈ &#x1f4a…

2023年的Top20 AI应用在近一年表现怎么样?

AI应用现在进入寒武纪大爆发时代,百花争艳。如果倒回到2023年初,那时候排名靠前的AI应用在一年多时间,发生了哪些变化?能带给我们什么启示? 在2023年1月,排名靠前20的AI应用是: DeepL&#xff…

MATLAB中与直方图有关函数的关系

histogram Histogram plot画直方图 histcounts 直方图 bin 计数 histcounts是histogram的主要计算函数。 discretize 将数据划分为 bin 或类别 histogram2 画二元直方图 histcounts2 二元直方图 bin 计数 hist和histc过时了。替换不建议使用的 hist 和 histc 实例 hist → \r…

Day54 JDBC

Day54 JDBC JDBC:SUN公司提供的一套操作数据库的标准规范,就是使用Java语言操作关系型数据库的一套API JDBC与数据库驱动的关系:接口与实现的关系 给大家画一个jdbc的工作模式图 1.JDBC的四大金刚 1.DriverManager:用于注册驱动 2…

【Quartus 13.0】NIOS II 部署UART 和 PWM

打算在 EP1C3T144I7 芯片上部署 nios ii 做 uart & pwm控制 这个芯片或许不够做 QT 部署 这个芯片好老啊,但是做控制足够了,我只是想装13写 leader给的接口代码是用VHDL写的,我不会 当然verilog我也不太会 就这样,随便写吧 co…

SUSTAINABILITY,SCIESSCI双检期刊还能投吗?

本期,小编给大家介绍的是一本MDPI出版社旗下SCIE&SSCI双检“毕业神刊”——SUSTAINABILITY。据悉,早在2024年1月,ElSEVIER旗下的Scopus数据库已暂停收录检索期刊SUSTAINABILITY所发表文章,同时重新评估是否继续收录该期刊。随…

Qwen2——阿里巴巴最新的多语言模型挑战 Llama 3 等 SOTA

引言 经过几个月的期待, 阿里巴巴 Qwen 团队终于发布了 Qwen2 – 他们强大的语言模型系列的下一代发展。 Qwen2 代表了一次重大飞跃,拥有尖端的进步,有可能将其定位为 Meta 著名的最佳替代品 骆驼3 模型。在本次技术深入探讨中,我…

零基础入门学用Arduino 第三部分(三)

重要的内容写在前面: 该系列是以up主太极创客的零基础入门学用Arduino教程为基础制作的学习笔记。个人把这个教程学完之后,整体感觉是很好的,如果有条件的可以先学习一些相关课程,学起来会更加轻松,相关课程有数字电路…

python-基础篇-类与对象/面向对象程序设计-是什么

文章目录 定义一:面对对象是一种编程思想定义一:面向对象是一种抽象1、面向对象的两个基本概念2、面向对象的三大特性 定义一:你是土豪,全家都是土豪面向对象编程基础类和对象定义类创建和使用对象访问可见性问题面向对象的支柱 定…

C++初学者指南第一步---4.基本类型

C初学者指南第一步—4.基本类型 文章目录 C初学者指南第一步---4.基本类型1.变量声明2.快速概览Booleans 布尔型Characters 字符型Signed Integers 有符号整数Unsigned Integers 无符号整数Floating Point Types 浮点数类型 3.Common Number Representations 常用的数字表示常用…

用Copilot画漫画,Luma AI生成视频:解锁创意新玩法

近年来,随着人工智能技术的不断发展,各种创意工具也层出不穷。今天,我们就来介绍一种全新的创作方式:使用Copilot画漫画,再将漫画放入Luma AI生成视频。 Copilot:你的AI绘画助手 Copilot是一款基于人工智…

【Kubernetes项目部署】k8s集群+高可用、负载均衡+防火墙

项目架构图 (1)部署 kubernetes 集群 详见:http://t.csdnimg.cn/RLveS (2) 在 Kubernetes 环境中,通过yaml文件的方式,创建2个Nginx Pod分别放置在两个不同的节点上; Pod使用hostP…

TCP及UDP协议

tcp是点到点的,只有一条路径,到达顺序和发送顺序是相同的 回复的确认号是序发送端的序列号加上data的长度 1910 发送端的序列号也是那么算的 ack和下一个seq一样 那就没问题 三次握手四次挥手: 为啥是三次呢? 假如一次&#xf…

SpringBoot使用jasypt实现数据库信息的脱敏,以此来保护数据库的用户名username和密码password(容易上手,详细)

1.为什么要有这个需求? 一般当我们自己练习的时候,username和password直接是爆露出来的 假如别人路过你旁边时看到了你的数据库账号密码,他跑到他的电脑打开navicat直接就是一顿连接,直接疯狂删除你的数据库,那可就废…

学习笔记——网络管理与运维——SNMP(SNMP架构)

三、SNMP架构 1、SNMP结构概述 SNMP被设计为工作在TCP/IP协议族上,基于TCP/IP协议工作,对网络中支持SNMP协议的设备进行管理。所有支持SNMP协议的设备都提供SNMP这个统一界面,使得管理员可以使用统一的操作进行管理,而不必理会设…