Mysql中Binlog3种格式的介绍与分析_Mysql

来源:脚本之家  责任编辑:小易  

一、2113mysqlbinlog从二进制5261日志读取语句的工具。在二进制日志文件中包含的执4102行过的语句的日志可用来帮助1653从崩溃中恢复。二、调用mysqlbinlog:shell> mysqlbinlog [options] log-files…1)例如,要想显示二进制日志binlog.000003的内容,使用下面的命令:shell> mysqlbinlog binlog.0000003输出包括在binlog.000003中包含的所有语句,以及其它信息例如每个语句花费的时间、客户发出的线程ID、发出线程时的时间戳等等。2)通常情况,可以使用mysqlbinlog直接读取二进制日志文件并将它们用于本地MySQL服务器。3)可以使用–read-from-remote-server选项从远程服务器读取二进制日志。4)当读取远程二进制日志时,可以通过连接参数选项来指示如何连接服务器,但它们经常被忽略掉,除非还指定了–read-from-remote-server选项。这些选项是–host、–password、–port、–protocol、–socket和–user。5)使用mysqlbinlog来读取在复制过程中从服务器所写的中继日志文件。中继日志格式与二进制日志文件相同,问的在清2113楚不如自己动手操5261作一下:1、执行一个load命令2、将binlog转成txt文件查看4102一下转换命令如1653下:mysqlbinlog /data/mysql/binlog/mysql-bin.000288 > test.txtmysql-bin.000288该文件替换为你的数据库bin文件本回答被提问者和网友采纳www.zgxue.com防采集请勿采集本网。

一.Mysql Binlog格式介绍     

mysql binlog日志为什么产生三个 我知道有两种,好像还有一种我记不住了,我一般用第一种, 在备份的时候加入--flush-logs 重新启动mysql服务的时候

Mysql binlog日志有三种格式,分别为Statement,MiXED,以及ROW!

如果主库和从库的binlog-*-db和replicate*-*db配置不当,会导致主从的数据同步出现不一致的问题。 情景描述: 一个master多个slave的结构。主库上执行了UPDATE更新操作,备库上面没有改变: master> update db_name.order set i_title='title' w

1.Statement:每一条会修改数据的sql都会记录在binlog中。

mysql的binlog有2个主要作用:复制和恢复。 其内容记录所有的数据变化(DDL & DML)事件。

优点:不需要记录每一行的变化,减少了binlog日志量,节约了IO,提高性能。(相比row能节约多少性能与日志量,这个取决于应用的SQL情况,正常同一条记录修改或者插入row格式所产生的日志量还小于Statement产生的日志量,但是考虑到如果带条件的update操作,以及整表删除,alter表等操作,ROW格式会产生大量日志,因此在考虑是否使用ROW格式日志时应该跟据应用的实际情况,其所产生的日志量会增加多少,以及带来的IO性能问题。)

首先要确定当前版本是不是mysqlbinlog版本,当不是mysqlbinlog版本时可能会导致出哪些问题,下面通过模拟场景的方法给大家做介绍,希望对大家有所帮助。 看当前mysqlbinlog版本的方法: mysqlbinlog --version mysqlbinlog Ver 3.3 for Linux at

缺点:由于记录的只是执行语句,为了这些语句能在slave上正确运行,因此还必须记录每条语句在执行的时候的一些相关信息,以保证所有语句能在slave得到和在master端执行时候相同 的结果。另外mysql 的复制,像一些特定函数功能,slave可与master上要保持一致会有很多相关问题(如sleep()函数, last_insert_id(),以及user-defined functions(udf)会出现问题).

通过mysqlbinlog 导出来的日志文件,mysql如论如何都认不到 mysqlbinlog mysql-bin.000067 >xxx.sql mysqlbinlog xxx.sql 这里就报错了 ERROR: File is not a binary log file mysqlbinlog --start-position=433760210 --stop-position=43376122

使用以下函数的语句也无法被复制:

* LOAD_FILE()

* UUID()

* USER()

* FOUND_ROWS()

* SYSDATE() (除非启动时启用了 --sysdate-is-now 选项)

