概述
在主从复制中,一般有一个主数据库(Master)和一个或多个从数据库(Slave),主数据库负责接收和处理写操作,从数据库复制主数据库的日志文件,将写操作在自身的数据库重演,从而实现数据的同步
复制类型
- STATEMENT:把主数据库执行的 sql 复制到从数据库,是默认类型
- ROW:直接把数据行复制过去
- MIXED:默认复制 sql 语句,如果发现无法精确复制,就会复制行数据
工作过程
- 主库数据更新,写入二进制日志文件
- 从库监听到主库的二进制日志文件发生改变,开启 I/O 线程向主库请求二进制日志记录;
- 主库为每个 I/O 线程开启 dump 线程,向从库发送二进制日志记录
- 从库的 I/O 线程将主库的二进制日志记录保存到本地的中继日志
- 从库启动 SQL 线程从中继日志读取二进制日志记录,在本地重新执行,使数据和主库保持一致
- I/O 线程和 SQL 线程进入睡眠状态,等待下一次被唤醒
同步类型
- 异步复制:主库执行完事务,立即将结果返回客户端,并不关心从库是否已经接收并处理。此时如果主库挂掉,而从库又未完成同步,会导致数据不一致,MySQL 默认采用此类型
- 全同步复制:主库执行完事务,所有的从库也都执行了该事务,完成数据同步,才将结果返回客户端,性能会收到一定影响
- 半同步复制:在异步复制的基础上,确保主库返回结果前,至少有一个从库已经收到该事务并记录到中继日志,但并不保证执行
实例配置
待补充