前言:
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的主从复制是依赖这个实现的,以后在深入了解下。