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

mysql数据库如何开启binlog日志

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

binlog

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

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

  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

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

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

  1. 我们可以通过以下命令查询binlog日志的开关是否开启,以及日志的存储位置        
    1. 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对此类操作施加了严格的权限要求。

      2. 当设置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文件中加入以下内容
log-bin=mysql-bin  # 确认是打开状态,并指定存储日志位置
server-id=1  # MySQL将其视为一个正常的从服务器,并对其进行正常的主从复制操作。
binlog_format=row  # DDL 时是明文,DML是加密的
expire-logs-days=20 # 指定日志文件保留天数

最后重启MySQL

systemctl restart mysqld

           


http://www.kler.cn/a/303475.html

相关文章:

  • Tomcat 8.5 源码导读
  • MySQL【五】
  • 第八节 如何结合AAA实现用户远程登录-路由基础
  • 使用 Python 和 OpenCV 实现摄像头人脸检测并截图
  • PCA 原理推导
  • ElasticSearch-全文检索(一)基本介绍
  • cesium.js 入门到精通(7)
  • 修改centos7系统语言en_US.UTF-8为中文zh_CN.UTF-8
  • 高防服务器的优势与劣势分析
  • 【LLM:Fan】
  • 踩坑记:Poco库,MySql,解析大文本的bug
  • 递归、排序、二分查找(C语言实现)
  • mybatis与concat实现模糊查询、mybatis中模糊查询concat传入参数为空时的解决方法
  • nacos安装使用调优及面试题分享
  • Apple发布会都有哪些亮点?如何在苹果手机和电脑上录制屏幕?
  • MATLAB默认工作路径修改
  • 串口通信数据包介绍和包结构定义实例
  • 【Echarts】vue3打开echarts的正确方式
  • real, dimension(3) :: rho1 和 real :: rho1(3) 的区别
  • C++学习笔记----7、使用类与对象获得高性能(一)---- 书写类(1)
  • element表格合并列数据相同合并单元格
  • 【Flutter 面试题】 无需上下文进行路由跳转原理是怎么样的
  • Python用MarkovRNN马尔可夫递归神经网络建模序列数据t-SNE可视化研究
  • 医疗报销|基于springboot的医疗报销系统设计与实现(附项目源码+论文+数据库)
  • RocketMQ 集群搭建详细指南
  • F12抓包10:UI自动化 - Elements(元素)定位页面元素