视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
MySQL中BinaryLog二进制日志文件的基本操作命令小结
2020-11-09 20:53:45 责编:小采
文档


MySQL Binary Log也就是常说的bin-log, ,是mysql执行改动产生的二进制日志文件,其主要作用有两个:
* 数据回复
* 主从数据库。用于slave端执行增删改,保持与master同步。

1.开启binary log功能

     需要修改mysql的配置文件,本篇的实验环境是win7,配置文件为mysql安装目录\MySQL Server 5.1下的my.ini,添加一句log_bin = mysql_bin即可 

 eg: 
 [mysqld] 
 ...... 
 log_bin = mysql_bin 
 ...... 
 log_bin是生成的bin-log的文件名,后缀则是6位数字的编码,从000001开始,按照上面的配置,生成的文件则为: 
 mysql_bin.000001 
 mysql_bin.000002 
 ...... 

  
    配置保存以后重启mysql的服务器,用show variables like  '%bin%'查看bin-log是否开启,如图: 

2.查看产生的binary log

   bin-log因为是二进制文件,不能通过记事本等编辑器直接打开查看,mysql提供两种方式查看方式,在介绍之前,我们先对数据库进行一下增删改的操作,否则log里边数据有点空。 

 create table bin( id int(10) primary key auto_increment,name varchar(255));

(测试前我已经建表) 

 insert into bin(name) values ('orange'); 

     1.在客户端中使用  show binlog events in 'mysql_bin.000001'  语句进行查看,为了排序美观,可以在结尾加\G使结果横变纵,此时结尾无需加;语句结束符。
      eg:

mysql> show binlog events in 'mysql_bin.000001'\G 
...............省略............... 
*************************** 3. row *************************** 
 Log_name: mysql_bin.000001 
 Pos: 174 
Event_type: Intvar 
 Server_id: 1 
End_log_pos: 202 
 Info: INSERT_ID=2 
*************************** 4. row *************************** 
 Log_name: mysql_bin.000001 
 Pos: 202 
Event_type: Query 
 Server_id: 1 
End_log_pos: 304 
 Info: use `test`; insert into bin(name) values ('orange') 
