Linux运维 第四阶段 (四) MySQL锁、事务

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介:

1、相关概念:

连接管理器:接受请求、建立安全连接、认证用户等;

线程管理器:线程池,线程重用thread-reuse

解析器:解析树;

缓存:复杂性、算法、权限等;

>SELECT CURRENT_TIME();  (此命令不缓存)

并发控制问题:两个以上用户同时读写同一个文件数据,多版本并发控制MVCC,时间快照;

 

锁(最简单的并发控制机制):读锁(共享锁);写锁(独占锁、排他锁);

>HELP LOCK

>LOCK TABLES  tb_name  [READ|WRITE];

>UNLOCK;

锁粒度划分:从大到小依次,表锁(锁定整张表)、页锁(数据块,一块有多行)、行锁,mysql只支持表锁,行锁需要由存储引擎完成;锁越粗糙越容易管理,锁越精细越能实现并发性,相对内部越复杂。

注:若同时有多个用户写一张表,锁操作会在mysql内部自动完成,我们不需要加锁;在实现数据库的温备份时才需要加锁操作。

 

2、事务transaction

ACID(Atomicity;Consistency;Isolation;Durability)

Atomicity原子性:事务所引起的DB操作要么都完成,要么都不执行;

Consistency一致性:当事务执行结束之后,整个server状态没有改变,事务前的总和和事务后的总和是一致的(前提在隔离状态下执行),如:银行帐户A(3000)——》B(2000);

Isolation隔离性:事务调度(事务之间影响最小),MVCC(多版本并发控制);

Durability持久性:一旦事务成功完成,系统必须保证任何故障都不会引起事务表现出不一致性。


隔离级别有四种,从低到高依次为:

READ UNCOMMITTED读未提交;

READ COMMITTED读提交;

REPEATABLE READ可重读;(mysql默认)

SERIALIZABLE可串行。


>SHOW GLOBAL  VARIABLES  LIKE  ‘tx_isolation’;

>SELECT @@tx_isolation;  (两种方法查看隔离级别)

>SET GLOBAL|SESSION  tx_isolation=’READ-UNCOMMITTED’;  (修改隔离级别)

注:隔离级别越低,各事务间干扰大,但并发能力强;隔离级别越高,并发能力越弱,但安全性越好。隔离级别调低,可提高性能。

 

增删改查首先在内存中完成,再写到事务日志中,过段时间才同步到数据文件中(磁盘空间),所以在事务引擎上每次写操作都要执行两遍,一次从内存到事务日志中(速度快,仅记录操作过程),一次是事务日志写入数据文件中(持久)。

内存――》事务日志(撤销);事务日志――》磁盘(同步)

保证ACID的兼容性:redo  log(重做日志);undo  log(撤销日志)。

日志组:日志文件至关重要,并不是越大越好,根据事务需求。启动mysql时会同步事务日志到磁盘,不能终止,否则 mysql可能会崩溃。

事务日志尽量拿出来放另一磁盘。

 

>START TRANSACTION;  (启动事务)

>多条SQL语句执行,例:>INSERT  INTO tb_name......;  (事务中的SQL语句是整体,要么都执行,要么都不执行)

>COMMIT;>ROLLBACK;  (事务一旦提交就不能再撤了)

 

>SELECT @@autocommit;  (如没明确启动事务,autocommit能实现自动提交,每一个操作都直接提交,建议明确使用事务>START TRANSACTION;并关闭自动提交,系统性能要高的话,IO操作越少越好)

>SET  GLOBAL  autocommit=0; (关闭自动提交,永久生效可写入配置文件)

 

