首页 > 数据库 >【MySQL】binlog常见问题

【MySQL】binlog常见问题

时间:2024-08-29 10:15:02浏览次数:8  
标签:binlog 常见问题 log Language 数据库 MySQL 日志 数据

https://mp.weixin.qq.com/s/n9vWkee2N-gpXpOHIYtRJg

关于binlog,这里常见的问题如下:

  1. binlog是什么
  2. binlog的配置和查看
  3. binlog的类型
  4. binlog如何数据恢复
  5. binlog是逻辑日志还是物理日志
  6. binlog的作用

binlog是什么

binlo(binary log),是MySql的二进制日志文件,这个文件记录了我们所有的DDL,DML,TCL等操作,即所有会改变数据库的操作,如表的创建、数据的插入更新和删除等。

题外话,介绍一下数据库的分类

  1. DDL:Data Definition Language,数据定义语言
    1. 用来操作数据库、表、列等,比如 CREATE、ALTER、DROP
  2. DML:Data Manipulation Language,数据操作语言
    1. 用来操作表里的数据,比如 INSERT、UPDATE、DELETE
  3. DCL:Data Control Language,数据控制语言
    1. 用来操作访问权限等,比如 GRANT
  4. DQL:Data Query Language,数据查询语言
    1. 用来查询数据,比如 SELECT
  5. TCL:Transaction Control Language,事务控制语言
    1. 用于数据库的事务管理,比如 COMMIT,ROLLBACK
缩写 全称 描述
DDL Date Definition Language 数据库定义语言,用来操作数据库、表、列等,比如 CREATE、ALTER、DROP
DML Data Manipulation Language 数据库操作语言,用来操作表里的数据,比如 INSERT、UPDATE、DELETE
DCL Data Control Language 数据控制语言,用来操作访问权限等
DQL Data Query Language 数据查询语言,用来查询数据,比如 SELECT
TCL Transaction Control Language 事务控制语言,用于数据库的事务管理,比如 COMMIT,ROLLBACK

binlog的配置和查看

1)binlog查看配置

我们可以通过以下命令查看binlog日志是否打开,以及存储的文件夹:

show variables like '%log_bin%';

 

返回结果如下:

其主要字段含义分表如下:

字段 含义
log_bin 表示是否开启binlog
log_bin_basename 表示的是 binlog 所在的文件夹
log_bin_index 表示的是 binlog 的索引文件,我们可以在其中找到所有的 binlog 日志
sql_log_bin 用于主从复制,这个参数关闭后,主库的改动不会记录到 binlog,不会复制到从库

log_bin_basename 指向的是 binlog 存储的文件夹,在后面我们查看 binlog 具体内容的时候,会需要进入到这个文件夹进行查看。

2) binlog 查看

我们可以通过下面的命令查看全部的binlog文件。

show BINARY LOGS;
show MASTER LOGS;

显示内容如下:

 

binlog的类型

binlog有三种类型,分别是: STATEMENT 、 ROW 和 MIXED 。

这里我们先介绍一下如何查看和修改binlog类型。

1. 查看binlog的类型

命令如下:

SHOW VARIABLES LIKE 'binlog_format';

输出binlog类型

 表示binlog的保存烈性是log

2.修改binlog类型

修改 binlog 类型我们到 binlog 文件中修改,这里我们修改 mysqld.cnf(Linux系统中),修改 binlog_format 的值,没有这个配置项的话加一行,如下:

binlog_format = STATEMENT

保存之后重启MySQL,就可以发现参数发生了变化。

3.binlog的类型。含义及其优缺点

类型 说明 适用场景 优点 缺点
STATEMENT STATEMENT 类型记录的是执行 SQL 语句的内容,比如 INSERT、UPDATE、DELETE 等语句本身。 适用简单SQL语句场景。比如单条数据的插入、更新、删除等。 日志文件小,可读性强 某些复杂问题出现不一致情况
ROW 存储的是数据行的变更,会包含变更前后的内容 精确记录数据行变更的常见 可以精确记录行数据,避免STATEMENT类型可能出现的数据不一致的问题 日志文件大,可读性差
MIXED 根据具体情况自动选择STATEMENT 或ROW类型来记录数据更改   兼顾了 STATEMENT 和 ROW 两种类型的有点,既可以节约空间,也可以精确记录数据变更 因为是系统是自动选择类型来记录,所以可能存在选择不够理想的记录方式从而导致一些不一致或者是性能问题

binlog如何数据恢复

在介绍如何恢复数据前,先介绍一下binlog的文件保存机制。

binlog文件保存机制

  • binlog文件内容为某一刻开始保存的日志记录。
  • 当我们重启时,系统会自动为我们新建一个日志文件。重启之后之后所有数据操作都会被放到新的binlog文件里面。
  • 我们还快通过flush logs 操作手动新建一个binlog日志。

