首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

mysql 修改binlog模式

基础概念

MySQL的Binary Log(二进制日志)记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间。MySQL的二进制日志有三种模式:STATEMENT、ROW和MIXED。

  • STATEMENT模式:每一条会改变数据的sql都会记录在binlog中。优点是日志量小,节省IO,提高性能。缺点是在某些情况下会导致主从数据不一致,比如使用了非确定性函数。
  • ROW模式:不记录每条sql语句的上下文信息,仅需记录哪条数据被修改了,修改成什么样了。而且不会出现某些特定情况下的存储过程、或function,以及trigger的调用和触发无法被正确复制的问题。缺点是会产生大量的日志。
  • MIXED模式:是以上两种模式的混合使用,一般的语句修改使用STATEMENT模式保存binlog,对于STATEMENT模式无法复制的情况,则采用ROW模式保存binlog。

修改binlog模式的优势

  • 数据一致性:ROW模式可以更好地保证主从数据的一致性。
  • 性能优化:STATEMENT模式可以减少日志量,提高性能。
  • 灵活性:MIXED模式结合了前两者的优点,提供了更灵活的选择。

类型与应用场景

  • STATEMENT模式:适用于日志量不大,且可以容忍一定程度数据不一致的场景。
  • ROW模式:适用于对数据一致性要求极高,可以接受较大日志量的场景。
  • MIXED模式:适用于需要平衡数据一致性和性能的场景。

如何修改binlog模式

在MySQL中,可以通过修改配置文件或执行SQL语句来更改binlog模式。

通过配置文件修改

  1. 打开MySQL配置文件my.cnfmy.ini
  2. [mysqld]部分添加或修改以下配置:
代码语言:txt
复制
log-bin=mysql-bin
binlog_format=ROW  # 或者STATEMENT, MIXED
  1. 保存文件并重启MySQL服务。

通过SQL语句修改

代码语言:txt
复制
SET GLOBAL binlog_format = 'ROW';  -- 或者'STATEMENT', 'MIXED'

注意:这种方式设置的binlog模式只对新的连接生效,已经存在的连接不会受到影响。

遇到的问题及解决方法

如果在修改binlog模式后遇到问题,比如主从复制失败,可能的原因包括:

  • 配置错误:检查配置文件或SQL语句是否正确。
  • 版本兼容性:确保主从数据库的MySQL版本兼容。
  • 权限问题:执行修改操作的用户是否有足够的权限。

解决方法:

  • 仔细检查配置文件和SQL语句,确保没有语法错误。
  • 查看MySQL的错误日志,定位具体的错误信息。
  • 如果是权限问题,可以使用具有足够权限的用户重新执行修改操作。

参考链接

MySQL官方文档 - 二进制日志

腾讯云数据库MySQL - 二进制日志

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

MySQL修改binlog保存的天数

查看binlog过期时间,设置的时间为90天,这个值默认是0天,也就是说不自动清理,可以根据生产情况修改,本例修改为7天 mysql> show variables like 'expire_logs_days...> set global expire_logs_days=7; Query OK, 0 rows affected (0.00 sec) 设置之后不会立即清除,触发条件是: binlog大小超过max_binlog_size...手动执行flush logs 重新启动时(MySQL 将会new一个新文件用于记录binlog) 我们执行flush logs; mysql> flush logs; Query OK, 0 rows...affected, 64 warnings (0.16 sec 如果binlog非常多,不要轻易设置改参数,有可能导致io争用,这时候可以使用purge命令予以清除: 将bin.000055之前的binlog...清掉: mysql>purge binary logs to 'bin.000055'; 将指定时间之前的binlog清掉: mysql>purge binary logs before '2017-05

2.8K10

MySQL binlog

