1. 作用
- 主从复制 需要利用到二进制
-
2. 配置
默认是不开启的
需要在配置文件中server_id=1 #0-65535log_bin=/data/binlog/mysql-bin #/data/binlog 是目录 mysql-bin是日志名称前缀binlog_format=row #5.7的默认配置
3. 二进制日志记录的内容
记录了数据库所有的变更类的操作日志 ddl dcl dml
- ddl 和dcl 以语句的方式按照原样记录
- DML
仅仅记录已提交的事务
DML statment row mixed 通过binlog_format 进行控制
statement:SBR:语句模式记录日志,做什么命令,记录什么命令
ROW :RBR: 行模式,数据行的变化
mixed :mbr 混合模式
SBR : 可读性较强,对于范围操作来讲节省空间,但可能会记录不准确,例如数据内 有 now()参数的时候
ROW: 记录准确。 #一锤定音
4. 简单查看
show variables like '%logbin%'; #是否启用了日志
show master status; #当前使用了那个日志
show binlog events in 'mysql-bin-00001';
前两行为标识符 可以忽略
POS end_log_pos 为事件的开始和结束位置
mysqlbinlog mysql-bin-000001 #-d 过滤某个库
一个at 到下一个at 。begin 到commit
mysqlbinlog --base64-output=decode-rows -vvv mysql-bin.000001 # 稍微能看懂的格式显示
5. 日志截取
mysqlbinlog --start-position=2 --stop-pisition=5 mysql-bin.000001 > /tmp/1.sql
该sql文件可以直接 souce
日志恢复时需要执行一个参数
set sql_log_bin=0; # 临时关闭日志记录
set sql_log_bin=1; # 开启日志记录
6. GTID的应用
全局事务编号,对每个事务都会生成一个GTID号码。(一个事件为几个事务。)
6.1 gitid的组成
server_uuid:TID
server_uuid 默认存储在 数据目录的 auto.conf内
TID 则从1开始 自增长
server_uuid:1
server_uuid:1-2
server_uuid:1-3
6.2 幂等性
如果使用带有GTID的日志进行恢复时,检测到相同的GITD号会自动跳过的。
6.3 影响
- 日志截取时更方便了。不需要找结束位置
- 自从复制时,不需要自行定位binlog的postition
6.4 配置
gtid-mode=on enforce-gtid-consistency=true #强制一致性6.5 截取及恢复
```sql set @@SESSION.GTID_NEXT= ‘SERVER_UUID:TID’ #找到这一行内容 该行内容下面对应的 就是该事务的操作
mysqlbinlog —incluede-gtids=`server_uuid:TID’ mysql-bin.000001 > /tmp/2.sql
截取的该段日志恢复时会报错,这是因为我们忽略了某个东西
```sql
GITD的幂等性,会认为 我们已经执行过了该操作,所以会报错
正确的截取法:
mysqlbinlog --skip-gtids --incluede-gtids=`server_uuid:TID' mysql-bin.000001 > /tmp/2.sql
--skip-gtids #在导出时,忽略原有的gtid信息,恢复时生成最新的GITD 信息
