MySQL 主从复制原理:
主库(Master) 有一个 I/O 线程,从库(Slave) 有一个 I/O 线程和 SQL 线程,从库的 I/O 线程负责读取主库的 binlog,并将其写入从库的中继日志(relay log) 中,SQL 线程负责读取和执行中继日志中的 binlog 信息,并将其转换 SQL 语句,在从库上执行
MySQL 主从复制的步骤:
1.首先,在从库服务器(Slave) 上执行 start slave
开启主从复制
2.然后,从库服务器上的 I/O 线程会通过主库服务器上授权具有复制权限的用户请求链接主库服务器,并请求返回指定 binlog 日志中指定位置后的 binlog 日志信息内容
3.主库服务器接收到来自从库服务器 I/O 线程的请求后,主库服务器上的 I/O 线程会根据从库服务器上 I/O 线程请求的内容读取指定 binlog 日志文件的指定位置后的日志信息内容返回给从库服务器的 I/O 线程,除了返回指定 binlog 日志信息外,还会返回 binlong 日志文件在主库服务器上新的文件名以及下一次指定更新的位置
4.从库服务器的 I/O 线程接收到来自主库服务器的 I/O 返回的信息后,将 binlog 日志信息的内容依次写入从库服务器上的中继日志末端,并将新 binlog 文件名以及下一次指定更新的位置保存至 master-info 中,以方便下一次读取主库服务器可以告诉应该从哪一个 binlog 日志文件的哪一个位置返回日志信息
5.从库服务器的 SQL 线程会实时监测中继日志中新增的信息,并及时的将新增的内容进行解析转换成对应 SQL 语句在从库服务器上执行
6.经过上面步骤后,主库服务器和从库服务器执行了相同的 SQL 语句,如果复制正常的话,则主从数据一致