在现代高并发的 Web 应用中,数据库的性能和可用性是至关重要的。为了应对大量的读操作和写操作,许多系统采用了 MySQL 的读写分离架构。读写分离通过将读操作和写操作分别分配到不同的数据库实例上,从而提高系统的整体性能和可扩展性。由于 MySQL 存在事务隔离级别,在高并发的场景下可能出现脏读、不可重复读、幻读等场景,表现上均为当一个事务中多次执行同一查询,结果集却不一致的现象。在读写分离的环境中,这类问题更为突出,其主要原因除了高并发产生,也可能是主从数据复制时存在时延,导致从库数据滞后于主库,对业务数据一致性和用户体验造成一定影响。
原理
在 MySQL 的主从架构中,主库负责处理所有的写操作,并将这些操作以二进制日志(Binary Log)的形式记录下来。当进行主从同步时,从库有两个重要的线程:IO 线程和 SQL 线程。