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对应的值)。

       启动从服务器复制功能

     

      

      

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

       

  • 相关阅读:
    unity中制作模拟第一人称视角下的指南针
    unity3D 中的C#脚本一个类调用另一类中简单方法
    unity中UI的屏幕自适应代码
    unity中导入插件时报错处理办法
    Unity3D在C#编程中的一些命名空间的引用及说明
    Unity中物体碰撞后去掉相互之间的反弹力
    unity3D打包发布Apk详细步骤
    unity3D开发的程序发布到Android平台上进行运行测试的详细步骤
    JAVA的环境变量配置(方式二)
    Java中的 JDK下载和环境配置(方式一)
  • 原文地址:https://www.cnblogs.com/ptxxc/p/12118222.html
Copyright © 2011-2022 走看看