MySQL锁机制和主从复制

Posted Tanglement

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL锁机制和主从复制相关的知识,希望对你有一定的参考价值。

锁的分类

读锁和写锁,表锁和行锁

表锁

偏向MyISAM存储引擎,开销小,加锁快,无死锁。发生锁冲突的概率最高,并发度最低。

读锁

会话1对表1加了读锁后,可以查询表1,不能更新表1,也不能查询别的表。与此同时会话2可以查询表1,更新表1会阻塞,等待读锁的释放。

写锁

会话1对表1加了写锁后,可以查询表1,可以更新表1,不能查询别的表。与此同时会话2查询和更新表1,会阻塞,等待写锁的释放。

行锁

偏向InnoDB存储引擎,开销大,加锁慢。发生锁冲突概率最低,并发度最高。与MyISAM不同之处:支持事务,采用行级锁。

关于事务及隔离级别的内容可以观看此博客
[https://www.cnblogs.com/chenshaowei/p/12566030.html]

索引失效,行锁变表锁

当查询时,索引失效(比如varchar没加单引号查找),则行锁变为表锁,将极大影响数据库性能,因此索引失效是一个很大的问题。

间隙锁

一方更新数据,范围在a到z,不是连续的,有一个缺失c无记录。一方插入c记录。则第一方会把a到z都锁住导致c计入插入不了。

锁住一行
select * from table1 where a=1 for update
//则a=1这条记录上锁,别的会话修改会造成阻塞

行锁优化建议

  • 尽可能让所有数据检索都通过索引来完成,避免无索引使行锁变表锁。
  • 合理设计索引,尽量缩小锁的范围。
  • 减少检索条件,避免间隙锁
  • 控制事务大小,减少锁定资源量和时间长度

主从复制

基本原理

slave从master读取binlog来进行数据同步。步骤如下:

  1. master将改变记录到二进制日志binary log,这些记录过程叫做二进制日志时间
  2. slave将master的binary log events拷贝到他的中继日志
  3. slave重做中继日志中的事件,将改变应用到自己的数据库中,mysql的复制时异步且串行化的。

一主一从常见配置

mysql版本一致,后台以服务运行。具体如何配置,仍待学习。

以上是关于MySQL锁机制和主从复制的主要内容,如果未能解决你的问题,请参考以下文章

大数据技术之_29_MySQL 高級面试重点串讲_02_Mysql 简介+Linux 版的安装+逻辑架构介绍+性能优化+性能分析+查询截取分析+分区分库分表简介+锁机制+主从复制

快速搭建 MySQL 的主从数据库

Redis学习笔记 [事务和锁机制持久化机制模拟主从复制集群搭建]

MySQL主从复制原理深入讲解

一文读懂mysql主从复制机制

精华推荐 | MySQL技术专题「主从同步架构」全面详细透析MySQL的三种主从复制(Replication)机制的原理和实战开发(原理+实战)