错误日志
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 | mysql -e "show binlog events in 'mysql-bin.000001';" |grep -Ei "drop database test|create database test" |
- 截取日志
1 | mysqlbinlog --start-position=1085 --stop-position=1949 mysql-bin.000004 >/tmp/bin.sql |
- 恢复数据
1 2 3 | mysql> set sql_log_bin=0; #恢复的操作不用写入日志 mysql> source /tmp/bin.sql mysql> set sql_log_bin=1; |