一 :Mysql主从复制
重要的两个日志文件:bin log 和 relay log
bin log:二进制日志(binnary log)以事件形式记录了对MySQL数据库执行更改的所有操作。
relay log:用来保存从节点I/O线程接受的bin log日志,作为中继日志存在
(1) 从节点执行 start salve,开启主从复制
(2) 主节点binlog 发送给从节点,从节点会将bin log追加到relay log后面,并保存bin log的位置,以便下次从这个位置开始获取后续的内容
(3) relay log内容解析成sql,然后依次执行sql,实现数据同步
二 :主从复制的工作模式
异步复制
mysql默认复制模式,当主节点将数据写到binlog之后,并提交事务,就立即返回结果给客户端,并不关注更新bin log有没有同步到从节点
半同步复制
相对于异步复制,增加了等待从节点成功提交事务的逻辑,但是并不是等待所有从节点提交事务,而是只要有一个从节点提交事务,则返回客户端结果。
全同步
这就很好理解了,就是在半同步的基础上,增加了等待所有从节点都成功写入数据,才返回结果给客户端
三 :binlog 数据存储格式
binlog日志文件是二进制的,直接打开是乱码
1、statement格式
保存执行的sql语句,但是如果语句中有随机数,会造成主从同步数据不一致
2、row
每次操作保存受影响的行,以及怎么变化。但是会产生大量的日志,比较浪费存储空间
3、mixed
如果语句中没有随机数等,就保存sql语句,否则保存为row格式
四:Redis主从复制
第一步:申请同步请求
- 从节点与主节点建立 TCP 连接,并正式请求同步数据,发送 PSYNC ? -1。
- 主节点接收到请求后,向从节点回复 FULLRESYNC runid offset ,做好开始传输 RDB 数据的准备。
第二步: RDB 文件同步
- 主节点执行 bgsave 命令,生成当前数据的快照—也就是 RDB 文件。
- 主节点随后将这个 RDB 文件传输给从节点。
- 从节点收到 RDB 文件后,开始加载到自己的数据库中。
第三步 : 复制缓存区命令同步
- 之后,每当主节点有新的写命令,它都会立即传输给从节点并同时将新命令追加到复制缓冲区中。
- 从节点持续接收并执行这些命令,确保与主节点的数据始终保持同步
参考文档:
https://zhuanlan.zhihu.com/p/686074142 彻底搞懂MySQL主从复制工作原理 2+3+3+4-腾讯云开发者社区-腾讯云