mysql bin-log学习笔记

北慕城南 提交于 2019-12-05 11:23:59

一、bin-log介绍   

MySQL的二进制日志可以说是MySQL最重要的日志了,它事件形式记录了所有的DDL和DML更新数据语句,以及所执行消耗的时间,MySQL的二进制日志是事务安全型的。

    一般来说开启二进制日志大概会有1%的性能损耗 。其有两个重要的使用场景:
    1、主从复制时备机通过dump master节点的bin-log文件来进行数据同步
    2、通过使用MySQLBinlog工具做数据恢复。
 
bin-log包括两类文件:
索引文件(文件名后缀为.index):用于记录所有的二进制文件,
日志文件(文件名后缀为.00000*):记录数据库所有的DDL和DML(导致数据更新)语句事件。
 

二、Binlog的开启

 
三、bin-log的三种级别及其对比
 
1、statement
 语句级:记录每次执行导致数据改变的sql语句。
优点:节省存储空间
缺点:可能产生数据不一致问题,
比如:
系统时间获取、随机数函数、自定义函数下使用binlog日志进行数据恢复,由于网络延迟可能产生数据不一致问题。
 
2、row
    行级:记录更新后的数据
    优点:其可以精准的记录数据变化,解决主从复制数据不一致问题
    缺点:占用较大空间,特别是在批量数据插入、更新的情况下。
 
3、mixed
    statement的升级版,一定程度上解决了因为一些情况而造成的数据不一致问题
    在涉及到上述如:系统时间获取、随机数函数、自定义函数操作时会自动按照 row的方式进行处理
    优点:节省空间,同时兼顾了一定的一致性。
    缺点:还有些极个别情况依旧会造成不一致,另外statement和mixed对于需要对binlog监控的情况都不方便。
 
四、相关操作
 
参考大佬博客:mysql bin-log日志
 
1、查看bin-log级别
show global variables like '%binlog_format%';

 

2、root用户下直接修改bin-log级别

#STATEMENT MIXED
SET GLOBAL binlog_format = 'ROW';

3、查看log相关属性

show variables like 'log_%';

+----------------------------------------+--------------------------------+

| Variable_name                          | Value                          |

+----------------------------------------+--------------------------------+

| log_bin                                | ON                             |

| log_bin_basename                       | /var/lib/mysql/mysql-bin       |

| log_bin_index                          | /var/lib/mysql/mysql-bin.index |

4、查看所有binlog日志列表

show master logs;

5、查看master状态,展示最近一个binlog操作日志文件名,及其对应事件position值

show master status;

 

6、刷新log日志,自此刻开始产生一个新编号的binlog日志文件

flush logs;

注:每当mysqld服务重启时,会自动执行此命令,刷新binlog日志;在mysqldump备份数据时加 -F 选项也会刷新binlog日志;

 

7、重置(清空)所有binlog日志

reset master;

 

8、查看某个binlog日志内容,通常有两种方式:

1、使用mysqlbinlog自带查看命令法:

注: binlog是二进制文件,普通文件查看器cat more vi等都无法打开,必须使用自带的 mysqlbinlog 命令查看

binlog日志与数据库文件在同目录中(我的环境配置安装是选择在/usr/local/mysql/data中)

在MySQL5.5以下版本使用mysqlbinlog命令时如果报错,就加上 “--no-defaults”选项

mysqlbinlog /var/lib/mysql/mysql-bin.000002

 

 2、在mysql下的格式化展示

show binlog events [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count];

说明:

IN 'log_name' 指定要查询的binlog文件名(不指定就是第一个binlog文件)

FROM pos 指定从哪个pos起始点开始查起(不指定就是从整个文件首个pos点开始算)

LIMIT [offset,] 偏移量(不指定就是0)

row_count 查询总条数(不指定就是所有行)

如:

show binlog events in  'mysql-bin.000001' from 0;

9、数据恢复

 恢复语法格式:
 mysqlbinlog mysql-bin.0000xx | mysql -u用户名 -p密码 数据库名
        常用选项:
          --start-position=953                   起始pos点
          --stop-position=1437                   结束pos点
          --start-datetime="2013-11-29 13:18:54" 起始时间点
          --stop-datetime="2013-11-29 13:21:53"  结束时间点
          --database=zyyshop                     指定只恢复zyyshop数据库(一台主机上往往有多个数据库,只限本地log日志)
总结:所谓恢复,就是让mysql将保存在binlog日志中指定段落区间的sql语句逐个重新执行一次而已。

 

参考文献

mysql bin-log日志

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!