Update MySQL.md
binlog三种模式、主从节点三种复制方式
This commit is contained in:
parent
b70121d377
commit
5ae340dedb
@ -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模式保存binlog,MySQL会根据执行的SQL语句选择日志保存方式。
|
||||
|
||||
#### 主从节点三种同步方式
|
||||
- **异步复制** : MySQL默认的复制即是异步的,主库在执行完客户端提交的事务后会立即将结果返给客户端,并不关心从库是否已经接收并处理。
|
||||
- **全同步复制** : 指当主库执行完一个事务,所有的从库都执行了该事务才返回给客户端。
|
||||
- **半同步复制** : 介于异步复制和全同步复制之间,主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收到并写到relay log中才返回给客户端。
|
||||
|
||||
### 读写分离
|
||||
|
||||
主服务器处理写操作以及实时性要求比较高的读操作,而从服务器处理读操作。
|
||||
|
Loading…
Reference in New Issue
Block a user