一、读锁、写锁
1、 表锁
读锁也称为共享锁、写锁称为排他锁
读锁会阻塞其他进程写操作,写锁会阻塞其他进程读和写操作
(加上写锁,当前线程可以继续查询)
tips:如果是常用写操作的场景,不建议使用myisam引擎,以写优先,会给数据库表加写锁,导致其他线程无法访问,降低并发量。
2、 行锁(偏向Innodb、开销大、会出现死锁;并发度高)
问题:无索引行锁升级为表锁,行锁锁的是索引
索引失效:如果类型是varchar,没加单引号,会自动类型转换,就会导致索引失效,会造成行锁,变成了表锁。
tips:
select xxx for update 锁定某一行后,其他操作被阻塞,相当于加了个行锁。
3、间隙锁:
当使用范围条件而不是相等条件检索数据,并请求共享或排他锁时,innodb会给符合条件的已有数据记录的索引加锁,对于键值在条件范围内并不存在的记录,叫做间隙(gap)
Innodb会对这个间隙加锁,这种锁机制就是所谓的间隙锁(next-key锁)
可以防止一定程度上的幻读。
查看最近的锁数量等
show profiles查看整个查询的每一步过程,进行排查。
mysql主从复制
复制基本原则:
1、每个slave只能有一个唯一的id
2、每个slave只有一个master
3、每个master可以有多个slave
slave会从master读取binlog来进行数据同步
mysql主从复制分为三步:
1、mysql将改变记录写到二进制日志(binlog),这些记录过程的日志叫做binary log events;
2、slave将master的binary log events拷贝到它的中继日志(relaylog)
3、salve重做中继日志事件,将改变应用到自己的数据库中。mysql复制是异步且是串行化。