第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三种模式:
SBR模式 : statement 语句模式 执行什么就纪录什么
RBR模式 : ROW 行模式 记录数据行的变化 (默认模式)
MBR模式 : 混合模式 自动判断用什么方式记录
1.2.1 SBR模式
日志量少 可读性强 但是有可能出现记录错误 比如(记录时间 )
1.2.2 RBR模式
日志量大 可读性弱 记录更加严谨 (明确记录任何变动)
1.3 日志记录内容格式(事件)
binlog(二进制日志)中最小的记录单元是事件(event)
DDL和DCL语句 每一个语句就是一个事件
DML语句 (一个事务) 算一个事件
1.3.1 每个事件用相对位置号标记分隔(position)
用于日志切割 备份恢复使用
第2章 二进制日志管理
2.1 查看二进制日志
2.1.1 二进制日志基本信息查看
show binary logs;
# 查看所有二进制日志信息
show master status;
# 查看当前正在使用的二进制日志
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 # 只看某一个库
第3章 二进制日志截取及数据恢复
数据恢复思路:
不小心误操作了 之后速度补救
3.1 分析日志 得到截取日志的起点和终点
起点=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
4.1 基于GTID方式记录二进制日志管理
GTID是mysql生成的唯一id编码 从MySQL5.6版本加入的新特性 用来标识每一个二进制日志事件
4.1.1 开启方式
在配置文件中编写
gtid_mode=ON
enforce_gtid_consistency=ON
log_slave_updates=ON
4.1.2 GTID模式日志管理
-
查看事件
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 二进制日志滚动
滚动的情况有
重启mysql
在mysql中输入
flush logs;
添加参数
max_binlog_size=阈值
(单位字节) # 到达阈值回滚
5.2 每天备份二进制日志
思路 利用flush logs
手动回滚后 将回滚日志传输到硬盘中保存
5.3 二进制日志删除
5.3.1 配置自动删除
利用参数expire_logs_days=N
规定日志存活周期
至少预留两轮全备周期+1天的过期事件
默认为0 代表无限制保留
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;
风险很大 不要乱用