mysql的归档日志:bin-log

bin-log基本信息

  • Binlog在MySQL的Server层实现(引擎共用)
  • Binlog为逻辑日志,记录的是一条语句的原始逻辑
  • Binlog不限大小,追加写入,不会覆盖以前的日志
  • 如果,我们误删了数据库,可以使用binlog进行归档!要使用binlog归档,首先我们得记录binlog,因此需要先开启MySQL的binlog功能。

主要的作用

  • 数据库备份操作,删除数据后的恢复操作。
  • 主从复制。

binlog格式

  • Statement:每一条会修改数据的sql都会记录在binlog中。不需要记录每一行的变化,减少了binlog日志量,节约了IO,提高性能。可能导致(主从复制)的结果不一致。
  • Row:不记录sql语句上下文相关信息,仅保存哪条记录被修改。不会出现(主从复制)的结果不一致!所有的执行的语句当记录到日志中的时候,都将以每行记录的修改来记录,这样可能会产生大量的日志内容。
  • Mixed:折中处理方案,实际上就是Statement与Row的结合。一般的语句修改使用statment格式保存binlog,如一些函数,statement无法完成主从复制的操作,则采用row格式保存binlog。

配置my.cnf:

#配置开启binlog
log-bin=/usr/local/mysql/data/binlog/mysql-bin
#注意5.7以及更高版本需要配置本项:server-id=123456(自定义,保证唯一性);
#binlog格式,有3种statement,row,mixed
binlog-format=ROW
#表示每1次执行写入就与硬盘同步,会影响性能,为0时表示,事务提交时mysql不做刷盘操作,由系统决定
sync-binlog=1

binlog的命令

--  查看bin-log是否开启
show variables like '%log_bin%';
--  会多一个最新的bin-log日志
flush logs;
-- 查看最后一个bin-log日志的相关信息
show master status; 
-- 清空所有的bin-log日志
reset master; 

查看binlog内容

-- 外部查看
/usr/local/mysql/bin/mysqlbinlog --no-defaults /usr/local/mysql/data/binlog/mysql-bin.000001

-- mysql内部查看
-- 只查看第一个binlog文件的内容
mysql> show binlog events;

-- 查看指定binlog文件的内容
mysql> show binlog events in 'mysql-bin.000001';

-- 获取binlog文件列表
mysql> show binary logs;

简单的观察bin-log日志

  • begin,commit这种关键词信息,只要在binlog当中看到了,你就可以理解为begin-commit之间的信息是一个完整的事务逻辑,然后再根据位置position判断恢复即可。

数据归档操作

-- 从bin-log恢复数据
-- 恢复全部数据
/usr/local/mysql/bin/mysqlbinlog --no-defaults /usr/local/mysql/data/binlog/mysql-bin.000001 |mysql -uroot -p test(数据库名)
-- 恢复指定位置数据
/usr/local/mysql/bin/mysqlbinlog --no-defaults --start-position="408" --stop-position="731"  /usr/local/mysql/data/binlog/mysql-bin.000001 |mysql -uroot -p test(数据库)
-- 恢复指定时间段数据
/usr/local/mysql/bin/mysqlbinlog --no-defaults /usr/local/mysql/data/binlog/mysql-bin.000001 --stop-date= "2018-03-02 12:00:00"  --start-date= "2019-03-02 11:55:00"|mysql -uroot -p test(数据库)

posted @ 2021-12-20 22:25  程序java圈  阅读(270)  评论(0编辑  收藏  举报