1.从库生成两个线程,一个 I/O 线程,一个 SQL 线程
2.当从库连接主库时,主库会生成一个 二进制转储(binlog dump) 线程,用来给从库 I/O 线程传 binlog
3.I/O 线程去请求主库的 binlog,并将得到的 binlog 日志写到 relay log(中继日志) 文件中。(在读取 binlog 的内容的操作中,会对主库的 binlog 加锁,当binlog读取完成并发送给从库后解锁。)
4.从SQL 线程会读取 relay log 文件中的日志,并解析成具体操作,来实现主从的操作一致,最终实现主从的数据一致。
复制类型
异步复制
主服务器完全不关心从服务器是否同步成功
同步复制
主服务器需要确认所有从服务器同步成功,才返回成功信息
半同步复制
主服务器确认有一台从服务器成功,就返回成功信息
ps:要根据情况,确定复制模式,比如,从服务器是为了缓解查询压力的,只在报表中使用从库,可以使用异步复制,如果一主多从,要兼顾主节点挂掉后的程序可运行,至少半同步复制
复制方式
Statement:每一条会修改数据的 SQL 都会记录在 binlog 中。
Row:不记录 SQL 语句上下文信息,仅保存哪条记录被修改。
Mixed:Statement 和 Row 的混合体。