MySQL binlog三种模式

1.statement 

statement 记录的是sql语句。比如一条sql,update table_user set age =20 where id between 1 and 100。这条sql会更新100条数据,但是statement 模式下只会记录这条sql语句。

优点:不需要记录数据的变化,减少了bin log文件大小,减少IO负担。

缺点:会导致主从不一致的情况。mysql主从基于binlog,如果master节点的sql包含now()、uuid()等动态函数,会导致主从不一致。例如:update table_user set user_id=uuid() where id =1, uuid() 在从节点重放时又会生成新的uuid,从而导致主从数据不一致。

2.row

row基于行的复制,会清晰记录每条数据被修改的详细情况,保证了数据的一致性。比如一条sql,update table_user set age =20 where id between 1 and 100。这条sql会更新100条数据,那row模式就会在binlog记录100条update语句。

优点:会清晰记录每条数据被修改的详细情况,保证了数据的一致性

缺点:row格式的缺点在于比较占用空间,比如更新十万行数据,那么row格式将会把10万数据记录下来。

3.mixed

对于DDL(数据库定义语言CREATE、ALTER等)只对SQL语句进行记录,对DML( INSERT、DELETE、UPDATE、SELECT语句)操作则会进行判断,如果判断会造成主从不一致,就会采用row格式记录,反之则用statement格式记录

优点:既节省空间,又提高数据库性能,保证数据同步时的一致性。

缺点:无法对误操作数据进行单独恢复。

相关推荐

  1. lvs模式

    2024-06-06 19:32:04       27 阅读
  2. MySQL binlog模式

    2024-06-06 19:32:04       30 阅读
  3. vim 存在模式

    2024-06-06 19:32:04       23 阅读
  4. ORACLE DG 保护模式

    2024-06-06 19:32:04       55 阅读
  5. VMware虚拟机网络模式

    2024-06-06 19:32:04       35 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-06 19:32:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-06 19:32:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-06 19:32:04       82 阅读
  4. Python语言-面向对象

    2024-06-06 19:32:04       91 阅读

热门阅读

  1. Spring Boot中如何接入jetcache缓存

    2024-06-06 19:32:04       32 阅读
  2. selenium中switch_to.window切换窗口的用法

    2024-06-06 19:32:04       35 阅读
  3. 【杂记-浅析TCP预测攻击】

    2024-06-06 19:32:04       29 阅读
  4. 政府窗口服务第三方评估主要内容

    2024-06-06 19:32:04       29 阅读
  5. Docker 安装部署(CentOS 8)

    2024-06-06 19:32:04       29 阅读
  6. qt线程结束通知

    2024-06-06 19:32:04       35 阅读
  7. AI技术的革新之路:引领未来的智能浪潮

    2024-06-06 19:32:04       34 阅读
  8. 源代码防泄密是什么?

    2024-06-06 19:32:04       29 阅读
  9. HOW - 用 Typescript 编写一个比较好的 Class

    2024-06-06 19:32:04       26 阅读