1. 作用

  1. 主从复制 需要利用到二进制
  2. 数据恢复时 需要二进制日志

    2. 配置

    默认是不开启的
    需要在配置文件中

    1. server_id=1 #0-65535
    2. log_bin=/data/binlog/mysql-bin #/data/binlog 是目录 mysql-bin是日志名称前缀
    3. binlog_format=row #5.7的默认配置

    3. 二进制日志记录的内容

  3. 记录了数据库所有的变更类的操作日志 ddl dcl dml

  4. ddl 和dcl 以语句的方式按照原样记录
  5. 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 影响

  1. 日志截取时更方便了。不需要找结束位置
  2. 自从复制时,不需要自行定位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 信息