当前位置: 首页 > news >正文

mysql binlog 浅谈

如何开启MySQL的binlog日志

在MySQL中,binlog指的是binary log,二进制日志文件。这个文件记录了MySQL所有的DML操作。通过binlog日志,我们可以做数据恢复,做主从复制等等。对于运维或架构人员来说,开启binlog日志功能非常重要。

那么,如何开启MySQL的binlog日志呢?下面将介绍两种方法。

方法一:在my.cnf主配置文件中添加参数

在my.cnf主配置文件中,找到[mysqld]模块,然后添加以下三行参数。

```
log_bin=ON
log_bin_basename=/var/lib/mysql/mysql-bin
log_bin_index=/var/lib/mysql/mysql-bin.index
```

参数解释:

- log_bin:开启binlog日志文件,默认值为OFF。
- log_bin_basename:binlog日志的基本文件名。MySQL会在该文件名后追加标识来表示每一个binlog文件。
- log_bin_index:binlog文件的索引文件,管理所有的binlog文件。

方法二:使用log-bin参数

如果你使用的是MySQL 5.7及以上版本,使用log-bin参数更加方便。在my.cnf配置文件中,找到[mysqld]模块,添加以下一行参数即可。

```
log-bin=/var/lib/mysql/mysql-bin
```

这个参数的作用和上面三个参数的作用是相同的。MySQL会根据这个配置自动开启binlog日志,自动设置log_bin_index文件为你指定的文件名后跟.index。参数log-bin指定了binlog文件的基本文件名。

需要注意的是,如果你使用MySQL 5.7及以上版本,必须添加一个额外的参数server-id=123454(随机指定一个不能重名的字符串),否则重启MySQL服务会报错。

然后,重启MySQL服务即可。

- 在CentOS 6上,使用以下命令重启MySQL服务:

```
service mysqld restart
```

- 在CentOS 7上,使用以下命令重启MySQL服务:

```
systemctl restart mysqld
```

验证是否开启binlog日志

开启binlog日志之后,我们可以登录MySQL终端,执行以下命令,查看是否成功开启binlog日志:

```
show variables like '%log_bin%';
```

如果开启成功,你应该看到类似以下结果:

```
+---------------------------------+----------------------------------------+
| Variable_name | Value |
+---------------------------------+----------------------------------------+
| log_bin | ON |
| log_bin_basename | /var/lib/mysql/mysql-bin |
| log_bin_index | /var/lib/mysql/mysql-bin.index |
+---------------------------------+----------------------------------------+
```

同时,在/var/lib/mysql目录下,你可以看到多个mysql-bin的文件,还有一个mysql-bin.index的文件,这表明binlog日志已经成功启用。

以上就是如何开启MySQL的binlog日志的方法。对于运维或架构人员来说,开启binlog日志功能非常重要。你可以随时访问这些文件来查看有哪些操作被执行了。希望这篇文章对你有所帮助!

二进制日志(binnary log)以事件形式记录了对MySQL数据库执行更改的所有操作。

binlog是记录所有数据库表结构变更(例如CREATE、ALTER TABLE…)以及表数据修改(INSERT、UPDATE、DELETE…)的二进制日志。不会记录SELECT和SHOW这类操作,因为这类操作对数据本身并没有修改,但可以通过查询通用日志来查看MySQL执行过的所有语句。

需要注意的一点是,即便update操作没有造成数据变化,也是会记入binlog

binlog有两个常用的使用场景:

  • 主从复制:mysql replication在master端开启binlog,master把它的二进制日志传递给slaves来达到master-slave数据一致的目的。

  • 数据恢复:通过mysqlbinlog工具来恢复数据。

2、关键参数

binLog默认是关闭的,可以通过参数log_bin控制:

mysql> show variables like 'log_bin'\G;
*************************** 1. row
Variable_name: log_bin
Value: OFF

参数max_binlog_size指定了单个二进制日志文件的最大值:

