mysql8.0主从同步原理?
MySQL 8.0的主从同步原理是基于二进制日志(binary log)实现的。主服务器将所有的数据更改操作记录在二进制日志中,并将日志传输给从服务器。
从服务器通过读取主服务器的二进制日志,将其中的数据更改操作重放到自己的数据库中,从而实现数据的同步。
主从同步的过程中,从服务器还可以通过IO线程实时获取主服务器的二进制日志,以保持与主服务器的实时同步。
这种基于二进制日志的主从同步机制可以确保数据的一致性和可靠性,同时支持主从服务器的高可用性和负载均衡。
图片来源:网络
mysql如何对比主从复制?
mysql对比主从复制的办法是:
主库开启binlog功能并授权从库连接主库,从库通过change master得到主库的相关同步信息,然后连接主库进行验证,主库IO线程根据从库slave线程的请求,从master.info开始记录的位置点向下开始取信息,同时把取到的位置点和最新的位置与binlog信息一同发给从库IO线程,从库将相关的sql语句存放在relay-log里面,最终从库的sql线程将relay-log里的sql语句应用到从库上,至此整个同步过程完成,之后将是无限重复上述过程。
mysql主从同步会加排他锁吗?
MySQL主从同步过程中会加排他锁,这是因为在主库进行数据更新时,需要保证数据的一致性,因此会在更新操作时加排他锁,防止其他会话同时对同一数据进行修改。
这些操作会被同步到从库,从库也会加排他锁进行数据更新操作,保证主从数据的一致性。由于加锁会影响并发性能,因此需要在设计主从同步架构时合理安排同步时机和策略,避免锁冲突导致性能问题。
什么情况会导致MySQL主从复制延迟?
1.网络的延迟由于mysql主从复制是基于binlog的一种异步复制,通过网络传送binlog文件,理所当然网络延迟是主从不同步的绝大多数的原因,特别是跨机房的数据同步出现这种几率非常的大,所以做读写分离,注意从业务层进行前期设计。
2.主从两台机器的负载不一致由于mysql主从复制是主数据库上面启动1个io线程,而从上面启动1个sql线程和1个io线程,当中任何一台机器的负载很高,忙不过来,导致其中的任何一个线程出现资源不足,都将出现主从不一致的情况。
3.max_allowed_packet设置不一致主数据库上面设置的max_allowed_packet比从数据库大,当一个大的sql语句,能在主数据库上面执行完毕,从数据库上面设置过小,无法执行,导致的主从不一致。
4.key自增键开始的键值跟自增步长设置不一致引起的主从不一致。
什么情况会导致MySQL主从复制延迟?
主从复制有两个线程,sql和io。前者负责sql的复制,后者负责写入。所以就是从两方面看,当网络比较差,或者带宽受限,或者master cpu过于繁忙导致binlog传输速度跟不上,或者slave机器的io性能较差,都容易导致主从复制延迟。可以通过show slave status的一些参数看出来,大概是xx_behind_master。mysql的主从其实问题很大,设计的比较low。至少三年多没跟过mysql了,不知道这方面有没有什么改进。