mysql日志管理

 2020-03-27 

错误日志

1
mysql> select @@log_error;

二进制日志

作用

记录MySQL运行过程中,变更类的语句(DDL,DML,DCL…)
可以用来做数据恢复和主从复制。

配置

1
2
3
4
5
6
7
mysql> select @@server_id;         # 主机ID,用来主从复制的不同节点
mysql> select @@log_bin;           # 二进制日志开关,也可以设置binlog存放位置和名称
mysql> select @@log_bin_basename;  # 设置binlog存放位置和名称,可省略
mysql> select @@binlog_format;     # 二进制日志记录格式。保持默认row即可。
mysql> select @@sync_binlog;       # binlog刷新策略。保持默认为1即可。

log_bin=/data/3306/binlog/mysql-bin #文件名称前缀

日志的格式

1
2
3
4
5
6
7
8
DDL 、DCL : 记录MySQL语句
DML       : insert、update、delete。
--- 1. 只会记录已经提交的事务语句。
--- 2. 记录格式受到binlog_format影响。
--- binlog_format=格式?
--- RBR : 行模式。默认模式。
--- SBR :语句模式
--- MBR :混合模式

RBR和SBR区别

1
2
RBR 行模式记录binlog。记录的是9个数据行每行变化日志。日志量相对较大。记录准确。
SBR 语句模式记录binlog。记录的语句本身。SBR,日志量相对较小。记录可能不准确。

记录单元

1
2
3
4
5
6
7
event(事件)binlog 记录的最小单元。
DDL , DCL : 一条语句就是一个event。
DML        : 一个事务型操作有多个event构成
begin;      e1
DML1        e2
DML2        e3
COMMIT;     e4

日志的查看

1
2
3
4
show binary logs; #查看日志的大小
show master status ; #查看当前所在的日志
flush logs; #创建一个新日志,切换过去
show binlog events in 'mysql-bin.000003'; #查看日志里发生的事件,pos(position)标记

1
2
3
4
普通查看
mysqlbinlog /data/3306/binlog/mysql-bin.000004
基于row记录查看
mysqlbinlog --base64-output=decode-rows -v  /data/3306/binlog/mysql-bin.000004

日志实现恢复数据

  1. 查看创建库的起点和删除库的起点
1
mysql -e "show binlog events in 'mysql-bin.000001';" |grep -Ei "drop database test|create database test"
  1. 截取日志
1
mysqlbinlog --start-position=1085 --stop-position=1949 mysql-bin.000004  >/tmp/bin.sql
  1. 恢复数据
1
2
3
mysql> set sql_log_bin=0; #恢复的操作不用写入日志
mysql> source /tmp/bin.sql
mysql> set sql_log_bin=1;