mysql数据库如何开启binlog日志

首先我们要知道什么是binlog日志

binlog

MySQL数据库的二进制日志文件,记录了数据库更改的所有操作,但不包括SELECT和SHOW这类操作,这些操作对数据进行修改、管理操作、数据库修改等操作都会被记录在日志中。

对于一个sql,它常常被分为以下几种类型:

DDL:Data Definition Language,数据定义语言

复制代码
  #### 用来操作数据库、表、列等,比如 CREATE、ALTER、DROP

DML:Data Manipulation Language,数据操作语言

复制代码
  #### 用来操作表里的数据,比如 INSERT、UPDATE、DELETE

DCL:Data Control Language,数据控制语言

复制代码
  #### 用来操作访问权限等,比如 GRANT

DQL:Data Query Language,数据查询语言

复制代码
  #### 用来查询数据,比如 SELECT

TCL:Transaction Control Language,事务控制语言

复制代码
  #### 用于数据库的事务管理,比如 COMMIT,ROLLBACK

(binlog是不会记录查询操作的)

接下来我看先查看一下当前数据库是否已经开启:

  1. 我们可以通过以下命令查询binlog日志的开关是否开启,以及日志的存储位置
    1.

    sql 复制代码
    show variables like '%log_bin%';
  2. 执行上面的sql会得到下面结果

  3. 其主要字段含义分别如下:

    1. log_bin 表示是否开启 binlog(ON开启,OFF关闭)

    2. log_bin_basename 表示的是 binlog 所在的文件夹,在后面我们查看 binlog 具体内容的时候,会需要进入到这个文件夹进行查看。

    3. log_bin_index 表示的是 binlog 的索引文件,我们可以在其中找到所有的 binlog 日志

    4. log_bin_trustfunctioncreators是一个全局系统变量,主要影响MySQL对存储函数创建、修改权限的控制以及这些函数在二进制日志记录中的行为

      1. 在默认设置下(log_bin_trust_function_creators=OFF),创建或修改存储函数的用户不仅需要拥有常规的CREATE ROUTINE或ALTER ROUTINE权限,还需要额外的SUPER特权。这是因为存储函数如果未被声明为确定性(DETERMINISTIC)或明确表示不修改数据(通过NO SQL或READS SQL DATA特性),则可能存在对复制和数据恢复不利的行为,如产生不可重复的结果或执行非预期的更新操作。为了保障数据一致性,MySQL对此类操作施加了严格的权限要求。

      当设置log_bin_trust_function_creators=ON 时,这一严格要求被放宽。用户无需具备SUPER特权也能创建或修改存储函数,即使这些函数没有明确声明为确定性或不修改数据。这种设置下,MySQL假设函数创建者了解并能够确保他们所创建的函数对复制环境是安全的,从而降低了权限门槛。
      3.

      关于log_bin_trustfunctioncreators更多详细内容请参考博客:深入理解MySQL中的log_bin_trust_function_creators系统变量_log-bin-trust-function-creators-CSDN博客

    5. log_bin_use_v1_row_events: on 表示使用版本1二进制日志行,off 表示使用版本2二进制日志行

    6. sql_log_bin 用于主从复制,这个参数关闭后,主库的改动不会记录到 binlog,不会复制到从库

  4. 要想开启binlog日志,需要在/etc/my.cnf文件中加入以下内容

bash 复制代码
log-bin=mysql-bin  # 确认是打开状态,并指定存储日志位置
server-id=1  # MySQL将其视为一个正常的从服务器,并对其进行正常的主从复制操作。
binlog_format=row  # DDL 时是明文,DML是加密的
expire-logs-days=20 # 指定日志文件保留天数

最后重启MySQL

bash 复制代码
systemctl restart mysqld
相关推荐
在未来等你2 小时前
SQL进阶之旅 Day 21:临时表与内存表应用
sql·mysql·postgresql·database·temporary-table·memory-table·sql-optimization
敖云岚2 小时前
【Redis】分布式锁的介绍与演进之路
数据库·redis·分布式
LUCIAZZZ3 小时前
HikariCP数据库连接池原理解析
java·jvm·数据库·spring·springboot·线程池·连接池
我在北京coding3 小时前
300道GaussDB(WMS)题目及答案。
数据库·gaussdb
小Tomkk3 小时前
阿里云 RDS mysql 5.7 怎么 添加白名单 并链接数据库
数据库·mysql·阿里云
明月醉窗台4 小时前
qt使用笔记二:main.cpp详解
数据库·笔记·qt
沉到海底去吧Go5 小时前
【图片自动识别改名】识别图片中的文字并批量改名的工具,根据文字对图片批量改名,基于QT和腾讯OCR识别的实现方案
数据库·qt·ocr·图片识别自动改名·图片区域识别改名·pdf识别改名
老纪的技术唠嗑局5 小时前
重剑无锋,大巧不工 —— OceanBase 中的 Nest Loop Join 使用技巧分享
数据库·sql
未来之窗软件服务6 小时前
JAVASCRIPT 前端数据库-V6--仙盟数据库架构-—-—仙盟创梦IDE
数据库·数据库架构·仙盟创梦ide·东方仙盟·东方仙盟数据库
寒山李白6 小时前
MySQL复杂SQL(多表联查/子查询)详细讲解
sql·mysql·子查询·多表联查