笔记来源:MySQL面试必备二之binlog日志 - 知乎 (zhihu.com),具体可跳转查看更详细知识。
对于一个 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,即 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 |
-- 删除数据库 |
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.cnf
或my.ini
),在[mysqld]
部分设置binlog_format
选项为你想要的格式(例如STATEMENT
、ROW
或MIXED
),然后重启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
。。待续