MySQL二进制日志

第1章 二进制日志

作用: 用来记录MySQL工作过程中 所有更变类的语句 可以实现备份恢复 主从复制

默认是关闭的 需要手动开启

1.1 开启二进制日志

在配置文件中添加

vim /etc/my.cnf

添加:

 log_bin=/路径/日志前缀       # 开启并定义日志路径/前缀

 server_id=6                 # 主从同步 确定主从关系

GTID开启

 gtid_mode=ON                # 开启GTID号

enforce_gtid_consistency=ON  

log_slave_updates=ON

目录如果手动设置的需要授权

1.2 日志记录格式

当执行DDL和DCL语句时 执行什么就记录什么

当执行DML时 是由binlog_format参数控制
binlog_format三种模式:

  1. SBR模式 : statement 语句模式 执行什么就纪录什么

  2. RBR模式 : ROW 行模式 记录数据行的变化 (默认模式)

  3. MBR模式 : 混合模式 自动判断用什么方式记录

1.2.1 SBR模式

日志量少 可读性强 但是有可能出现记录错误 比如(记录时间 )

1.2.2 RBR模式

日志量大 可读性弱 记录更加严谨 (明确记录任何变动)

1.3 日志记录内容格式(事件)

binlog(二进制日志)中最小的记录单元是事件(event)

DDL和DCL语句 每一个语句就是一个事件

DML语句 (一个事务) 算一个事件

1.3.1 每个事件用相对位置号标记分隔(position)

用于日志切割 备份恢复使用

image.png

第2章 二进制日志管理

2.1 查看二进制日志

2.1.1 二进制日志基本信息查看

show binary logs; # 查看所有二进制日志信息

show master status; # 查看当前正在使用的二进制日志

image.png

2.2 二进制日志事件查看(events)

show binlog events in ‘日志名’;

Pos : 每个事件的起始位置点

End_log_pos:每个事件的结束位置点 可以用作将来的日志截取标记.

Info : 每个事务做的操作.

头两行无用可抛弃

查看小技巧(shell命令行)

mysql -u -p -e “show binlog events in ‘xxx’” | grep drop # 过滤出删除命令行

2.3 二进制日志内容查看(shell)

[root@db01 /data/binlog]# mysqlbinlog 日志路径  # 命令行查看

[root@db01 /data/binlog]# mysqlbinlog --base64-output=decode-rows -vvv 日志路径 |grep -v SET # 详细显示

[root@db01 /data/binlog]# mysqlbinlog -d 库名 日志路径 |grep -v SET  # 只看某一个库
image.png

第3章 二进制日志截取及数据恢复

数据恢复思路:

不小心误操作了 之后速度补救

3.1 分析日志 得到截取日志的起点和终点

image.png

起点=154

终点=1171

3.2 进行截取

利用命令

mysqlbinlog --start-position=154 --stop-position=1171 日志路径 >/tmp/binlog.sql
截取误操作之前的二进制日志放到一个.sql文件内

--start-position= 截取起点

--stop-position= 截取终点

3.3 恢复日志

set sql_log_bin=0;# 将二进制日志临时关闭

source /tmp/binlog.sql; # 恢复数据

set sql_log_bin=1; # 将二进制日志开启记录

在我们恢复数据时 二进制日志也会记录恢复的sql语句 这些语句只用于恢复 不用记录到二进制文件中

第4章 多文件截取

方法一 利用时间做标识 进行多文件截取 但是不精准 不推荐

mysqlbinlog --start-datetime=xxxx --stop-datetime=xxxxx file01 file02 >aa.sql

image.png

4.1 基于GTID方式记录二进制日志管理

GTID是mysql生成的唯一id编码 从MySQL5.6版本加入的新特性 用来标识每一个二进制日志事件

image.png

4.1.1 开启方式

在配置文件中编写

gtid_mode=ON

enforce_gtid_consistency=ON

log_slave_updates=ON

4.1.2 GTID模式日志管理

  1. 查看事件
    show binlog events in ‘日志’;

       结果    SET @@SESSION.GTID_NEXT= '5f06e487-0438-11ea-b60d-000c2923f27a:1'
    

4.1.3 利用GTID截取多个日志文件

mysqlbinlog –include-gtids='5f06e487-0438-11ea-b60d-000c2923f27a:1-N’--skip-gtids file01 file02 >/xx.sql

注意: 开了gtid 模式, 一定要添加--skip-gtids , 因为mysql 会自动检查gtid 幂等性

第5章 二进制日志的其他操作

5.1 二进制日志滚动

滚动的情况有

  1. 重启mysql

  2. 在mysql中输入 flush logs;

  3. 添加参数 max_binlog_size=阈值(单位字节) # 到达阈值回滚

5.2 每天备份二进制日志

思路 利用flush logs手动回滚后 将回滚日志传输到硬盘中保存

5.3 二进制日志删除

5.3.1 配置自动删除

利用参数expire_logs_days=N 规定日志存活周期

至少预留两轮全备周期+1天的过期事件
默认为0 代表无限制保留


image.png

5.3.2 手工删除

  PURGE BINARY LOGS TO 'mysql-bin.010 ';  # 将指定日志编号前的删除

  PURGE BINARY LOGS BEFORE '2008-04-02 22:46:26'; # 将指定时间之前的删除

5.3.3 全部删除

reset master;

风险很大 不要乱用

你可能感兴趣的:(MySQL二进制日志)