zoukankan      html  css  js  c++  java
  • 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版本一致,后台以服务运行。具体如何配置,仍待学习。

  • 相关阅读:
    scala之伴生对象的继承
    scala之伴生对象说明
    “Failed to install the following Android SDK packages as some licences have not been accepted” 错误
    PATH 环境变量重复问题解决
    Ubuntu 18.04 配置java环境
    JDBC的基本使用2
    DCL的基本语法(授权)
    ZJNU 1374
    ZJNU 2184
    ZJNU 1334
  • 原文地址:https://www.cnblogs.com/chenshaowei/p/12593572.html
Copyright © 2011-2022 走看看