zoukankan      html  css  js  c++  java
  • 了解Mysql(三)

    MySQL

    什么是Mysql锁?

    锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除了 传统的计算资源(如CPU,内存,I/O等)的争用以外,数据也是一种供许多用户共享的资源. 如何保证数据并发访问的一致性,有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素.  Mysql用到了很多这种锁机制,比如行锁,表锁,读锁,写锁等,都是在操作之前先上锁.这些锁统称为悲观锁(Pessimistic Lock)

    锁的基本描述

    MySQL这3种锁的特性可大致归纳如下:

    表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低

    行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高

    页面锁:开销和加锁时间介于表锁和行锁之间;会出现死锁;锁定粒度介于表锁与行锁之间,并发度一般

    表级锁

    MySQL的表级锁定有两种模式:表共享读锁Table Read Lock)和表独占写锁Table Write Lock)。

    MySQL 实现的表级锁定的争用状态变量:show status like 'table%';

    table_locks_immediate:产生表级锁定的次数;

    table_locks_waited:出现表级锁定争用而发生等待的次数;

    表锁演示

    读锁演示

     

     

     

     写锁演示

     

    行锁

    读锁:允许其他线程上读锁,但是不允许上写锁。

     写锁:不允许其他线程上任何锁。

     行锁必须要索引才能实现,否则会自动锁全表,两个事务可以用同一个索引,下面给出例子:
    读锁由于不排除其他线程再加读锁比较难测试,所以下面用写锁测试,先测试没加所以字段进行加锁,对不同记录进行加锁,如果都加锁成功说明是加了行锁,反之则是默认锁全表。
    下面的consumer_chain_order_number是不会重复的,但没有索引

    -- 马上显示查询结果
    BEGIN;
    SELECT * from tyg_consumer_chain_sell_order o where o.consumer_chain_order_number=26911523448454 for update

    --一直没有结束知道等待超时
    BEGIN;
    SELECT * from tyg_consumer_chain_sell_order o where o.consumer_chain_order_number=55181523448554 for update

    说明了默认锁全表,接下来试下有索引的字段,这个表的主键

    集群搭建之主从复制

    Mysql主从复制过程的图形表示

     主服务器配置

     修改my.conf文件

    我起的名叫mysql-bin,到时会生成mysql-bin.000001这样的文件

    server-id一般和机器ip尾数一样就行,我的是3

    重启mysql服务

    service mysqld restart

    建立帐户并授权slave

     

    一般不用root帐号,“%”表示所有客户端都可能连,只要帐号,密码正确,此处可用具体客户端IP代替,如192.168.145.226,加强安全。

    我这边为了演示,用了root账号。让从机通过主机的用户名/密码 root/root登录进入

    然后刷新权限

      查询master的状态

     

    position=602这个偏移量记住,后面会用到

    之前的设置中,发现在/var/lib/mysql文件夹下,已经多出了mysql-bin开头的bin log日志文件

    从服务器配置

    修改my.conf文件

     删除UUID文件

    重启并登录到MySQL进行配置从服务器

    mysql>change master to master_host='192.168.10.133',master_port=3306,master_user='root',master_password='root',master_log_file='mysql-bin.000001',master_log_pos=569 

    注意语句中间不要断开,master_port为mysql服务器端口号(无引号),master_user为执行同步操作的数据库账户,“120”无单引号(此处的120就是show master status 中看到的position的值,这里的mysql-bin.000001就是file对应的值)。

       启动从服务器复制功能

     

      

      

       检查从服务器复制功能状态

       

  • 相关阅读:
    leetCode 24. Swap Nodes in Pairs (双数交换节点) 解题思路和方法
    【jQuery 区别】.click()和$(document).on("click","指定的元素",function(){});的区别
    【前台 submit的重复提交 错误】submit的重复提交
    【spring 注解 错误】使用controller 作为后台给前台ajax交互数据出错
    【Filter 不登陆无法访问】web项目中写一个过滤器实现用户不登陆,直接给链接,无法进入页面的功能
    【Filter 页面重定向循环】写一个过滤器造成的页面重定向循环的问题
    【前台页面 BUG】回车按钮后,页面自动跳转
    【hibernate 执行方法未插入数据库】hibernate的save方法成功执行,但是未插入到数据库
    【maven 报错】maven项目执行maven install时报错Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode)
    【hibernate criteria】hibernate中criteria的完整用法 转
  • 原文地址:https://www.cnblogs.com/ptxxc/p/12118222.html
Copyright © 2011-2022 走看看