>HELP SAVEPOINT  (保存点,>SAVEPOINT  sp_name;

>START TRANSACTION;

>DELETE FROM  tutors  WHERE  Age<25;

>SAVEPOINT  ab;  (保存点名称不能使用数字)

>INSERT INTO  tutors  (Tname,Gender,Age)  VALUES (‘jowin’,’M’,25);

>SAVEPOINT  ac;

>ROLLBACK  TO ab;  (回滚至之前的保存点)

>COMMIT;

 

多事务同时执行(彼此之间互相不影响的方式并发,可提高吞吐量和资源利用率,并减少等待时间),事务之间的交互通过数据集。

 

并发控制所依赖的技术手段:锁(饿死-锁饥饿,要锁但申请不到;死锁)、时间戳、多版本控制和快照隔离。

 

事务的状态:活动的;部分提交的;提交的;失败的;中止的。

 

事务调度:可恢复调度;无级联调度。

 

查看事务隔离级别对事务的影响:在两个终端上进行

>SELECT @@tx_isolation;

>SET tx_isolation=’READ-UNCOMMITTED’;  (在一终端上来回切换隔离级别)

>UPDATE tb_name  SET.....;

>ROLLBACK;

>COMMIT;

>SELECT *  FROM  tb_name; (在另一终端查看)

 

 

本文转自 chaijowin 51CTO博客,原文链接:http://blog.51cto.com/jowin/1683317,如需转载请自行联系原作者

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3天前
|
SQL 存储 关系型数据库
MySQL索引及事务
MySQL索引及事务
15 2
|
14天前
|
运维 网络协议 Linux
【专栏】 20 个 Linux 命令,运维工程师工作时最常用的
【4月更文挑战第28天】本文介绍了运维工程师常用的20个Linux命令,包括`ls`、`cd`、`pwd`、`mkdir`、`rm`、`cp`、`mv`、`cat`、`more`、`less`、`head`、`tail`、`grep`、`find`、`chmod`、`chown`、`chgrp`、`ps`、`top`和`ifconfig`,帮助提升工作效率。此外,还提到了其他常用的命令如`df`、`free`、`tar`、`ssh`、`scp`、`ping`、`netstat`、`iptables`、`systemctl`、`hostname`等,建议运维人员掌握以应对各种运维场景。
|
1天前
|
关系型数据库 MySQL Linux
服务器Linux系统配置mysql数据库主从自动备份
这是一个基本的配置主从复制和设置自动备份的指南。具体的配置细节和命令可能因您的环境和需求而有所不同,因此建议在操作前详细阅读MySQL文档和相关资源,并谨慎操作以避免数据丢失或不一致。
9 3
|
1天前
|
Unix Shell Linux
linux互斥锁(pthread_mutex)知识点总结
linux互斥锁(pthread_mutex)知识点总结
|
4天前
|
存储 算法 关系型数据库
MySQL事务与锁,看这一篇就够了!
MySQL事务与锁,看这一篇就够了!
|
4天前
|
Java 关系型数据库 MySQL
MySQL 索引事务
MySQL 索引事务
12 0
|
5天前
|
算法 安全 Linux
【探索Linux】P.20(多线程 | 线程互斥 | 互斥锁 | 死锁 | 资源饥饿)
【探索Linux】P.20(多线程 | 线程互斥 | 互斥锁 | 死锁 | 资源饥饿)
11 0
|
5天前
|
运维 监控 Linux
如何在Linux上部署1Panel运维管理面板并远程访问内网进行操作
如何在Linux上部署1Panel运维管理面板并远程访问内网进行操作
11 0
如何在Linux上部署1Panel运维管理面板并远程访问内网进行操作
|
6天前
|
SQL 运维 关系型数据库
MySQL 运维篇
该文本涵盖了数据库管理的关键方面,包括DDL(CREATE, DROP, ALTER等)用于定义数据库结构,DML(INSERT, DELETE, UPDATE, SELECT)用于数据操作,DCL(GRANT, REVOKE, COMMIT, ROLLBACK)涉及权限管理和事务控制,以及DQL用于数据查询。还介绍了MySQL的安装过程,包括源码编译和二进制安装方法,以及启动服务、设置初始密码和修改用户密码的步骤。
19 1
|
6天前
|
关系型数据库 MySQL Linux
Linux CentOs7 安装Mysql(5.7和8.0版本)密码修改 超详细教程
Linux CentOs7 安装Mysql(5.7和8.0版本)密码修改 超详细教程