Mysql 主从复制

Mysql主从复制流程

基本原理流程是3个线程以及之间的关联

主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中;

从:io线程——在使用start slave 之后,负责从master上拉取 binlog 内容,放进自己的relay log中;

从:sql执行线程——执行relay log中的语句;

Mysql主从复制原理

第一步:master在每个事务更新数据完成之前,将该操作记录串行地写入到binlog文件中。

第二步:salve开启一个I/O Thread,该线程在master打开一个普通连接,主要工作是binlog dump process。如果读取的进度已经跟上了master,就进入睡眠状态并等待master产生新的事件。I/O线程最终的目的是将这些事件写入到中继日志中。

第三步:SQL Thread会读取中继日志,并顺序执行该日志中的SQL事件,从而与主数据库中的数据保持一致。

Mysql主从复制问题

如何解决延迟同步问题

  • 半同步复制,也叫 semi-sync 复制,指的就是主库写入 binlog 日志之后,就会将强制此时立即将数据同步到从库,从库将日志写入自己本地的 relay log 之后,接着会返回一个 ack 给主库,主库接收到至少一个从库的 ack 之后才会认为写操作完成了。

  • 并行复制,是指在从服务器上开启多个线程,同时从主服务器上复制数据,以提高数据同步的速度。并行复制可以通过在从服务器上设置多个 IO 线程和 SQL 线程来实现。IO 线程负责从主服务器上读取 binlog,SQL 线程负责将读取到的 binlog 解析成 SQL 语句,并在从服务器上执行。并行复制可以提高数据同步的速度,但是也会增加从服务器的负担。