mysql主从复制默认是异步复制:(异步复制:主库将binlog复制发送给从库,不确认从库是否能收到)
主库开启binlog,并授权从库访问
主库如果发生数据改变,将sql语句记录到binlog,从库会定期去探测主从是否会发生改变,如果发生改变,则启动下面的进程去请求。
从库启动两个线程,I/O线程,sql线程,I/O线程去访问主库,然后主库会启动dump线程将binlog发送给从库,从库将得到的主库binlog写入到本地的中继(relay-log),SQL线程会从本地的中继日志读取,解析成sql逐一执行。
全同步复制原理:主库执行完后,需要等到所有从库回应后才能继续处理,会严重影响性能
半同步复制原理:主库执行完后,至少一个从库将binlog写到中继日志即可,不用等所有从库返回确认信息,相对于异步复制,半同步复制提高了数据的安全性,同时它也造成了一定程度的延迟,这个延迟最少是一个TCP/IP往返的时间。所以,半同步复制最好在低延时的网络中使用。是通过一个插件来实现的。