From 5ae340dedb035aabb69fa3ac48b101b87ca9bee8 Mon Sep 17 00:00:00 2001 From: lxc Date: Mon, 9 Oct 2023 14:33:52 +0800 Subject: [PATCH] Update MySQL.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit binlog三种模式、主从节点三种复制方式 --- notes/MySQL.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/notes/MySQL.md b/notes/MySQL.md index 9b198fd43b..f65a0a87d0 100644 --- a/notes/MySQL.md +++ b/notes/MySQL.md @@ -398,6 +398,20 @@ MySQL 提供了 FROM_UNIXTIME() 函数把 UNIX 时间戳转换为日期,并提

+#### binlog三种模式 +- **STATEMENT** :基于SQL语句的复制,每一条会修改数据的sql语句会记录到binlog中。 + - 优点:不需要记录每一条SQL语句与每行的数据变化,这样子binlog的日志也会比较少,减少了磁盘IO,提高性能。 + - 缺点:在某些情况下会导致master-slave(主从复制模式)中的数据不一致(如sleep(暂停指定时间执行)函数, last_insert_id(自增)等情况下会出现问题) +- **ROW** :基于行的复制,不记录每一条SQL语句的上下文信息,仅记录哪条数据被修改了,修改后的结果是什么。 + - 优点:不会出现某些特定情况下的存储过程、或function、或trigger的调用和触发无法被正确复制的问题。 + - 缺点:会产生大量的日志,尤其是alter table的时候会让日志暴涨。 +- **MIXED** :如上两种模式的混合使用,一般的复制使用STATEMENT模式保存binlog,对于STATEMENT模式无法复制的相关操作使用ROW模式保存binlog,MySQL会根据执行的SQL语句选择日志保存方式。 + +#### 主从节点三种同步方式 +- **异步复制** : MySQL默认的复制即是异步的,主库在执行完客户端提交的事务后会立即将结果返给客户端,并不关心从库是否已经接收并处理。 +- **全同步复制** : 指当主库执行完一个事务,所有的从库都执行了该事务才返回给客户端。 +- **半同步复制** : 介于异步复制和全同步复制之间,主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收到并写到relay log中才返回给客户端。 + ### 读写分离 主服务器处理写操作以及实时性要求比较高的读操作,而从服务器处理读操作。