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

   启动从服务器复制功能

 

  

  

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

   

猜你喜欢

转载自www.cnblogs.com/ptxxc/p/12118222.html