您的位置:首页 > 数据库 > MySQL

MySQL二进制日志文件格式

2017-12-28 13:33 891 查看
    在MySQL中,二进制日志文件是非常重要的一种日志文件,MySQL数据库的高可用架构都是以二进制日志文件为基础的,在备份数据库时,除了要备份数据文件之外,二进制日志文件也一定要备份,如果忽略了这一点,可能会给以后的工作中造成很大的麻烦,MySQL数据库的二进制日志文件中存储的是所有执行成功的,注意是执行成功的对MySQL数据库的修改事件,包括增删改查时间和对表结构的修改事件。那么二进制日志文件以什么样的格式来存储这些内容呢?有三种格式:1.STATEMENT、2.ROW、3.MIXED,在MySQL中配置二进制日志文件的格式可以通过参数binlog_format来设置。

    STATEMENT

    以段的格式存储二进制日志,使用这种格式,数据库会将每个事件的SQL语句进行存储,这种格式的优点是日志规模比较小,可以减少磁盘和网络IO;缺点是,由于记录的是SQL语句,在主从复制架构模式下,为了保证从服务器上执行SQL语句的结果与主服务器一致,那么就必须记录上下文信息,但即使是这样,当在修改数据时使用了uuid(),user()这样的非确定性函数,还是可能会造成主从服务器数据的不一致性。

    ROW

    以行记录的形式保存二进制日志,在MySQL5.7之前的版本,默认的二进制日志格式是STATEMENT,到5.7之后默认的格式就是ROW了。以这种格式记录二进制日志会记录每一行数据的修改,显然这种格式的二进制日志文件通常会比STATEMENT格式的二进制日志文件大,比如一条SQL语句修改了100行记录,那么在STATEMENT格式的二进制日志文件中只会保留一条SQL语句,而在ROW格式的文件中会保留100个行记录。在主从复制架构下,ROW格式的二进制日志文件势必会造成更大的磁盘和网络IO操作。这种格式的优点是使主从复制数据一致性能得到更大的保障,而且对每一行数据的修改比基于STATEMENT的修改的复制效率要高,可以降低主从复制延迟。

    MySQL数据库的开发者考虑到ROW格式的二进制日志文件过大的问题,设置了binlog_log_image参数,这个参数有三个值分别是:FULL、MINIMAL、NOBLOB。FULL表示记录数据行的所有信息,无论字段是否被更新;MINIMAL表示只记录数据行上给更新了的字段;NOBLOB表示记录TEXT和BLOB类型以外的字段。

    MIXED

    这种日志格式不是一种独立的日志格式,混合模式是STATEMENT和ROW格式的混合使用,判断使用哪种格式由数据库决定。

    以上就是MySQL数据库二进制日志文件的几种格式,个人在实际使用过程中,基本都是使用ROW格式配以MINIMAL以保证数据的安全和尽量降低日志的大小。可以根据各自系统处理的业务的实际情况和网络等因素,选择适合自己的日志文件格式。

   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息