mysql> show variables like 'max_binlog_size'\G;
1. row
: max_binlog_size
Value: 1073741824

默认为1G,如果超过该值,会写入新的文件,并记录到.index文件。

InnoDB会将所有未提交的binLog写到一个缓存中,等事务提交后再将缓存刷新到文件。缓存大小有参数binlog_cache_size控制。

mysql> show variables like 'binlog_cache_size'\G;
1. row
: binlog_cache_size
Value: 32768

需要注意的是,该值是基于session的,每个事务都会分配一个大小为binlog_cache_size的缓存。当一个事务的记录大于该值,MySQL会把缓冲中的日志写入一个临时文件。因此,需要根据使用场景合理设置这个参数,过大或者过小都会影响性能。

参数sync_binlog表示每写缓冲多少次就同步到磁盘:

mysql> show variables like 'sync_binlog'\G;
1. row
: sync_binlog
Value: 1

  • N=1:表示采用同步写磁盘的方式来写二进制日志,这时写操作不使用操作系统的缓冲来写二进制日志,每次事务提交都会写入文件。

  • N=0:表示MySQL不控制binlog的刷新,由文件系统自己控制它的缓存的刷新。这时候的性能是最好的,但是风险也是最大的。因为一旦系统Crash,在binlog_cache中的所有binlog信息都会被丢失。

但是,即使将sync_binlog设为1,还是会有一种情况会导致问题的发生。当使用InnoDB存储引擎时,在一个事务发出COMMIT动作之前,由于sync_binlog设为1,因此会将二进制日志立即写入磁盘。如果这时已经写入了二进制日志,但是提交还没有发生,并且此时发生了宕机,那么在MySQL数据库下次启动时,因为COMMIT操作并没有发生,所以这个事务会被回滚掉。但是二进制日志已经记录了该事务信息,不能被回滚。这个问题可以通过将参数innodb_support_xa设为1来解决,虽然innodb_support_xa与XA事务有关,但它同时也确保了二进制日志和InnoDB存储引擎数据文件的同步。

binlog_format是一个非常重要的参数,决定了记录二进制日志的格式:

mysql> show variables like 'binlog_format'\G;
1. row
: binlog_format
Value: ROW

可选值有:

  • STATEMENT

    记录SQL语句。日志文件小,节约IO,但是对一些系统函数不能准确复制或不能复制,如now()、uuid()等

  • ROW

    记录表的行更改情况,可以为数据库的恢复、复制带来更好的可靠性,但是二进制文件的大小相较于STATEMENT会有所增加

  • MIXED

    STATEMENT和ROW模式的混合。默认采用STATEMENT格式进行二进制日志文件的记录,但是在一些情况下会使用ROW格式。

业内目前推荐使用的是ROW模式,准确性高,虽然说文件大,但是现在有SSD和万兆光纤网络,这些磁盘IO和网络IO都是可以接受的。

相关文章:

mysql binlog 浅谈

如何开启MySQL的binlog日志 在MySQL中,binlog指的是binary log,二进制日志文件。这个文件记录了MySQL所有的DML操作。通过binlog日志,我们可以做数据恢复,做主从复制等等。对于运维或架构人员来说,开启binlog日志功能…...

three.js(八):内置的三维几何体

三维几何体 BoxGeometry 立方体TetrahedronGeometry 四面体OctahedronGeometry 八面体DodecahedronGeometry 十二面体IcosahedronGeometry 二十面体PolyhedronGeometry 多面体SphereGeometry 球体ConeGeometry 圆锥CylinderGeometry 圆柱TorusGeometry 三维圆环TorusKnotGeomet…...

IDEA 性能优化

前言 IDEA 基于JVM,是内存紧张型的应用,即使是16GB内存也很一般。 机器配置: win10 proi7-4720hq 3.2G 4c8tddr3-1600IDEA 2023.2.1 本文优化在不升级硬件的前提下使用 优化 调整JVM堆内存及GC IDEA 自身的JVM运行时配置,启动…...

