美文网首页
MySQL听讲(八)——参数、日志与恢复

MySQL听讲(八)——参数、日志与恢复

作者: 靈08_1024 | 来源:发表于2019-07-24 10:35 被阅读0次

bin log

bin log的格式
  • statement:记录原生SQL;
  • row:记录所属表(Table_map)和操作行为(如删除为Delete_rows,在操作行为中有操作的数据所有信息)。
  • mixed:MySQL根据自己的情况来选择用哪个。

在某些情况下,如果用row会记录很多很多的日志,但是对于statement只是一条SQL。但是statement的SQL语句会出现索引选择错误的情况,比如带有索引的limit 1这种,选择哪个索引最终出现的数据完全不一样。
但是row这种方式记录的却是绝对准确的,它是根据这条数据的ID来的。所以,一般都建议使用row这种方式。

格式状态的设置和查看:
查看:SHOW VARIABLES LIKE '%binlog_format%';
设置:set GLOBAL BINLOG_FORMAT ='MIXED';
在客户端需要另开窗口就可以看见了。

bin log的查看

查看bin log里记录的内容

show binlog events in 'binlog.000001';

其中binlog.000001是bin log的日志文件名。在该命令下会看到bin log的起止位置,如下面的8900,2738,2973都是在bin log中的位置。

在row模式下,上面的语句是看不到row内部执行的。所以需要执行下面的语句:

mysqlbinlog -vv data/master.000001 --start-position=8900;

下面是用bin log来恢复数据:

mysqlbinlog master.000001 --start-position=2738 --stop-position=2973 | mysql -h127.0.0.1 -P13000 -u$user -p$pwd;

双一设置

双一设置有很高的安全保障,但是插入的速度也慢了。
show VARIABLES like 'innodb_flush_log_at_trx_commit';
show VARIABLES like 'sync_binlog';

switch(innodb_flush_log_at_trx_commit){
      case 0:
        log buffer将每秒一次地写入log file,并且log file的flush(刷到磁盘)操作同时进行.该模式下,在事务提交的时候,不会主动触发写入磁盘的操作。
        break;
      case 1:
        每次事务提交时MySQL都会把log buffer的数据写入log file,并且flush(刷到磁盘)中去;
        break;
      case 2:
        每次事务提交时MySQL都会把log buffer的数据写入log file.但是flush(刷到磁盘)操作并不会同时进行。该模式下,MySQL会每秒执行一次 flush(刷到磁盘)操作。
}

当sync_binlog =N (N>0) ,MySQL 在每写 N次 二进制日志binary log时,会使用fdatasync()函数将它的写二进制日志binary log同步到磁盘中去。
如果启用了autocommit,那么每一个语句statement就会有一次写操作;否则每个事务对应一个写操作。

相关文章

网友评论

      本文标题:MySQL听讲(八)——参数、日志与恢复

      本文链接:https://www.haomeiwen.com/subject/ekabeqtx.html