关于mysql binlog日志的格式说明

Binary Log 记录方式

Row Level

Binary Log会记录成每一行数据被修改的形式,然后在Slave端再对相同的数据进行修改。

如果修改了表的结构,那么binlog日志记录的是重新创建表,在插入字段、update等操作语句,而不是的alter的动作。

优点:在Row Level模式下,Binnary Log可以不记录执行的Query语句的上下文相关信息,只要记录哪一行修改了,修改成什么样子。Row Level会详细的记录下每一行数据的修改细节,而且不会出现某个特定情况下的存储过程,或Function,以及Trigger的调用和触发无法被正确复制问题。

缺点:产生大量的日志内容。

Statment Level

每一条会修改的SQL语句都会记录到Master的Binnary中。Slave端在复制的时候,SQL线程会解析成和原来Master端执行过相同的SQL语句,并再次执行。

优点:首先,解决了Row Level下的缺点,不须要记录每一行的数据变化,减少了Binnary Log日志量,节约了IO成本,提高了性能。

缺点:由于它是记录的执行语句,为了让这些语句在Slave端也能正确执行。那么它还必须记录每条语句在执行时的一些相关信息,即上下文信息,以保证所有语句在Slave端被执行的时候能够得到和在Master端执行时相同的结果。另外,由于MySQL发展比较快,很多新功能不断加入,使得MySQL复制遇到了不小的挑战,复制时设计的内容岳父在,越容易出bug。在Statement Level下,目前已发现不少的情况下会造成MySQL的复制问题。主要是在修改数据使用了某些特定的函数货功能后,出现,比如:Sleep()函数在有些版本中就不能正确的复制,在存储过程中使用了last_insert_id()函数,可能会使Slave和Master的到不一致的ID,等等。

Mixed Level

在Mixed模式下,MySQL会根据执行的每一条具体的SQL语句来区分对待记录的日志形式,也就是在Statement和Row之间选择一种。除了MySQL认为通过Statement方式可能造成复制过程中Master和Slave之间产生不一致数据。(如特殊Procedure和Funtion的使用,UUID()函数的使用等特殊情况)时,它会选择ROW的模式来记录变更之外,都会使用Statement方式。

时间: 2024-09-29 05:02:30

关于mysql binlog日志的格式说明的相关文章

Mysql Binlog 三种格式介绍及分析

一.Mysql Binlog格式介绍       Mysql binlog日志有三种格式,分别为Statement,MiXED,以及ROW! 1.Statement:每一条会修改数据的sql都会记录在binlog中. 优点:不需要记录每一行的变化,减少了binlog日志量,节约了IO,提高性能.(相比row能节约多少性能与日志量,这个取决于应用的SQL情况,正常同一条记录修改或者插入row格式所产生的日志量还小于Statement产生的日志量,但是考虑到如果带条件的update操作,以及整表删除

Mysql Binlog三种格式介绍及分析【转】

一.Mysql Binlog格式介绍       Mysql binlog日志有三种格式,分别为Statement,MiXED,以及ROW! 1.Statement:每一条会修改数据的sql都会记录在binlog中. 优点:不需要记录每一行的变化,减少了binlog日志量,节约了IO,提高性能.(相比row能节约多少性能 与日志量,这个取决于应用的SQL情况,正常同一条记录修改或者插入row格式所产生的日志量还小于Statement产生的日志量,但是考虑到如果带条 件的update操作,以及整表

mysql binlog日志自动清理及手动删除

说明:当开启mysql数据库主从时,会产生大量如mysql-bin.00000* log的文件,这会大量耗费您的硬盘空间.mysql-bin.000001mysql-bin.000002mysql-bin.000003mysql-bin.000004mysql-bin.000005-有三种解决方法:1.关闭mysql主从,关闭binlog:2.开启mysql主从,设置expire_logs_days:3.手动清除binlog文件,> PURGE MASTER LOGS TO 'MySQL-bin

【转载】mysql binlog日志自动清理及手动删除

说明:当开启mysql数据库主从时,会产生大量如mysql-bin.00000* log的文件,这会大量耗费您的硬盘空间.mysql-bin.000001mysql-bin.000002mysql-bin.000003mysql-bin.000004mysql-bin.000005…有三种解决方法:1.关闭mysql主从,关闭binlog:2.开启mysql主从,设置expire_logs_days:3.手动清除binlog文件,> PURGE MASTER LOGS TO ‘MySQL-bin

MySQL grant用户授权 和 MYSQL bin-log日志 实操讲解

这一次我来简单地实际操作讲解下grant用户授权和bin-log日志,博文中配了很多操作过程中的图作为步骤流程讲解,大家跟着过程自己在电脑操作一遍,基本上就懂这方面的相关知识了.不多说,直接进入知识讲解. 远程主机连接用户授权 例:192.168.1.111mysql服务器 和192.168.1.112mysql服务器 一.MySQL grant用户授权  192.168.1.111登陆mysql ,给用户授权 查询下是否添加此用户 这样就成功给IP为192.168.1.112的主机授权mysq

MYSQL bin-log日志

MYSQL bin-log日志主要用于数据备份和恢复:其文件中保存了数据库的所有增删改操作 1.开启bin-log日志: 2.查看bin-log日志 连接成功数据库后 可以查看log_bin是否开启成功 查看bin-log日志 3.与bin_log有关的日志刷新 此时就会多一个最新的bin_log日志 可以再/usr/local/mysql/var中看到多了个mysql-bin.xxxxxx 查看最后一个bin-log日志 清空所有bin-log日志

MySQL binlog 日志

MySQL数据库正式上线之后,打开binlog 日志,发现磁盘激增100G.根源在 my.cnf 里面binlog Mysql>show variables like '%log%'; 查到此参数的相关设定: |expire_logs_days              |0| 这是一个global的参数,默认是0,也就是logs 不过期,我们可以将其设定为30天为一个轮询,命令如下所示: Set  global expire_logs_days=30; 这样重启mysql 也不会收到影响 删除

删除MySQL binlog日志的方法

对于比较繁忙的OLTP(在线事务处理)系统,由于每天生成日志量大,这些日志如果长时间不清除,将会对磁盘空间带来很大的浪费.因此,定期删除日志是DBA维护MySQL数据库的一个重要工作内容.下面跟大家分享几种删除MySQL binlog的方法.出自<深入浅出MySQL>第二版 注意事项: 1.MySQL binlog日志是数据库灾难后恢复的关键,删除前一定要做好备份 2.如果做了MySQL主从,从服务器,会读取主服上的binlog,所以删除前要注意 3.个人建议,若真要删除binlog腾出硬盘空

Mysql binlog日志及binlog恢复数据库操作

初识MySQL 日志binlogMySQL重要log,二进制日志文件,记录所有DDL和DML语句(除select),事件形式记录,包含语句所执行的消耗时间,事务安全型.DDL(数据库定义语言),主要命令有create.alter.drop等.DDL主要定义或改变表table的结构.数据类型.建表时使用.MDL(数据操纵语言),主要命令有select.update.insert.delete. mysqlbinlog常见选项:--start-datetime:从二进制中读取指定时间戳.--stop