react 获取表单中输入框的值

通过使用useState钩子来创建一个状态变量,你可以同时获取多个Input框的值。 1获取input框的值: import React, { useState } from react;function MyComponent() {const [forms, setForms] useState({name: ,nation: ,});const handleInputChange (e…...

[虚幻引擎 UE5] EditableText(可编辑文本) 限制只能输入数字并且设置最小值和最大值

本蓝图函数可以格式化 EditableText 控件输入的数据,让其只能输入一定范围内的整数。 蓝图函数 调用方法 下载蓝图(5.2.1版本)https://dt.cq.cn/archives/618...

Docker技术--Docker容器管理

1.Docker容器相关的指令(单个容器操) 我们之前在Docker中部署了一个实际应用的案例wordpress,其中使用到了一些相关于容器的指令,那么下面我们一起来总结使用。 Docker指令的语法规则如下所示: Docker + 命令关键字 [+参数选项] -1类:关闭、开启、重启、开启自启 systemct…...

three.js(七):内置的二维几何体

二维几何体 PlaneGeometry 矩形平面CircleGeometry 圆形平面RingGeometry 圆环平面 PlaneGeometry 矩形平面 PlaneGeometry(width : Float, height : Float, widthSegments : Integer, heightSegments : Integer) width — 平面沿着X轴的宽度。默认值是1。height — 平面沿着Y…...

golang-bufio 缓冲读

缓冲 IO 计算机中我们常听到这样的两种程序优化方式: 以时间换空间以空间换时间 今天要来看的缓冲IO就是典型的以空间换时间,它的基本原理见上图。简单的解释就是:程序不再直接去读取底层的数据源,而是通过一个缓冲区来进行读取…...

前端 js实现 选中数据 动态 添加在表格中

如下图展示,表格上方有属性内容,下拉选中后,根据选中的内容,添加在下方的表格中。 实现方式,(要和后端约定,因为这些动态添加的字段都是后端返回的,后端自己会做处理&#xff0c…...

MySQL—MySQL主从如何保证强一致性

一、前言 涉及到的东西:两阶段提交,binlog三种格式 1、两阶段提交 在持久化 redo log 和 binlog 这两份日志的时候,如果出现半成功的状态,就会造成主从环境的数据不一致性。这是因为 redo log 影响主库的数据,binlog…...

Lora升级!ReLoRa!最新论文 High-Rank Training Through Low-Rank Updates

目录 摘要1 引言2 相关工作3 方法4 实验5 结果6 结论7 局限性和未来工作 关注公众号TechLead,分享AI与云服务技术的全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员&#xff0…...

gateway动态路由和普通路由+负载均衡,借助eureka

gateway 中的动态路由和普通路由是相互独立配置的注意consumer使用了openFeign远程调用的配置文件中 prefer-ip-address: false 必须为false 否则 gateway的动态路由和负载均衡无法实现 spring:cloud:gateway:enabled: truediscovery:locator:enabled: true #表示动态路由&a…...

HTTP原理与实现

一、基本概念 一、基本原理* 1、全称: HyperText Transfer Protocol (超文本传输协议) 2、底层实现协议:建立在 TCP/IP 上的无状态连接。 3、基本作用:用于客户端与服务器之间的通信,规定客户端和服务器之间的通信格式。包括请…...

现在软件开发app制作还值得做吗

软件开发和制作App还是值得做的,但成功与否取决于多种因素。以下是一些影响你在软件开发和App制作领域发展的因素: 1、市场需求: 开发的App是否满足市场需求?是否解决了用户的问题或提供了有价值的功能?成功的App通常…...

java八股文面试[JVM]——类初始化过程

回顾类加载过程: 知识来源: 【2023年面试】Class初始化过程是什么_哔哩哔哩_bilibili...

什么是SQL注入攻击,解释如何防范SQL注入攻击?

1、什么是SQL注入攻击,解释如何防范SQL注入攻击。 SQL注入攻击是一种常见的网络攻击方式,攻击者通过在Web应用程序的查询语句中插入恶意代码,从而获取数据库中的敏感信息或者执行其他恶意操作。 为了防范SQL注入攻击,可以采取以…...

StringBuilder类分享(2)

一、StringBuilder说明 StringBuilder是一个可变的字符序列。这个类提供了一个与StringBuffer兼容的API,但不保证同步,即StringBuilder不是线程安全的,而StringBuffer是线程安全的。显然,StringBuilder要运行的更快一点。 这个类…...

IDEA查看类中的方法

做个记录 直接查看类中的方法,在打开的时候都会有。 查看单个类中的方法...

MySQL日期格式及日期函数实践

目录 日期格式 日期函数 CURDATE()和CURRENT_DATE()CURTIME()和CURRENT_TIME()NOW()和CURRENT_TIMESTAMP()DATE_FORMAT()DATE_ADD()和DATE_SUB()DATEDIFF()DATE()DAYNAME()和MONTHNAME() 1. 日期格式 在MySQL中,日期可以使用多种格式进行存储和表示。常见的日期格式…...

MySQL项目迁移华为GaussDB PG模式指南

文章目录 0. 前言1. 数据库模式选择(B/PG)2.驱动选择2.1. 使用postgresql驱动2.1. 使用opengaussjdbc驱动 3. 其他考虑因素4. PG模式4.1 MySQL和OpenGauss不兼容的语法处理建议4.2 语法差异 6. 高斯数据库 PG模式JDBC 使用示例验证6. 参考资料 本章节主要…...

流处理详解

【今日】 目录 一 Stream接口简介 Optional类 Collectors类 二 数据过滤 1. filter()方法 2.distinct()方法 3.limit()方法 4.skip()方法 三 数据映射 四 数据查找 1. allMatch()方法 2. anyMatch()方法 3. noneMatch()方法 4. findFirst()方法 五 数据收集…...

Qt中XML文件创建及解析

一 环境部署 QT的配置文件中添加xml选项&#xff1a; 二 写入xml文件 头文件&#xff1a;#include <QXmlStreamWriter> bool MyXML::writeToXMLFile() {QString currentTime QDateTime::currentDateTime().toString("yyyyMMddhhmmss");QString fileName &…...

【pyqt5界面化工具开发-11】界面化显示检测信息

目录 0x00 前言&#xff1a; 一、布局的设置 二、消息的显示 0x00 前言&#xff1a; 我们在10讲的基础上&#xff0c;需要将其输出到界面上 思路&#xff1a; 1、消息的传递 2、布局的设置 先考虑好消息的传递&#xff0c;再来完善布局 其实先完善布局&#xff0c;再来设置消…...

Batbot电力云平台在智能配电室中的应用

智能配电室管理系统是物联网应用中的底层应用场景&#xff0c;无论是新基建下的智能升级&#xff0c;还是双碳目标下的能源管理&#xff0c;都离不开智能配电运维对传统配电室的智慧改造。Batbot智慧电力&#xff08;运维&#xff09;云平台通过对配电室关键电力设备部署传感器…...

链表(详解)

一、链表 1.1、什么是链表 1、链表是物理存储单元上非连续的、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表的指针地址实现&#xff0c;有一系列结点&#xff08;地址&#xff09;组成&#xff0c;结点可动态的生成。 2、结点包括两个部分&#xff1a;&#x…...

最简单vue获取当前地区天气--高德开放平台实现

目录 前言 一、注册成为高德平台开发者 二、注册天气key 1.点击首页右上角打开控制台 2.创建新应用 三、vue项目使用 1.打开vue项目找到public下的index.html&#xff0c;如果是vue3的话直接在主目录打开index.html文件就行&#xff0c;主要就是打开出口文件 ​编辑 2.根据高德…...

大数据处理 正则表达式去除特殊字符 提取中文英文数字

在文本处理中&#xff0c;经常会碰到含有特殊字符的字符串。 比如用户昵称&#xff0c; 小红书文案&#xff0c;等等 都包含了大量表情特殊字符。 这些特殊字符串在ETL处理过程中&#xff0c;经常会引起程序报错&#xff0c;导致致命错误&#xff0c;程序崩溃&#xff1b;或者导…...

Python装饰器(decorators)

本文改编自以下文章&#xff1a;Decorators in Python 装饰器是一个很强大的工具&#xff0c;它允许我们很便捷地修改已有函数或者类的功能&#xff0c;我们可以用装饰器把另一个函数包装起来&#xff0c;扩展一些功能而不需要去修改这个函数代码。 预备知识 在Python中&…...

[halcon] 局部图片保存 gen_circle 和 gen_rectangle2 对比 这怕不是bug吧

背景 我想实现一个功能&#xff0c;获取图片中瑕疵的位置&#xff0c;将瑕疵周边的一块区域抠图并保存。 上代码 一开始我代码这么写的&#xff1a; gen_circle (Rectangle, Row[i], Column[i], 256) reduce_domain(Image,Rectangle,GrayEllipse) crop_domain(GrayEllipse,…...

解析msvcp100.dll丢失的原因及修复方法,教你快速解决的方案

msvcp100.dll文件的丢失&#xff0c;其实也是属于dll丢失的其中一种&#xff0c;因为它是dll文件&#xff0c;大家记住&#xff0c;只要是后缀是dll的文件那么它就是dll文件&#xff0c;只要丢失了dll文件&#xff0c;那么其解决的方法都是大同小异的&#xff0c;唯一不同的是&…...

wordpress 首字母标签页/中国网新山东

主从结构&#xff0d;&#xff0d;保障数据安全&#xff0c;进行分布式下负载均衡 复制 在redis中&#xff0c;用户可通过执行SLAVEOF或设置slaveof选项&#xff0c; 让一个服务器去复制另一个服务器&#xff0c; 称被复制的服务器为主服务器&#xff0c; 对主服务器进行复制…...

cad制图培训/宁波seo排名方案优化公司

2月13日&#xff0c;机房精密空调&#xff0c;压缩机低压&#xff0c;高温报警&#xff0c;时值冬季&#xff0c;早晨一进机房发现高温34℃。 原因&#xff1a;缺气&#xff0c;加氟利昂气体&#xff1b;加入过程注意事项&#xff1a;低压进&#xff0c;高压出&#xff0c;压缩…...

公司网站建设费用会计入账/直播:英格兰vs法国

为了下文讨论方便&#xff0c;我们将要迁移的git仓库称为本地仓库&#xff0c;远程git仓库称为远程仓库。要求保留提交记录&#xff0c;下面是迁移的步骤。 &#xff11;.创建空的远程仓库 1.1.在GitLab web页面创建 创建完成后&#xff0c;将得到git地址&#xff1a;http:/…...

j昆明网站制作公司/中国企业500强排行榜

git pull解决no tracking information问题点击以下链接跳转到原文&#xff1a; http://www.onlycalm.cn/docs/Git/git pull解决no tracking information问题/...

大连房地产网站建设/百度竞价推广常用到的工具

比较重要的一个广播事件&#xff0c;短信 界面布局&#xff0c;比如播放视频&#xff0c;默认是横屏全屏的&#xff0c;清单文件中进行设置&#xff0c; 在<activity/>节点设置屏幕朝向属性&#xff0c;android:screenOrientation”landscape” 设置主题android:theme”a…...

建筑工程网站源码/关键词全网搜索工具

K8s存储 1.K8s存储主要分为&#xff1f; 临时存储、半持久化存储、持久化存储 2.emptyDir 一般来说emptydir的用途都是用来充当临时存储空间&#xff0c;例如一些不需要数据持久化的微服务&#xff0c;我们都可以用emptydir来当做微服务pod的存储方案。 2.1 什么是emptyDi…...