二进制日志简介
二进制日志: 该日志文件会以二进制形式记录数据库的各种操作,但是不记录查询语句。
MySQL 的二进制日志 binlog 可以说是 MySQL 最重要的日志,它记录了所有的 DDL 和 DML 语句(除了数据查询语句Select、Show等),以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的。Binlog 的主要目的是复制和恢复。
MySQL的二进制日志(Binary Log)是一个二进制文件,主要用于记录修改数据或有可能引起数据变更的MySQL语句。二进制日志(Binary Log)中记录了对MySQL数据库执行更改的所有操作,并且记录了语句发生时间、执行时长、操作数据等其它额外信息,但是它不记录SELECT、SHOW等那些不修改数据的SQL语句。二进制日志(Binary Log)主要用于数据库恢复和主从复制,以及审计(Audit)操作。
环境准备
准备一台Centos7服务器
系统: Centos7.3
内存:1G
cpu: 2核
IP地址:10.0.0.42
# 安装数据库服务
yum -y install mariadb mariadb-server
# 启动数据库
systemctl start mariadb
# 编辑修改数据库配置文件
vim /etc/my.cnf
然后重启mysqld服务
systemctl restart mariadb
查看数据库服务状态
查看二进制日志是否开启
# 登陆至数据库
mysql
show variables like '%log_bin%';
查看二进制日志文件名
show binary logs;
查看正在使用哪一个日志
show master status \G;
show master status ;
查看二进制文件内容
show binlog events in 'mysql-bin.000003';
查看mysql数据库存储引擎
show variables like '%storage_engine%';
查看数据库目录
show variables like '%dir%';
显示指定的二进制日志文件(例如:mysqld.000003)的内容
mysqlbinlog mysql-bin.000004
# 创建两个库
create database wg charset=utf8;
create database szm charset=utf8;
use szm;
# 创建表
create table szm(id int unsigned auto_increment primary key not null, name varchar(30) not null );
# 插入数据
insert szm values(0,22);
# 查询表中数据
select * from szm;
# 进入到第二个库里面
use wg;
# 创建表
create table xxo(id int unsigned auto_increment primary key not null, name varchar(30) not null );
# 插入数据
insert xxo values(0,111);
# 模拟数据库被误删
drop database wg;
drop database szm;
使用二进制日志还原数据
1、通过位置还原
//从规定的起始位置还原到现在
//从最开始还原到规定的结束位置
mysqlbinlog --start-position=555 --stop-position=1566 /var/lib/mysql/mysql-bin.000004 | mysql -uroot
2、通过时间还原
//从规定的起始时间还原到规定的结束时间
//从最开始还原到规定的结束时间
mysqlbinlog --start-datetime='2019-12-27 8:54:43' --stop-datetime='2019-12-27 9:40:29 ' /var/lib/mysql/mysql-bin.000004| mysql -uroot