笔记

万物寻其根,通其堵,便能解其困。
  博客园  :: 新随笔  :: 管理

Mysql BinLog/数据持久化笔记

Posted on 2024-08-14 10:45  草妖  阅读(10)  评论(0)    收藏  举报

笔记来源:MySQL面试必备二之binlog日志 - 知乎 (zhihu.com),具体可跳转查看更详细知识。

对于一个 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,即 binary log,是 MySQL 的二进制日志文件,这个文件记录了我们所有的 DDL,DML,TCL 等操作,比如表的创建,数据的插入、更新和删除等。

binlog 查看配置

show variables like '%log_bin%';  -- 查看配置是否开启
Variable_name Value
log_bin ON
log_bin_basename C:\Users\namejr\mysql-8.3.0-winx64\data\binlog
log_bin_index C:\Users\namejr\mysql-8.3.0-winx64\data\binlog.index
log_bin_trust_function_creators OFF
sql_log_bin ON

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

如何配置MySQL以实现持久化:确保使用支持ACID的存储引擎:例如InnoDB,它是MySQL的默认存储引擎,支持事务、回滚、崩溃恢复和并发控制。
-- 开启binlog
SET GLOBAL log_bin ON;
或者在MySQL配置文件(my.cnf或my.ini)中设置:
[mysqld]
log_bin = /path/to/your/binlog

调整InnoDB日志文件大小:这有助于提高性能和持久性。
[mysqld]
innodb_log_file_size = 512M


 --查看binlog文件(两个都一样)

 show binary logs;

 show master logs;

Log_name File_size Encrypted
binlog.000081 181 No
binlog.000085 2220000 No

-- 查看具体执行内容
show binlog events in 'binlog.000085';
Log_name Pos Event_type Server_id End_log_pos Info
binlog.000085 235 Query 1 381

-- 删除数据库
DROP DATABASE IF EXISTS Lgdb_ZYK_DX

binlog.000085 381 Anonymous_Gtid 1 460 SET @@SESSION.GTID_NEXT= 'ANONYMOUS'
 

binlog 的类型

三种类型
STATEMENT
  STATEMENT 类型记录的是执行 SQL 语句的内容,比如 INSERT、UPDATE、DELETE 等语句本身。

ROW
  ROW 类型记录的是执行 SQL 语句前后的变更,会包含变更前后完整数据行的内容。

MIXED
  MIXED 类型则是 STATEMENT 和 ROW 两种类型的综合,它会根据具体的情况来选择 STATEMENT 或者是 ROW 其中一种类型来进行存储。


--查看binlog类型
SHOW VARIABLES LIKE 'binlog_format';

-- 修改binlog步骤:

如果你需要改变binlog的格式,你需要做的是停止MySQL服务器,编辑配置文件(通常是my.cnfmy.ini),在[mysqld]部分设置binlog_format选项为你想要的格式(例如STATEMENTROWMIXED),然后重启MySQL服务器。

以下是如何修改配置文件并重启MySQL服务的示例步骤(以Linux系统为例):

  1、找到MySQL的配置文件my.cnf,通常位于/etc/mysql//etc/etc/mysql/mysql.conf.d/目录下。

  2、编辑配置文件,在[mysqld]部分添加或修改binlog_format行:

    [mysqld]
    binlog_format=STATEMENT

  3、保存配置文件。

  4、重启MySQL服务:sudo systemctl restart mysql

 

 

。。待续