优点: 在 row 模式下,bin-log 中可以不记录执行的 SQL 语句的上下文相关的信息,仅仅只需要记录那一条记录被修改了,修改成什么样了。...如果 binlog 采用了 Mixed 模式,那么在以下几种情况下会自动将 binlog模式由 statement 模式变为 row 模式: 当 DML 语句更新一个 NDB(NDB Cluster...模式后,能处理很多原先出现的主键重复问题; 如何选择binlog模式 1、如果生产中使用MySQL的特殊功能相对少(存储过程、触发器、函数)。...3、如果生产中使用MySQL的特殊功能较多,又希望数据最大化一致,此时最好Row level模式;但是要注意,该模式binlog非常“沉重”。...mysqld start 不重启mysql重新加载my.cnf文件的情况下,修改binlog类型的方法: #只对当前会话有效,mysql重启无效 mysql> SET SESSION binlog_format

3K50
  • 为什么要把MySQLbinlog格式修改为row

    我们知道binlog有两种常用的格式,一种是statement(默认),一种是row,很多人都说建议你修改为row格式,那么是为什么呢? 首先我们需要知道它们两个之间有什么不同?...传到备库去的时候,就肯定会删除id=3的行,不会存在主备删除不同行的问题 修改 注意这个例子数据库隔离级别为读提交 ?...可重复读级别下会存在间隙锁,会话2必须等会话1释放锁后才能执行,自然也不会出问题 数据恢复 除了避免主备不一致外,使用row格式的binlog对恢复数据也很友好 delete row格式的binlog会把被删掉的行的整行...所以,如果你在执行完一条delete语句以后,发现删错数据了,可以直接把binlog中记录的delete语句转成insert insert row格式下,insert语句的binlog里会记录所有的字段信息...这时,你直接把insert语句转成delete语句,删除掉这被误插入的一行数据就可以了 update row格式下,binlog里面会记录修改前整行的数据和修改后的整行数据。

    4.5K10

    MySQL Binlog 入门

    主从复制 MySQL 上下分为 SQL 层和引擎层,不同存储引擎中的日志格式是不同的,由于要对多引擎支持,必须在 SQL 层设计逻辑日志以透明化不同存储引擎,而这个逻辑日志就是 binlog 。...当有数据修改请求时,primary 会产生包含该修改操作的 binlog,并发送给 replica,replica 通过回放该 binlog 以执行和 primary 同样的修改。...relay-log ,根据读取的内容转换为 sql 并重放 增量恢复 恢复方式:mysql 将保存在 binlog 日志中指定段落区间的 sql 语句逐个重新执行一次。...在 mysql 体现在写操作时不是立刻更新到磁盘, 而是先落在日志系统. 对支持事务的引擎如 InnoDB 而言,必须要提交了事务才会记录 binlog 。...if (mysql_file_write(info->file, Buffer, length, info->myflags | MY_NABP)) return info->error =

    20010

    MySQL -- 关闭 binlog

    LNMP一键安装包安装的MySQL默认是开启了日志文件的,如果数据操作比较频繁就会产生大量的日志,在/usr/local/mysql /var/下面产生mysql-bin.0000* 类似的文件,而且一般都在几十...MB到几个GB,更甚会吃掉整个硬盘空间,从来导致mysql无法启动或报错,如vps论坛用户的反馈。...如何关闭MySQL的日志功能: 在cmd下进到mysql下的bin目录下,输入mysql -u root -p然后输入密码,成功进去后输入 reset master。...: 修改/etc/my.cnf 文件,找到 log-bin=mysql-bin binlog_format=mixed 再这两行前面加上#,将其注释掉,再执行/etc/init.d/mysql restart...本文以LNMP一件安装包安装的环境为例 除MySQL重启命令和配置文件路径可能略有不同,其他一样。

    9K32

    MySQL binlog日志三种模式选择及配置

    binlog日志三种模式 ROW Level 记录的方式是行,即如果批量修改数据,记录的不是批量修改的SQL语句事件,而是每条记录被更改的SQL语句,因此,ROW模式binlog日志文件会变得很“重”...企业场景如何选择binlog模式 1、 如果生产中使用MySQL的特殊功能相对少(存储过程、触发器、函数)。选择默认的语句模式,Statement Level。...3、 如果生产中使用MySQL的特殊功能较多,又希望数据最大化一致,此时最好Row level模式;但是要注意,该模式binlog非常“沉重”。...查看binlog模式 mysql> show global variables like "%binlog_format%"; +---------------+-----------+ | Variable_name...--+ 配置binlog日志模式 vim my.cnf(在[mysqld]模块中配置) log-bin = /data/3306/mysql-bin binlog_format="STATEMENT"

    67720

    MySQL Binlog 入门

    主从复制 MySQL 上下分为 SQL 层和引擎层,不同存储引擎中的日志格式是不同的,由于要对多引擎支持,必须在 SQL 层设计逻辑日志以透明化不同存储引擎,而这个逻辑日志就是 binlog 。...当有数据修改请求时,primary 会产生包含该修改操作的 binlog,并发送给 replica,replica 通过回放该 binlog 以执行和 primary 同样的修改。...relay-log ,根据读取的内容转换为 sql 并重放 增量恢复 恢复方式:mysql 将保存在 binlog 日志中指定段落区间的 sql 语句逐个重新执行一次。...在 mysql 体现在写操作时不是立刻更新到磁盘, 而是先落在日志系统. 对支持事务的引擎如 InnoDB 而言,必须要提交了事务才会记录 binlog 。...if (mysql_file_write(info->file, Buffer, length, info->myflags | MY_NABP)) return info->error =

    15810

    mysql binlog解析

    1 打开binlog 打开db管理工具,或者登陆mysql服务器:mysql -h127.0.0.1 -P3306 -uroot -p1008611 查看binlog是否打开:show variables...rbr_only=yes是MySQL中的一个配置选项,用于启用基于行的复制(Row-Based Replication,RBR)模式。RBR是MySQL复制的一种模式,它以行为单位复制数据更改操作。...在MySQL复制中,有三种复制模式可供选择:语句复制(Statement-Based Replication,SBR)、混合复制(Mixed-Based Replication,MBR)和基于行的复制(...每个BINLOG Event都有其特定的格式和字段,用于描述和记录相应的数据库更改操作。这些字段包括事件类型、时间戳、数据库名称、表名称、受影响的行数、修改前后的数据值等。...和binlog是不同的模式,不要搞混了。 3.5 注意 从上可以看出,一个事务包含了多个Event并按照顺序存储在binlog中,是一个整体。 如果要处理binlog,则需要按照顺序处理Event。

    72041

    浅谈MySQL Binlog

    1 什么是binlogbinlog是二进制日志文件,用于记录mysql的数据更新或者潜在更新状况,在mysql主从复制中就是依靠的binlog。...binlog记录的所有操作实际上都有对应的事件类型的,MySQL binlog的三种工作模式:Row level(行记录)简介:日志中会记录每一行数据被修改的情况,然后在slave端对相同的数据进行修改...Mixed(混合模式)简介:结合了Row level和Statement level的优点,同时binlog结构也更复杂。binlog的格式:2 binlog有什么作用?...工具来使恢复数据3 binlog的常用操作3.1 启动和关闭binlog启动binlog修改配置文件并重启:[root@iZ2ze4m2ri7irkf6h6n8zoZ mysql]# vim /etc...logs; #获取binlog文件列表mysql> show master status; #查看当前正在写入的binlog文件3.4 切换binlog模式mysql> show global variables

    27200

    MySQL日志 binlog

    MySQL日志保留策略:设置binlog日志保存天数、文件大小限制 一、查看当前binlog保留时长,文件大小限制 ## 查看binlog的保留时长[expire_logs_days] ## 0表示永久保留...mysql> show variables like 'expire_logs_days'; ## 查看binlog的文件大小限制[max_binlog_size] ## 1073741824 mysql...> show variables like 'max_binlog_size'; 二、修改保留时长 文件大小 临时生效: 这种方法调整后,立即生效,但是数据库重启后,会失效 ## 设置日志保留时长为30...500M mysql> set global max_binlog_size = 524288000; Query OK, 0 rows affected (0.00 sec) mysql> flush...: 修改my.cnf文件,永久生效,数据库启动的适合会自动加载该文件 ## 打开my.cnf配置文件 [root@zxy_slave1 mysql]# vim /etc/my.cnf ## [mysqld

    15110

    MySQL:聊聊Binlog

    为什么需要 Binlog 日志数据备份与恢复: Binlog 日志的关键作用之一是用于数据库的增量备份。每次对数据进行修改时,Binlog 记录了这次变更操作。...二阶段提交:为了保证 Binlog 日志与实际数据库操作的原子性,MySQL 使用了二阶段提交策略。首先,将数据操作记录到 Binlog 日志中,然后才执行实际的数据修改。...开启Binlog注意,注意,注意,这个路径是我的docker容器内挂载MySQL服务的路径!!! 如果你不是docker部署,或者挂载路径不一致,请按照自己的修改,不要直接CV,然后发现不好用!!!...MIXED模式:特点:是STATEMENT和ROW两种模式的混合使用。一般的复制使用STATEMENT模式保存binlog,对于STATEMENT模式无法复制的操作使用ROW模式保存binlog。...两个方法解决这个问题在MySQL的配置/my.cnf中将default-character-set=utf8 修改为 character-set-server = utf8但是这需要重启MySQL服务,

    717110

    MySQL Binlog 介绍

    Row 5.1.5版本的MySQL才开始支持 row level 的复制,它不记录sql语句上下文相关信息,仅保存哪条记录被修改。...优点: binlog中可以不记录执行的sql语句的上下文相关的信息,仅需要记录那一条记录被修改成什么了。所以row的日志内容会非常清楚的记录下每一行数据修改的细节。...在Mixed模式下,一般的语句修改使用statment格式保存binlog,如一些函数,statement无法完成主从复制的操作,则采用row格式保存binlogMySQL会根据执行的每一条具体的sql...的字段或者LAST_INSERT_ID()函数;此事件没有被用在binlog_format为ROW模式的情况下 LOAD_EVENT 执行LOAD DATA INFILE 语句时产生此事件,在MySQL...为ROW模式下,对应 insert 操作 UPDATE_ROWS_EVENT 用在binlog_format为ROW模式下,对应 update 操作 DELETE_ROWS_EVENT 用在binlog_format

    1.9K21

    MySQL binlog日志格式 binlog_format

    优点:在 row 模式下,bin-log 中可以不记录执行的 SQL 语句的上下文相关的信息,仅仅只需要记录那一条记录被修改了,修改成什么样了。...而新版本的 MySQL 中对 row 模式也被做了优化,并不是所有的修改都会以 row 模式来记录,比如遇到表结构变更的时候就会以 statement 模式来记录,如果 SQL 语句确实就是 update...当前会话使用 row 模式,并且已打开了临时表; 如果 binlog 采用了 Mixed 模式,那么在以下几种情况下会自动将 binlog模式由 statement 模式变为 row 模式: 1...#binlog_format=ROW binlog_format=MIXED 也可以在运行时动态修改 binlog 的格式。...> SET GLOBAL binlog_format = 'ROW'; mysql> SET GLOBAL binlog_format = 'MIXED'; 两种模式的对比: Statement

    3.6K30

    MySQL清理binlog日志

    1、查看binlog日志 mysql> show binary logs; mysql> show binary logs; ±-----------------±-----------+ | Log_name...purge binary logs to 'mysql-bin.000074'; 3、清理2019-09-09 13:00:00前binlog日志 PURGE MASTER LOGS BEFORE...'2019-09-09 13:00:00'; 4、清理3天前binlog日志 PURGE MASTER LOGS BEFORE DATE_SUB(NOW( ), INTERVAL 3 DAY); -...--时间和文件名一定不可以写错,尤其是时间中的年和文件名中的序号,以防不小心将正在使用的binlog删除!!! --切勿删除正在使用的binlog!!!...5、重置所有的日志 reset master; 6、手动切换binlog日志 flush logs --或者flush binary logs 当你某天把所有binlog日志全干掉,数据库没有产生新的日志的时候就可以用手动切换这个方式来产生了

    2.5K20

    MySQL - binlog同步过程

    binlog作用 MySQLbinlog(二进制日志) 是一种记录数据库所有数据更改操作的日志,可以用于数据库备份、恢复、错误排查、数据同步等操作。...binlogMySQL 中的一个重要组件,能够记录下所有对数据库的修改操作,包括添加、删除和修改数据,以及更改数据库结构(例如:创建、删除表)等操作。...MySQLbinlog 同步原理是主从复制 (Master-Slave Replication),主库 (Master) 将所有数据更改操作记录保存在 binlog 中,并通过网络发送给一个或多个从库...从库将主库的 binlog 文件保存在自己的数据库中,并使用主库的 binlog 位置开始复制。...主库收到确认后,会继续将下一个 binlog 文件发送给从库,直到所有 binlog 文件都被复制完成。

    52930

    MySQL:解析Binlog格式

    MySQL的世界里,二进制日志(Binlog)是一个非常重要的组件,它记录了数据库中所有影响数据内容的事件。 1....理解Binlog格式 MySQLBinlog有三种格式:Statement,Row和Mixed。其中: Statement格式:记录SQL语句本身,可以直观地查看每一个操作。...在Row格式下,Binlog不会记录具体的SQL语句,而是记录被修改的行的数据内容。这就解释了为什么我们无法在Binlog中找到具体的INSERT或UPDATE语句。 2....切换Binlog格式 如果我们需要查看具体的SQL语句,可以考虑临时切换Binlog格式为Statement或Mixed。...可以通过以下命令来修改Binlog格式: SET GLOBAL binlog_format = 'STATEMENT'; 或者: SET GLOBAL binlog_format = 'MIXED';

    63020

    MySQL Binlog的介绍

    : 名称为hostname-bin.xxxxx (重启mysql一次将会自动生成一个新的binlog) 状态的查看:mysql> show variables like '%log_bin%'; mysql.../mysql-bin 关闭二进制日志的方法:log-bin = mysql-bin注释掉即可 2、方法二、不重启修改二进制日志配置,该方法mysql的版本需要5.6以上 SET @@global.log_bin...=1|0  (1为开启,0为关闭) SET @@global.binlog_size=37268(单位bytes) 3、暂停二进制日志 SET sql_log_bin={0|1} 4、修改二进制日志的大小...修改my.cnf参数文件中的max_binlog_size的值; 说明:如果你的二进制文件的大小超过了max_binlog_size,它就是自动创建新的二进制文件。...mysql> flush logs; 6、其他参数: binlog-cache-size=100m 设置二进制日志缓存大小 sync-binlog=N(每个N秒将缓存中的二进制日志记录写回硬盘,默认值为

    3.2K102
    领券