正式生产环境中,MySQL数据肯定不会只存储一台服务器上,线上一般80%的请求都是读请求,只有20%的请求是写请求,因此为了缓解数据库压力,现在一般都采用主从架构,即一台主数据库配置几台从数据库,写入修改数据走主数据库,查询数据走从数据库。主从复制就是为了保证主从数据库数据的一致性而产生的一种策略;
主从复制过程详解:
客户端发起修改或添加数据请求,主库会将所有的修改数据操作记录在binlog日志中,从库的IO线程会读取binlog中的数据并将其写入从库的中继日志(Relay log)中,随后SQL线程再读取中继日志将操作在从库中再执行一遍,达到主从数据一致的效果;
主从复制延时问题:
在同步过程中必然存在延时问题,产生延时的主要原因,最常见的是三个:
1.大事务执行,事务本身就耗时较长,必然存在延时,所以要尽量减少大事务;
2.读写日志,主库写入binlog,从库读取并写入Relay log都是顺序IO,耗时少,而SQL线程重新操作数据时是非顺序IO,此时耗时高,这里可能产生数据堆积而引起延时;
3.数据库的并发TPS高于单线程的处理能力了,也会产生延时;
延时问题解决:
SQL线程能否采用多线程执行,如果采用,怎么保证执行顺序?
两个规则:
1.同一条数据操作,又同一个worker线程执行;
2.同一个事物的SQL操作,由同一个worker线程执行;