mysql的主从复制会影响事务吗?
不会的。mysql的主从复制不会影响事务。
因为,主从复制的原理是:
数据库将用户的请求通过工作线程来将数据写入到数据库中然后在写入到 binlog 日志中。
binlog日志详细记录了数据的操作信息。
主数据库会有一个IO线程将binlog日志中的数据同步到从数据库的relay日志中。
从数据库再通过自己数据库内的SQL线程将 relay log 日志中的数据写入到数据库中。
什么情况会导致MySQL主从复制延迟?
1.网络的延迟由于mysql主从复制是基于binlog的一种异步复制,通过网络传送binlog文件,理所当然网络延迟是主从不同步的绝大多数的原因,特别是跨机房的数据同步出现这种几率非常的大,所以做读写分离,注意从业务层进行前期设计。
图片来源:网络
2.主从两台机器的负载不一致由于mysql主从复制是主数据库上面启动1个io线程,而从上面启动1个sql线程和1个io线程,当中任何一台机器的负载很高,忙不过来,导致其中的任何一个线程出现资源不足,都将出现主从不一致的情况。
3.max_allowed_packet设置不一致主数据库上面设置的max_allowed_packet比从数据库大,当一个大的sql语句,能在主数据库上面执行完毕,从数据库上面设置过小,无法执行,导致的主从不一致。
4.key自增键开始的键值跟自增步长设置不一致引起的主从不一致。
mysql主从同步会加排他锁吗?
MySQL主从同步过程中会加排他锁,这是因为在主库进行数据更新时,需要保证数据的一致性,因此会在更新操作时加排他锁,防止其他会话同时对同一数据进行修改。
这些操作会被同步到从库,从库也会加排他锁进行数据更新操作,保证主从数据的一致性。由于加锁会影响并发性能,因此需要在设计主从同步架构时合理安排同步时机和策略,避免锁冲突导致性能问题。
主从复制原理?
1.数据库有个bin-log二进制文件,记录了所有sql语句。
2.我们的目标就是把主数据库的bin-log文件的sql语句复制过来。
3.让其在从数据的relay-log重做日志文件中再执行一次这些sql语句即可。
4.主从配置一般需要三个线程来操作:
1.binlog输出线程:每当有从库连接到主库的时候,主库都会创建一个线程然后发送binlog内容到从库。在从库里,当复制开始的时候,从库就会创建两个线程进行处理:
2.从库I/O线程:当START SLAVE语句在从库开始执行之后,从库创建一个I/O线程,该线程连接到主库并请求主库发送binlog里面的更新记录到从库上。从库I/O线程读取主库的binlog输出线程发送的更新并拷贝这些更新到本地文件,其中包括relay log文件。
3.从库的SQL线程:从库创建一个SQL线程,这个线程读取从库I/O线程写到relay log的更新事件并执行。
可以知道,对于每一个主从复制的连接,都有三个线程。拥有多个从库的主库为每一个连接到主库的从库创建一个binlog输出线程,每一个从库都有它自己的I/O线程和SQL线程。