异步复制
简介
异步复制是指主库在执行完客户端提交的事务后会立即把结果返给客户端,同时调用dump线程通知从库有新事务产生,从库调用IO线程把获取到的binlog写入relay log(中继日志),然后调用SQL线程回放relay log把更新写入本地磁盘。异步复制模式主库不关心从库是否已经接收到binlog,所以主库和从库的数据可能不一致,一旦主库发生故障,强行把从库提升为主库会导致部分数据丢失。
业务流程
- 客户端调用用户线程向主库发起数据更新请求,主库在执行完更新操作后把变更写入binlog,返回成功给客户端。主库调用dump线程通知从库有新事务产生。
- 从库接收到主库通知后,调用IO线程读取表mysql.slave_master_info来获取当前主库binlog文件名和位置,然后调用IO线程向主库发起请求获取最新的binlog文件名和位置。
- 主库接收到从库IO线程请求后,把最新的Binlog文件名和位置上的binlog返回给从库。
- 从库接收到主库响应后,把binlog写入relay log,并把最新的binlog文件名和位置更新到表mysql.slave_master_info中,然后调用SQL线程回放relay log,即把更新写入本地磁盘。
图1 MySQL异步复制

适用场景
异步复制的优点是时延小,缺点在于从库有数据丢失的风险,所以异步复制适用于对性能要求高,可以接受部分数据丢失风险的业务场景。
父主题: 原理