*************************** 5. row *************************** 
...............省略............... 
  • Log_name:此条log存在那个文件中,从上面可以看出这2条log皆存在与mysql_bin.000001文件中。
  • Pos:log在bin-log中的开始位置
  • Event_type:log的类型信息
  • Server_id:可以查看配置中的server_id,表示log是那个服务器产生
  • End_log_pos:log在bin-log中的结束位置
  • Info:log的一些备注信息,可以直观的看出进行了什么操作
  • 2.用mysql自带的工具mysqlbinlog,这是我们就需要知道bin-log存在硬盘的什么位置,win7默认存在C:\ProgramData\MySQL\MySQL Server 5.1\data文件夹下面,如果没有此文件夹,那我们可以通过配置文件中的  datadir="C:/ProgramData/MySQL/MySQL Server 5.1/Data/" 定位,如果还没有,那我就会说“各个系统的搜索功能都做的不错!”。这种查看方式就没那个美观了,如下

    C:\ProgramData\MySQL\MySQL Server 5.1\data>mysqlbinlog mysql_bin.000001 
    /*!40019 SET @@session.max_insert_delayed_threads=0*/; 
    /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; 
    DELIMITER /*!*/; 
    # at 4 
    #121015 16:35:56 server id 1 end_log_pos 106 Start: binlog v 4, server v 5.1.51-community-log created 121015 16:35:56 at startup 
    ROLLBACK/*!*/; 
    BINLOG ' 
    7Mp7UA8BAAAAZgAAAGoAAAAAAAQANS4xLjUxLWNvbW11bml0eS1sb2cAAAAAAAAAAAAAAAAAAAAA 
    AAAAAAAAAAAAAAAAAADsyntQEzgNAAgAEgAEBAQEEgAAUwAEGggAAAAICAgC 
    '/*!*/; 
    # at 106 
    #121015 16:36:51 server id 1 end_log_pos 174 Query thread_id=2 exec_time=0 error_code=0 
    SET TIMESTAMP=1350290211/*!*/; 
    SET @@session.pseudo_thread_id=2/*!*/; 
    SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1, @@session.autocommit=1/*!*/; 
    SET @@session.sql_mode=1344274432/*!*/; 
    SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/; 
    /*!\C utf8 *//*!*/; 
    SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/;
    SET @@session.lc_time_names=0/*!*/; 
    SET @@session.collation_database=DEFAULT/*!*/; 
    BEGIN 
    /*!*/; 
    # at 174 
    #121015 16:36:51 server id 1 end_log_pos 202 Intvar 
    SET INSERT_ID=3/*!*/; 
    # at 202 
    #121015 16:36:51 server id 1 end_log_pos 309 Query thread_id=2 exec_time=0 error_code=0 
    use test/*!*/; 
    SET TIMESTAMP=1350290211/*!*/; 
    insert into bin(name) values('xishizhaohua') 
    /*!*/; 
    # at 309 
    #121015 16:36:51 server id 1 end_log_pos 336 Xid = 28 
    COMMIT/*!*/; 
    # at 336 
    #121015 16:37:25 server id 1 end_log_pos 379 Rotate to mysql_bin.000002 pos: 4 
    DELIMITER ; 
    # End of log file 
    ROLLBACK /* added by mysqlbinlog */; 
    /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/; 
    
    

    虽然排版有点乱,但从图中我们可以得到更多信息,如时间戳,自增的偏移,是否自动提交事务等信息。如下图为从中提取的一部分。

    3.利用bin_log恢复数据

        (1).最长用的就是回复指定数据端的数据了,可以直接恢复到数据库中: 

     mysqlbinlog --start-date="2012-10-15 16:30:00" --stop-date="2012-10-15 17:00:00" mysql_bin.000001 |mysql -uroot -p123456 
    

          亦可导出为sql文件,再导入至数据库中: 

     mysqlbinlog --start-date="2012-10-15 16:30:00" --stop-date="2012-10-15 17:00:00" mysql_bin.000001 >d:\1.sql 
     source d:\1.sql 
    

         (2).指定开始\结束位置,从上面的查看产生的binary log我们可以知道某个log的开始到结束的位置,我们可以在恢复的过程中指定回复从A位置到B位置的log.需要用下面两个参数来指定: 

     --start-positon="50" //指定从50位置开始 
     --stop-postion="100"//指定到100位置结束 
    

       最后介绍几个bin_log的操作:
       (1).产看最后一个bin日志文件是那个,现在位置

        (2).启用新的日志文件,一般备份完数据库后执行

        (3).清空现有的所用bin-log

    4.binary log相关变量和参数

    命令行参数

      --log-bin [=file_name]

      设置此参数表示启用binlog功能,并制定路径名称。

      --log-bin-index[=file]

      设置此参数是指定二进制索引文件的路径与名称。

      --max_binlog_size

     Binlog最大值,最大和默认值是1GB,该设置并不能严格控制Binlog的大小,尤其是Binlog比较靠近最大值而又遇到一个比较大事务时,

    为了保证事务的完整性,不可能做切换日志的动作,只能将该事务的所有SQL都记录进当前日志,直到事务结束。

      --binlog-do-db=db_name

      此参数表示只记录指定数据库的二进制日志

      --binlog-ignore-db=db_name

      此参数表示不记录指定的数据库的二进制日志

    系统变量

      log_bin

      binlog_cache_size

      此参数表示binlog使用的内存大小,可以通过状态变量binlog_cache_use和binlog_cache_disk_use来帮助测试。

      max_binlog_cache_size

      此参数表示binlog使用的内存最大的尺寸

      binlog_cache_use

      使用二进制日志缓存的事务数量

      binlog_cache_disk_use

      使用二进制日志缓存但超过binlog_cache_size值并使用临时文件来保存事务中的语句的事务数量。

      binlog_do_db

      binlog_ignore_db

      sync_binlog

      这个参数直接影响mysql的性能和完整性。

      sync_binlog=0:

      当事务提交后,Mysql仅仅是将binlog_cache中的数据写入binlog文件,但不执行fsync之类的磁盘,同步指令通知文件系统将缓存刷新到磁盘,而让Filesystem自行决定什么时候来做同步,这个是性能最好的。

      sync_binlog=0,在进行n次事务提交以后,Mysql将执行一次fsync之类的磁盘同步指令,通知文件系统将Binlog文件缓存刷新到磁盘。

      Mysql中默认的设置是sync_binlog=0,即不做任何强制性的磁盘刷新指令,这时性能是最好的,但风险也是最大的。一旦系统Crash,在文件系统缓存中的所有Binlog信息都会丢失。

    您可能感兴趣的文章:

  • 解析mysql二进制日志处理事务与非事务性语句的区别
  • MySQL日志文件详解
  • Mysql日志文件和日志类型介绍
  • mysql二进制日志文件恢复数据库
  • 教你自动恢复MySQL数据库的日志文件(binlog)
  • mysql日志文件在哪 如何修改MySQL日志文件位置
  • 解决Mysql收缩事务日志和日志文件过大无法收缩问题
  • 下载本文
    显示全文
    专题