Update MySQL.md

binlog三种模式、主从节点三种复制方式
This commit is contained in:
lxc 2023-10-09 14:33:52 +08:00 committed by GitHub
parent b70121d377
commit 5ae340dedb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -398,6 +398,20 @@ MySQL 提供了 FROM_UNIXTIME() 函数把 UNIX 时间戳转换为日期,并提
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/master-slave.png" width=""> </div><br>
#### 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模式保存binlogMySQL会根据执行的SQL语句选择日志保存方式。
#### 主从节点三种同步方式
- **异步复制** MySQL默认的复制即是异步的主库在执行完客户端提交的事务后会立即将结果返给客户端并不关心从库是否已经接收并处理。
- **全同步复制** 指当主库执行完一个事务,所有的从库都执行了该事务才返回给客户端。
- **半同步复制** 介于异步复制和全同步复制之间主库在执行完客户端提交的事务后不是立刻返回给客户端而是等待至少一个从库接收到并写到relay log中才返回给客户端。
### 读写分离
主服务器处理写操作以及实时性要求比较高的读操作,而从服务器处理读操作。