目录
MySQL主从同步指的是主库与从库的数据同步问题。主要借助主库的dump线程,将主库的Binlog日志与从库的relayLog日志关联来实现。
两种方式:
1.MySQL异步复制;
2.MySQL半同步复制
1.MySQL异步复制
核心步骤:
1.主库打开binlog日志,记录用户对数据的每一步操作;
2.从库打开relayLog日志,记录跟主库一样的binlog日志;
3.从库重演relayLog日志。
具体实现:
1.从库启动一系列IO线程,负责与主库建立TCP连接,请求主库在写入binlog日志时,也将日志的内容向从库传输一份;
2.主库此时有一个IO dump线程,负责将Binlog日志通过TCP连接传输到从库的IO线程;(异步)
3.从库先将接收到的binLog日志写入到自己的relayLog日志当中,然后开启线程异步的重演relayLog的数据操作。(在这里就实现了主从同步,数据的同步会有一定的延迟)
MySQL异步复制的缺点:由于主库向从库发送binlog的过程是异步的,主服务在向客户端反馈执行结果时,不知道binlog是否同步成功。这时,如果主库宕机了,而从库还没有备份到新的binlog,那么从库就会丢失数据,存在数据不一致的问题。
2.MySQL半同步复制
增加一个ack操作,Dump线程等待从库的ack确认,然后再通知客户端同步复制完成。
缺点:会造成一定程度的延迟,因为主库要等待从库的ack确认,从库ack确认后,主库才能向用户返回响应。在这期间,用户需要一直等待。