同时在INSERT ...SELECT 会产生比 RBR 更多的行级锁

2.Row:不记录sql语句上下文相关信息,仅保存哪条记录被修改。

优点: binlog中可以不记录执行的sql语句的上下文相关的信息,仅需要记录那一条记录被修改成什么了。所以rowlevel的日志内容会非常清楚的记录下每一行数据修改的细节。而且不会出现某些特定情况下的存储过程,或function,以及trigger的调用和触发无法被正确复制的问题

缺点:所有的执行的语句当记录到日志中的时候,都将以每行记录的修改来记录,这样可能会产生大量的日志内容,比如一条update语句,修改多条记录,则binlog中每一条修改都会有记录,这样造成binlog日志量会很大,特别是当执行alter table之类的语句的时候,由于表结构修改,每条记录都发生改变,那么该表每一条记录都会记录到日志中。

3.Mixedlevel: 是以上两种level的混合使用,一般的语句修改使用statment格式保存binlog,如一些函数,statement无法完成主从复制的操作,则采用row格式保存binlog,MySQL会根据执行的每一条具体的sql语句来区分对待记录的日志形式,也就是在Statement和Row之间选择一种.新版本的MySQL中队row level模式也被做了优化,并不是所有的修改都会以row level来记录,像遇到表结构变更的时候就会以statement模式来记录。至于update或者delete等修改数据的语句,还是会记录所有行的变更。

二.Binlog基本配制与格式设定

1.基本配制

Mysql BInlog日志格式可以通过mysql的my.cnf文件的属性binlog_format指定。如以下:

binlog_format           = MIXED                 //binlog日志格式

log_bin                  =目录/mysql-bin.log    //binlog日志名

expire_logs_days    = 7                //binlog过期清理时间

max_binlog_size    100m                    //binlog每个日志文件大小

2.Binlog日志格式选择

Mysql默认是使用Statement日志格式,推荐使用MIXED.

由于一些特殊使用,可以考虑使用ROWED,如自己通过binlog日志来同步数据的修改,这样会节省很多相关操作。对于binlog数据处理会变得非常轻松,相对mixed,解析也会很轻松(当然前提是增加的日志量所带来的IO开销在容忍的范围内即可)。

3.mysqlbinlog格式选择

mysql对于日志格式的选定原则:如果是采用 INSERT,UPDATE,DELETE 等直接操作表的情况,则日志格式根据 binlog_format 的设定而记录,如果是采用 GRANT,REVOKE,SET PASSWORD 等管理语句来做的话,那么无论如何 都采用 SBR 模式记录

三.Mysql Binlog日志分析

通过MysqlBinlog指令查看具体的mysql日志,如下:

///SET TIMESTAMP=1350355892/*!*/;BEGIN/*!*/;# at 1643330#121016 10:51:32 server id 1 end_log_pos 1643885 Query thread_id=272571 exec_time=0 error_code=0SET TIMESTAMP=1350355892/*!*/;Insert into T_test….)/*!*/;# at 1643885#121016 10:51:32 server id 1 end_log_pos 1643912 Xid = 0COMMIT/*!*/;///

1.开始事物的时间:

SET TIMESTAMP=1350355892/*!*/;BEGIN

2.sqlevent起点

#at 1643330 :为事件的起点,是以1643330字节开始。

3.sqlevent 发生的时间点

#121016 10:51:32:是事件发生的时间,

4.serverId

server id 1 :为master 的serverId

5.sqlevent终点及花费时间,错误码

end_log_pos 1643885:为事件的终点,是以1643885 字节结束。

execTime 0: 花费的时间

error_code=0:错误码

Xid:事件指示提交的XA事务

Mixed日志说明:

在slave日志同步过程中,对于使用now这样的时间函数,MIXED日志格式,会在日志中产生对应的unix_timestamp()*1000的时间字符串,slave在完成同步时,取用的是sqlEvent发生的时间来保证数据的准确性。另外对于一些功能性函数slave能完成相应的数据同步,而对于上面指定的一些类似于UDF函数,导致Slave无法知晓的情况,则会采用ROW格式存储这些Binlog,以保证产生的Binlog可以供Slave完成数据同步。

