mysql binlog日志及基于binlog故障恢复

二进制日志(binlog)

  1. 作用

主从依赖二进制日志;数据恢复需要依赖于二进制日志

  1. 配置

vi /etc/my.cnf

  • 默认没有开启
  • server_id=6  (小于65535)
  • log_bin=/data/binlog/mysql-bin (必须提前创建data/binlog目录,mysql-bin是二进制文件名前缀,后缀自动生成mysql-bin.00001 ......)
  • binlog_format=row  (5.7默认开启)
  • sync_binlog=1  (每次事务提交都立即刷写binlog到磁盘)
  • mysql binlog日志及基于binlog故障恢复_第1张图片

 

  1. 二进制日志清理
  • 自动清理:

查看日志保留天数:show variables like '%expire%';

    expire_logs_days=8   (依据至少一轮全备周期长度的过期事件)

  • 手工:

mysql> help purge;

PURGE BINARY LOGS TO 'mysql-bin.000003';   //删除000003之前日志

PURGE BINARY LOGS BEFORE '2008-04-02 22:46:26';  

reset master;  //日志重新从000001开始,主从避免使用

 

  1. 二进制记录内容:
  • 记录数据库所有变更类的操作日志 (DDL DCL  DML)
  • 对于DDL和DCL以语句的方式原模原样记录
  • 对于DML,记录已提交的事务

    DML的记录格式(statement、row、mixed),通过binlog_format=row参数控制

说明:

 statement:  SBR,语句模式记录sql

 row:       RBR,行模式,数据行的变化

 mixed:     MBR,混合模式

 SBR和RBR的区别,怎么选择?

  ----SBR 可读性强,节约空间,日志量少,但是可能有记录不准确的情况。

  ----RBR 可读性差,日志量大,不会出现记录错误。高可用环境依赖RBR

  对数据严谨性较高,选择RBR。

 

  1. 二进制日志记录单元
  • 最小单元--event 事件

         DDL语句每个语句就是一个单元

              create database testdb;事件1

         DML:一个事务包含了多个语句

               begin;             事件1  

                a                事件2

                b                事件3

               commit;            事件4

  • event事件的开始和结束

   作用:方便从日志冲截取需要的日志信息

  1. 二进制日志管理
  • 查看二进制日志

mysql> show variables like '%log_bin%';     

     ====>log_bin_basename       /data/binlog/mysql-bin  

  • 查看所有已存在的二进制日志

mysql> show binary logs;

mysql> flush logs;

mysql> show binary logs;

 

  • 查看正在使用的二进制日志

    mysql> show master status;

  • 查看二进制日志事件

mysql> create database mybinlog;

mysql> use mybinlog;

mysql> create table t1 (id int );

mysql> insert into t1 values(1),(2);

mysql>     show master status;

mysql> show binlog event in 'mysql-bin.000002'  limit 5;

mysql binlog日志及基于binlog故障恢复_第2张图片

 

  • 查看二进制事件内容

mysqlbinlog  mysql-bin.000002

mysqlbinlog --base64-output=decode-rows -vvv mysql-bin.000002

mysqlbinlog -d ygb mysql-bin.000002   //按库截取二进制内容

mysql binlog日志及基于binlog故障恢复_第3张图片

 

  • 截取二进制日志

mysqlbinlog --start-position=219 --stop-position=325  mysql-bin.000002 >aaa.sql

 

  1. 通过二进制日志恢复数据

1)模拟数据

mysql> create database ygb charset utf8mb4;

mysql> use ygb;

mysql> create table t1 (id int );

mysql> insert into t1 values(1),(2);

  1. 删库

 

mysql> drop database ygb;

3)基于binlog恢复

  • mysql> show master status;  //确认使用哪个日志
  • mysql> show binlog events in 'mysql-bin.000002';    //查看二进制事件  找到起始位置和结束位置
  • mysql binlog日志及基于binlog故障恢复_第4张图片

 

  • 截取二进制日志

mysqlbinlog --start-position=828 --stop-position=1418  mysql-bin.000002 >aaa.sql  

 

  • 临时关闭二进制日志 mysql> set sql_log_bin=0
  • 恢复:  mysql> source  /data/binlog/aaa.sql
  • 开启二进制日志mysql> s set sql_log_bin=1

你可能感兴趣的:(mysql)