mysql分布式与锁
mysql主从复制:sql打到masster,会有binlog存放sql, 当binlog发生改变,master与slave 通过IO Thread交互,relaylog复制了master的binlog,slave通过SQLThread来回放sql,保持主从数据的一致性;当并发请求sql过多时候,通过relaylog来暂存数据,相当于mq,SQLThread单线程可以保证数据不丢失,也就是主从数据的一致性。
通过MTS组提交来解决主从复制的延迟问题,主要是把SQLThread由单线程改为多线程。
undolog:数据库从一个状态恢复到另一个状态,通过快照的形式恢复,undolog存放的是快照的数据。此快照的是修改记录的快照。把某些记录的历史数据保留下来。
cas:乐观锁,如果数据值一致那么修改,不一致在新数的基础上重新计算
redolog:主要解决异常情况,比如突然断电内存数据没有刷新到磁盘,但是通过顺序写的方式记录到redolog,然后通过redolog来恢复磁盘的数据。
redolog异常恢复, 主要是把随机写换成了顺序写。顺序写相当于记录小黑板(顺序一行一行的写),随机写相当于记录账本(要寻址,查找对应的人)
这两个文件主要记录的就是redolog,redolog不能解决数据永远不丢的问题。
主从同步是通过binlog来同步的,
两阶段提交可以保证宕机时,主从数据的一致性。通过redolog的设置标志位(此条记录的prepare状态),在binlog中找到与之匹配的数据记录一致性,如果一致则commit,不一致则取消提交。
mvcc
mysql的默认隔离级别:rr可重复读
undolog:1.方便数据的回滚,2.MVCC数据的读取;当数据提交后
事务里面的select读一次,采用的是事务里第一次的readview
mysql 幻读产生的原因?如何解决幻读
如果事务中全部都是快照读,那么不会产生幻读,但是当前读和快照读一起使用的时候就会产生幻读问题了,解决幻读只能通过加锁的方式来解决。