mysql二进制日志bin-log的基本了解,以及简单使用的案例

前言:

    bib-log二进制日志,是从网上查询主从复制的配置中了解的,下面摘抄至网上的基本介绍: 

 binlog 基本认识
    MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的。

    一般来说开启二进制日志大概会有1%的性能损耗(参见MySQL官方中文手册 5.1.24版)。二进制有两个最重要的使用场景: 
    其一:MySQL Replication在Master端开启binlog,Mster把它的二进制日志传递给slaves来达到master-slave数据一致的目的。 
    其二:自然就是数据恢复了,通过使用mysqlbinlog工具来使恢复数据。
    
    二进制日志包括两类文件:二进制日志索引文件(文件名后缀为.index)用于记录所有的二进制文件,二进制日志文件(文件名后缀为.00000*)记录数据库所有的DDL和DML(除了数据查询语句)语句事件。


一、如何开启这个日志呢?

    1.1   在my.ini中配置log-bin,它等于配置了三个变量 log_bin, l og_bin_basename, log_bin_index 

[mysqld]
basedir=D:\mysql-5.6.10-win32
datadir=D:\mysql-5.6.10-win32\data
port=3306
server_id=3306
#开启二进制日志
log-bin=mysql-bin

    参数解释: 第一个是开启,第二个是文件存放的目录及文件前缀(mysql-bin.000001),第三个是文件索引(等于n个版本的日志文件,用mysql-bin.index记录版本)

    1.2 配置好了就要查看下,默认是不开启的,用show variables like 'log_%' 查询。

    

    备注:  show variables like 一般用于一些固定配置量  show status like 一般查一些运行时状态,比如 show variables like 'max_connections%', 查最大链接配置。show status like 'thread%' 查运行中打开了多少线程。

     

    二、基本的一些命令操作

        flush logs 生成一份新的文件比如mysql-bin.000002 (重启就会生成一份新的文件)

        show master status   查询当前的记录文件和最大position

        show binlog events   查询里面的内容,默认查询最新一份的。

         ---------------------show binlog events in mysql-bin.000002 from 4 limit 10  //指定文件,指定位置,指定数量

     mysqlbinlog mysql-bin.00000x --start-pos=startPosition --stop-pos=endPosition | mysql -uroot -p 123456 myTestDatabase  //注意:这个不是mysql语句,是./bin下执行的,用来恢复数据用。没加数据库是全部数据库。

    三、 实战

        3.1    flush logs ; 首先刷一份新的log出来,记录新的操作日志。

        3.2  建立一个库,一个表,插入N条数据

create database if not EXISTS mytest; #创建库
use mytest;
drop table if exists `blog`; #删除表
create table `blog` (  #创建表
	`id` int(11) not null auto_increment,
	`title` varchar(200) not null,
	`content` varchar(8000) not null,
	PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
INSERT INTO `blog` VALUES ('6', 'werw', 'erwer'); #插入数据
INSERT INTO `blog` VALUES ('7', 'weewr', 'werwer');
INSERT INTO `blog` VALUES ('8', 'werw', 'erwerwer');
INSERT INTO `blog` VALUES ('9', 'werwe', 'rwerwer');
INSERT INTO `blog` VALUES ('10', 'werw', 'erwer');
INSERT INTO `blog` VALUES ('11', 'werw', 'erwerwer');

     3.3 然后,我不小心删掉了2条数据

delete from blog where id in (6,7);

    3.4 执行刷新(等于把错误定位到上一个文件,这样更小的范围,方便分析和恢复)。备注:错误发生在5号文件

    

    

    3.5 执行恢复  (--no-defaults 解决一个报错)

        mysqlbinlog --no-defaults D:/mysql-5.6.10-win32/data/mysql-bin.000005 --start-pos=120 --stop-pos=2208  | mysql -uroot -p123456

    

   这是数据恢复后的样子.

    

          mysqlbinlog  其他更多参数:--start-datetime     --stop-datetime

          暂时只是初步了解下。目前线上服务器没有开启这个东西,就只靠每天mysqldump备份一次,mysql的主从复制是依赖这个实现的,以后在深入了解下。

    

猜你喜欢

转载自blog.csdn.net/shuixiou1/article/details/80384629