以上在开发通过mysql binlog完成数据同步的模块前调研时所积累的一点资料,如有不对的地方请指正!

总结

到此这篇关于Mysql中Binlog3种格式的介绍与分析的文章就介绍到这了,更多相关Mysql中Binlog3种格式内容请搜索真格学网以前的文章或继续浏览下面的相关文章希望大家以后多多支持真格学网! 您可能感兴趣的文章:MySQL数据库恢复(使用mysqlbinlog命令)mysql 正确清理binlog日志的两种方法MySQL中的binlog相关命令和恢复技巧Mysql Binlog快速遍历搜索记录及binlog数据查看的方法Mysql Data目录和 Binlog 目录 搬迁的方法mysql开启binlog步骤讲解Mysql数据库之Binlog日志使用总结(必看篇)MySQL 自动清理binlog日志的方法Mysql Binlog数据查看的方法详解mysql对binlog的处理说明

在cmd下或者linux终端命令行执行mysqlbinlog -u root -p密码 二进制文件名 >d:\\test.sql,mysqlbinlog 文件名 > 文件名内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • mysql 数据库访问类
  • innodb 类型mysql恢复表结构与数据
  • mysql字符集乱码及解决方案分享
  • 解决mysql登录错误:''access denied for user ''root''@''local
  • 详解mysql 获取某个时间段每一天、每一个小时的统计数据
  • mysql触发器使用详解
  • mysql中常见的几种日志汇总
  • mysql cluster集群的初级部署教程
  • 有关sql模糊查询
  • myeclipse连接mysql数据库的方法(一)
  • mysql中如何用mysqlbinlog工具将日志文件生成txt文...
  • mysql load写binlog吗
  • 如何查看mysql binlog格式
  • mysql中binlog文件默认多大
  • mysql binlog日志为什么产生三个
  • 为什么 MySQL的 binlog-do-db 选项是危险的
  • mysql binlog 记录哪些操作
  • 主从库的binlog格式需要一致吗
  • mysqlbinlog的问题求助
  • 当mysqlbinlog版本与mysql不一致时可能导致出哪些问题
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全mssqlmysqlmariadboracledb2mssql2008mssql2005sqlitepostgresqlmongodbredisaccess数据库文摘数据库其它首页mysql数据库恢复(使用mysqlbinlog命令)mysql 正确清理binlog日志的两种方法mysql中的binlog相关命令和恢复技巧mysql binlog快速遍历搜索记录及binlog数据查看的方法mysql data目录和 binlog 目录 搬迁的方法mysql开启binlog步骤讲解mysql数据库之binlog日志使用总结(必看篇)mysql 自动清理binlog日志的方法mysql binlog数据查看的方法详解mysql对binlog的处理说明mysql 数据库访问类innodb 类型mysql恢复表结构与数据mysql字符集乱码及解决方案分享解决mysql登录错误:""access denied for user ""root""@""local详解mysql 获取某个时间段每一天、每一个小时的统计数据mysql触发器使用详解mysql中常见的几种日志汇总mysql cluster集群的初级部署教程有关sql模糊查询myeclipse连接mysql数据库的方法(一)mysql安装图解 mysql图文安装教程can""""t connect to mysql servwindows下mysql5.6版本安装及配置mysql字符串截取函数substring的mysql创建用户与授权方法mysql提示:the server quit withmysql日期数据类型、时间类型使用mysql——修改root密码的4种方法mysql之timestamp(时间戳)用法mysql update语句的用法详解mysql的日期和时间函数大全解决mysql5.7中文乱码的问题mysql timestamp的类型与时区实例详解centos6.5中rpm包安装mysql5.7初始化出错linux安装mysql5.6.24使用文字说明innodb_flush_method取值方法(实例讲解)linux下启动多个mysql服务器例子安装mysql 8.0.17并配置远程访问的方法mysql忘记密码的几种解决方案mysql创建数据库,添加用户,用户授权实操方
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved