数据库事务

MySQL InnoDB Cluster 详解

我们两清 提交于 2020-01-15 08:55:49
导读 本文转载自MySQL解决方案工程师 作者:徐铁韬 这篇文章将详细地介绍MySQL的高可用解决方案—— MySQL InnoDB Cluster。 说到高可用性,首先要了解一下什么是高可用性? 高可用性要求的实际上是对可靠性的要求,从本质上来说,是通过技术和工具来提高可靠性,尽可能长时间保持数据的可用和系统的正常运行时间。实现高可用性的原则为排除单点故障、通过冗余实现快速恢复,并且具有容错机制。 上面一页主要介绍了几个关键词汇,以及相关的定义,这些有助于理解可靠性和高可用性。 MySQL的高可用性解决方案目前大致分为5种,按照高可用的级别(99.9999%为最高级)排序依次为,主从复制、具有自动故障转移功能的主从复制、利用共享存储、OS或虚拟化软件实现主备架构、MySQL Group Replication 群组复制,以及MySQL NDB Cluster。 MySQL Replication:允许数据从一台实例上复制到一台或多台其它的实例上。 MySQL Group Replication:群组复制提供更好的冗余性、自动恢复以及写入扩展。 MySQL InnoDB Cluster:基于群组复制,提供了易于管理的API、应用故障转移和路由、易于配置,提供比群组复制更高级别的可用性。 MySQL NDB Cluster:容易与MySQL InnoDB Cluster混淆

事务ACID

此生再无相见时 提交于 2020-01-15 08:02:36
A是原子性(atomic):事务中包含的各项操作必须全部成功执行或者全部不执行。任何一项操作失败,将导致整个事务失败,其他已经执行的任务所作的数据操作都将被撤销,只有所有的操作全部成功,整个事务才算是成功完成。 C是一致性(consistent):保证了当事务结束后,系统状态是一致的。那么什么是一致的系统状态?例如,如果银行始终遵循着"银行账号必须保持正态平衡"的原则,那么银行系统的状态就是一致的。上面的转账例子中,在取钱的过程中,账户会出现负态平衡,在事务结束之后,系统又回到一致的状态。这样,系统的状态对于客户来说,始终是一致的。 I是隔离性(isolated):使得并发执行的事务,彼此无法看到对方的中间状态。保证了并发执行的事务顺序执行,而不会导致系统状态不一致。 D是持久性(durable):保证了事务完成后所作的改动都会被持久化,即使是发生灾难性的失败。可恢复性资源保存了一份事务日志,如果资源发生故障,可以通过日志来将数据重建起来。 银行转帐的例子是最经典的事务范例: 用户把钱从一个银行账号转账至另一个银行账号,需要将资金从一个银行账号中取出,然后再存入另一个银行账号中。理想来说,这两次操作都应该成功。但是,如果有错误发生,则两次操作都应该失败,否则的话,操作之后其中一个账号中的金额将会是错误的,整个操作过程应该是原子性的,两个操作都是一个原子事务操作的一部分。

T-SQL 之 事务

旧街凉风 提交于 2020-01-15 06:14:26
  事务全部是关于原子性的。原子性是指可以把一些事情当做一个单元来看待。从数据库的角度看,它是指应全部执行或全部都不执行的一条或多条语句的最小组合。   事务要有非常明确的开始和结束点。SQL Server中的每一条SELECT、INSERT、UPDATE和DELETE语句都是隐式事务的一部分。即使只发出一条语句,也会把这条语句当做一个事务。但是如果需要的不只是一条,可能是多条语句呢?在这种情况下,就需要有一种方法来标记事务的开始和结束,以及事务的成功或失败。可以使用一些T-SQL语句在事务中"标记"这些点。   BEGIN TRAN:设置起始点。   COMMIT TRAN:使事务成为数据库中永久的、不可逆转的一部分。   ROLLBACK TRAN:本质上说想要忘记它曾经发生过。   SAVE TRAN:创建一个特定标记符,只允许部分回滚。 一、事务语法   1、BEGIN TRAN   事务的开始可能是事务过程中最容易理解的概念。它唯一的目的就是表示一个单元的开始。如果由于某种原因,不能或者不想提交事务,那么这就是所有数据库活动将要回滚的起点。也就是说,数据库会忽略这个起点之后的最终没有提交的所有语句。   语法如下: BEGIN TRAN[SACTION] [ <transaction name> | <@transaction variable> ]   [ WITH

数据库事务

眉间皱痕 提交于 2020-01-15 05:34:54
1、什么是事务 事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。 简单理解,事务就是对数据库一连串的操作,更新、保存和删除,对数据产生变化的操作。 2、为什么需要事务 事务的作用是保证数据准确性和一致性的一种机制。假如没有事务,那我们提交数据不会保存,有异常的时候数据不会回滚。 比如说往银行账户存钱,余额没有添加,去ATM取钱,ATM出故障没吐钱,余额变少了。 3、怎么做 在JAVA开发中通常借助Spring管理事务,大致的原理就是通过AOP在方法前后添加开始事务,提交或回滚的操作。 Spring事务管理分为声明式和编程式两种。 (1)声明式一般是写在配置文件的,它的好处是配置简便,模糊匹配对应的服务方法。 也可以通过注解的方式来开始事务,不过它也是属于声明式。 (2) 编程式 看这个名字大致可以猜出是在我们业务嵌入事务管理代码,好处是事务控制粒度更加细化,缺点是对代码有侵入性。 使用@Transactional来声明事务 当@Transactional作用于类上时,该类的所有 public 方法将都具有该类型的事务属性,同时,我们也可以在方法级别使用该注解来覆盖类级别的定义。 @Transactional 注解应该只被应用到 public 方法上,这是由 Spring AOP 的本质决定的。如果你在 protected

Spring 事务处理

点点圈 提交于 2020-01-15 00:49:13
前言: 事务处理的本质 在学习事务处理前,需要明确一点: 数据库操作最终都要使用到JDBC,那么无论上层如何封装,底层都是调用Connection的commit,rollback来完成 烦人的事务处理: 在日常开发中,数据访问层(DAO)必然需要进行事务的处理,但是我们会发现,事务处理的代码通常是简单的重复的,编写这样的重复代码会浪费大量的时间,所以我们需要找到一种方案可以将这些重复的代码进行抽取,以便与管理维护和复用, 我们的需求:在一系列数据库操作上的方法上增加额外的事务处理代码,让原来的方法中只关注具体的数据处理,即在原本以及存在的数据库操作方法上添加额外的事务处理逻辑 到这里你应该想到AOP了,没错! 这样的场景下AOP是最好的解决方案; 解决方案:AOP 回顾一下Spring的AOP:在结合目前的需求 1.将目标对象(DAO)放入Spring容器 2.告知Spring你的通知代码是什么(事务处理) 3.告知Spring 哪些方法(DAO的CRUD)要应用那些通知(不同的事务处理代码) 4.从Spring中获取代理对象来完成原本的CRUD,代理对象会自动完成事务处理 Spring 事务处理API Spring作为框架,需要进行详细的设计,全方位的考虑事务处理的各个方面,而不仅是简单的帮你执行commit,rollback; Spring对事务处理进行了抽象定义

Redis(四)

こ雲淡風輕ζ 提交于 2020-01-15 00:46:26
Redis的事务 Redis事务的定义 Redis事务是一个单独的隔离操作,事务中所有的命令都会序列化,按顺序地执行,事务在执行的过程中,不会被其他客户端发送来的命令请求所打断 Redis事务的主要作用就是串联多个命令防止别的命令插队 Multi,Exec,discard 从输入Multi命令开始、输入的命令都会依次进入命令队列中,但不会执行,直到输入Exec后,Redis会将之前的命令队列中的命令依次执行 *** 组队的过程中可以通过discard来放弃组队 组队中某个命令出现了报告错误,执行时整个的所有队列都会被取消 如果运行时阶段某个命令报出了错误,则只有报错的命令不会被执行,而其他命令都会被执行,不会回滚 区别于关系型数据库,如果关系型数据库有一个错误,则全部回滚(roll back) 锁的使用 在关系型数据库悲观锁使用很多,在Redis这种NoSQL数据库中乐观锁使用很多 WATCH key [key...] 在执行multi之前,先执行watch key1 [key2],可以监视一个(或多个)Key,如果在事务执行之前这个(或这些)key被其他命令所改动,那么事务将被全部取消 解答:因为我在exec之前在另个一个客户端更改了a的值,则watch监测下的a被改动,则事务将被全部取消 unwatch 取消watch对所有key的监视 Redis事务的特性 来源: https

事务

半世苍凉 提交于 2020-01-15 00:45:26
事务是在数据库上按照一定的逻辑顺序执行的任务序列,既可以由用户手动执行,也可以由某种数据库程序自动执行。事务实际上就是对数据库的一个或多个更改。 事务具有以下四个标准属性,常用缩略词ACID来表示: 原子性:保证任务中的所有操作都执行完毕;否则,事务会在出现错误时终止,并回滚之前所有操作回到原始状态。 一致性:如果事务执行成功,则数据库的状态得到了进行了正确的转变。 隔离性:保证不同的事务相互独立、透明的执行。 持久性:即使出现了系统故障,之前成功执行的事务的结果也会持久存在。 事务控制的四个命令: COMMIT:提交更改;   用于保存事务对数据库所做的更改,会将自上次COMMIT命令或者ROLLBACK命令执行以来的所有的事务都保存到数据库中。 ROLLBACK:回滚更改;   用于撤销尚未保存到数据库中的事务,它只能撤销自上次COMMIT命令或者ROLLBACK命令执行以来的所有的事务。 SAVE:在事务内部创建一系列可以ROLLBACK的还原点;   是事务中的一个状态点,使得我们可以将事务回滚至特定的点,而不是将整个事务都撤销。 SET TRANSACTION:命名事务;   可以用来初始化数据库事务,指定随后的事务的各种特征。 eg: BEGIN TRANSACTION SAVE TRANSACTION S1 SELECT * FROM table1 where

MySQL-事务

风流意气都作罢 提交于 2020-01-14 19:44:05
MySQL-事务 事务定义 事务就是一组原子性的SQL查询语句,要么全部执行成功、要么全部执行失败。 ACID 一个良好的事务数据库系统,必须具备ACID特性。 原子性(Atomicity) 要么全部执行、要么全部不执行 一致性(Consistency) 事务开始和结束时,数据必须保证一致性 隔离性(Isolation) 事务处理过程中、中间状态对其他事务不可见 持久性(Durability) 事务完成后、它对数据的修改时永久性的 事务隔离级别 MySQL有四种隔离级别。 Read Uncommitted读未提交 所有事务可以看到其他未提交事务的执行结果 Read Committed读已提交 事务只能看到已提交事务所做的改动 Repeatable Read可重复读 默认的隔离级别 Serializable串行 强制事务排序、一次只执行一个事务 并发问题 脏读 事务读到了其他未提交的事务修改的数据,此数据可能因回滚而作废。 不可重复读 事务多次读取同一数据,返回的结果不同。 幻读 事务多次读取同一数据,返回的结果条数不同。 不可重复读和幻读区别: 不可重复读:针对其他事务提交前后,对行的修改来说。 幻读:针对其他事务提交前后,对行的增删来说。 不同隔离级别下的并发问题 脏读 不可重复读 幻读 读未提交 √ √ √ 读已提交 × √ √ 可重复读 × × x(注) 串行 × × ×

SqlServer事务日志满的解决方案

本小妞迷上赌 提交于 2020-01-14 13:35:41
这是微软社区精英项目传过来的一个案例。 我当时给了解决方案。 问题描述: 环境说明: 操作系统 win2003 数据库 SQL SERVER 2000 SP4 数据库数据大小 150GB左右 具体故障描述: 连接门户系统 提示无法连接到配置服务器 去服务器本地查看 右下角提示 数据库所在的磁盘已满 于是把SQL服务停掉 该磁盘立即有十几GB的空间释放 重新启动SQL服务 连接门户系统 依然提示无法连接配置数据库 在SQL控制台连接该数据库也是连不上 门户系统共三台服务器 : 10.205.1.6 应用系统服务器 SharePoint 10.205.1.7 门户DB 服务器 数据库服务器 SQL 2000 10.205.1.5 DC服务器 出现该错误的是10.205.1.7 数据库服务器 错误截屏: 解决方案: 这个问题初步看起来是SharePoint_Config和tempdb数据库的日志文件占用过大空间,以致于所在磁盘空间满了。 要解决这个问题,要稍微麻烦点。因为磁盘空间已满,SqlServer服务有可能无法正常启动。先不要让应用程序连接数据库,SharePoint也不要连接数据库。试着启动SqlServer服务。看看能否启动起来。如果不能,需要腾出来一点空间来。删除一些暂时不要的软件。总之要让SqlServer服务启动起来。如果SqlServer服务能起来,就做下面的。

spring

被刻印的时光 ゝ 提交于 2020-01-14 08:09:01
springmvc常用注解和spring事务的四大特性、事务的传播特性 1.SpringMVC常用注解 RequestParam RequestBody PathVaribale CookieValue ModelAttribute SessionAttribute 2.事务四大特性 ⑴ 原子性(Atomicity)   原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前面两篇博客介绍事务的功能是一样的概念,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。 ⑵ 一致性(Consistency)   一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。 拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。 ⑶ 隔离性(Isolation)   隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。 即要达到这么一种效果:对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束,要么在T1结束之后才开始