1. 恢复数据前提

  • 已打开binlog日志记录
  • 有一个备份库,这个备份库作用是在误操作后可以快速从最近时间点进行恢复(来源可以每天或更小粒度对目标数据库定时保存)

2.恢复数据步骤

1)停止写入更新操作

2)执行flush logs

3) 导出binlog日志

4)替换

binlog是逻辑日志还是物理日志

介绍一下 MySQL 中关于逻辑日志与物理日志的区别。

所谓逻辑日志指的是记录数据库操作的日志,比如 INSERT、UPDATE 等逻辑操作。

而物理日志则是指记录数据的各种存储细节,比如 MySQL 具体某个数据页的写入和修改数据等。

所以,binlog 则属于逻辑日志。

binlog的作用

数据库的备份和恢复

数据同步(主从赋值模式下,主库的更改会通过binlog的方式同步到从库)

标签:binlog,常见问题,log,Language,数据库,MySQL,日志,数据
From: https://www.cnblogs.com/luyj00436/p/18373411

相关文章

  • MySQL - [19] 关于个人负债为主题的数据库设计
    天生我材必有用,千金散尽还复来。 一、开发环境序号名称版本描述1JDK1.8.0_4012数据库MySQLCommunityServer8.0.373数据库客户端DBeaver21.0.2.2021040420404开发工具IntelliJIDEACommunityEdition2023.3.4  二、数据库设计2.1、......
  • Mysql超详细基础干货——几分钟带你认识mysql
    Mysql数据库事务的特性binlog、redolog和undologMySQL事务实现原理leftjoin、rightjoin和innerjoin区别?说一下mysql的行锁和表锁索引有哪些数据结构Innodb和Myisam存储引擎区别为什么索引底层实现选择B+uuid为什么不适合做主键?1万数据未支付,已支付,支付失败状......
  • MySQL联表查询
    按功能分内连接等值连接非等值连接自连接外连接左外连接右外连接全外连接交叉连接1.内连接(INNERJOIN)获取所有的员工名和其对应的部门名SELECTe.last_name,d.department_nameFROMemployeeseINNERJOINdepartmentsd ONe.department_id=d.departm......
  • MySQL修改密码
    第一种方式:最简单的方法就是借助第三方工具NavicatforMySQL来修改,方法如下:1、登录mysql到指定库,如:登录到test库。2、然后点击上方“用户”按钮。3、选择要更改的用户名,然后点击上方的“编辑用户”按钮。4、出现如图界面,输入新密码,并确认新密码,点击“保存”按钮即可。......
  • MySQL 源码|62 - 词法解析(V2):调用词法解析器的逻辑
    目录文档:MySQL源码|源码剖析文档目录源码位置(版本=MySQL8.0.37):sql/sql_class.cc;sql/sql_yacc.yy前置文档:MySQL源码|33-语法解析:bison基础语法规则MySQL源码|61-词法解析(V2):MySQL语法解析指定的返回值类型的联合体在sql/sql_yacc.yy中定义了%defineapi.pr......
  • mysqldump的使用详解
    一、mysqldump简介mysqldump 是 MySQL 自带的逻辑备份工具。它的备份原理是通过协议连接到 MySQL 数据库,将需要备份的数据查询出来,将查询出的数据转换成对应的insert 语句,当我们需要还原这些数据时,只要执行这些 insert 语句,即可将对应的数据还原。二、备份命令2.1命......
  • mysql格式化日期
    mysql查询记录如果有时间戳字段时,查看结果不方便,不能即时看到时间戳代表的含义,现提供mysql格式换时间函数,可以方便的看到格式化后的时间。1.DATE_FORMAT()函数用于以不同的格式显示日期/时间数据。DATE_FORMAT(date,format)format参数的格式有 %a缩写星期名%b......
  • MYSQL索引的选型比较
    MYSQL索引前言Mysql作为互联网中非常热门的数据库,其底层的存储引擎和数据检索引擎的设计非常重要,尤其是Mysql数据的存储形式以及索引的设计,决定了Mysql整体的数据检索性能。我们知道,索引的作用是做数据的快速检索,而快速检索的实现的本质是数据结构。通过不同数据结构的选......
  • 第42天:WEB攻防-PHP应用&MYSQL架构&SQL注入&跨库查询&文件读写&权限操作 - 快捷方式
    接受的参数值未进行过滤直接带入SQL查询 MYSQL注入:(目的获取当前web权限)1、判断常见四个信息(系统,用户,数据库名,版本)2、根据四个信息去选择方案root用户:先测试读写,后测试获取数据非root用户:直接测试获取数据  #PHP-MYSQL-SQL常规查询获取相关数据:1、数据库版本-看是否......
  • mysql-day01
    SQL-DDL--注释的方式:两个减号或者一个#号--这对于库的DDL--创建库createdatabasedb_youcai;createdatabasedb_youcai02charactersetutf8;--使用库,切换库usedb_youcai;--查询正在使用的库selectdatabase();--查询都有哪些库showdatabases;--......