mysql事务

在CentOS7上搭建MySQL主从复制与读写分离

强颜欢笑 提交于 2019-12-01 19:52:55
在 CentOS7上搭建MySQL主从复制与读写分离 MySQL主从复制原理 MySQL的主从复制和MySQL的读写分离两者有着紧密联系,首先要部署主从复制,只有主从复制完成了,才能在此基础上进行数据的读写分离。 ( 1)MySQL支持复制的类型。 1)基于语句的复制。MySQL默认采用基于语句的复制,效率比较高。 2)基于行的复制。把改变的内容复制过去,而不是把命令在从服务器上执行一遍。 3)混合类型的复制。默认采用基于语句的复制,一旦发现基于语句无法精确复制时,就会采用基于行的复制。 ( 2)MySQL复制的工作过程如图所示。 1)在每个事务更新数据完成之前,Master在二进制日志记录这些改变。写入二进制日志完成后,Master通知存储引擎提交事务。 2)Slave将Master的Binary log复制到其中继日志。首先,Slave开始一个工作线程——I/O线程,I/O线程在Master上打开一个普通的链接,然后开始Binlog dump process。Binlog dump process从Master的二进制日志中读取事件,如果已经跟上Master,它会睡眠并等待Master产生新的事件。I/O线程将这些事件写入中继日志。 3)SQL slave thred(SQL从线程)处理该过程的最后一步。SQL线程从中继日志读取事件,并重放其中的事件而更新Slave的数据

PHP PDO 事务与自动提交

旧街凉风 提交于 2019-12-01 19:03:38
现在通过 PDO 连接上了,在开始进行查询前,必须先理解 PDO 是如何管理事务的。 事务支持四大特性(ACID): 原子性(Atomicity) 一致性(Consistency) 隔离性(Isolation) 持久性(Durability) 通俗地讲,在一个事务中执行的任何操作,即使是分阶段执行的,也能保证安全地应用于数据库,并在提交时不会受到来自其他连接的干扰。 事务操作也可以根据请求自动撤销(假设还没有提交),这使得在脚本中处理错误更加容易。 事务通常是通过把一批更改"积蓄"起来然后使之同时生效而实现的;这样做的好处是可以大大地提供这些更改的效率。 换句话说,事务可以使脚本更快,而且可能更健壮(不过需要正确地使用事务才能获得这样的好处)。 不幸的是,并非每种数据库都支持事务,因此当第一次打开连接时,PDO 需要在所谓的"自动提交"模式下运行。 自动提交模式意味着,如果数据库支持,运行的每个查询都有它自己的隐式事务,如果数据库不支持事务,则没有。 如果需要一个事务,则必须用 PDO::beginTransaction() 方法来启动。如果底层驱动不支持事务,则抛出一个 PDOException 异常(不管错误处理设置是怎样的,这都是一个严重的错误状态)。 一旦开始了事务,可用 PDO::commit() 或 PDO::rollBack()来完成,这取决于事务中的代码是否运行成功

深入学习MySQL事务:ACID特性的实现原理

邮差的信 提交于 2019-12-01 19:01:21
事务是MySQL等关系型数据库区别于NoSQL的重要方面,是保证数据一致性的重要手段。 本文将首先介绍 MySQL 事务相关的基础概念,然后介绍事务的ACID 特性,并分析其实现原理。 MySQL博大精深,文章疏漏之处在所难免,欢迎批评指正。 一、基础概念 事务(Transaction)是访问和更新数据库的程序执行单元;事务中可能包含一个或多个sql语句,这些语句要么都执行,要么都不执行。作为一个关系型数据库,MySQL支持事务,本文介绍基于MySQL5.6。 首先回顾一下MySQL事务的基础知识。 (1). 逻辑架构和存储引擎 图片来源:https://blog.csdn.net/fuzhongmin05/article/details/70904190 如上图所示,MySQL服务器逻辑架构从上往下可以分为三层: (1)第一层:处理客户端连接、授权认证等。 (2)第二层:服务器层,负责查询语句的解析、优化、缓存以及内置函数的实现、存储过程等。 (3)第三层:存储引擎,负责MySQL中数据的存储和提取。 MySQL 中服务器层不管理事务,事务是由存储引擎实现的。 MySQL支持事务的存储引擎有InnoDB、NDB Cluster等,其中InnoDB的使用最为广泛;其他存储引擎不支持事务,如MyIsam、Memory等。 如无特殊说明,后文中描述的内容都是基于InnoDB。 (2).

MySQL事务

▼魔方 西西 提交于 2019-12-01 18:53:00
MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务! (1)在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。 (2)事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。 (3)事务用来管理 insert,update,delete 语句 一般来说,事务是必须满足4个条件(ACID)::原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。 (1)原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。 (2)一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。 (3)隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力

MySQL事务

☆樱花仙子☆ 提交于 2019-12-01 18:39:06
MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务! (1)在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。 (2)事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。 (3)事务用来管理 insert,update,delete 语句 一般来说,事务是必须满足4个条件(ACID)::原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。 (1)原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。 (2)一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。 (3)隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力

[转]c3p0学习-JdbcUtil工具类

ぃ、小莉子 提交于 2019-12-01 18:31:45
原文:https://www.cnblogs.com/jonny-xu/p/6374163.html 一、需要jar包:   c3p0-0.9.1.2.jar   mysql-connector-java-5.1.20-bin.jar 二、Java代码:    package com.javaweb.jdbc; import java.sql.Connection; import java.sql.SQLException; import javax.sql.DataSource; import com.mchange.v2.c3p0.ComboPooledDataSource; public class JdbcUtil { // 饿汉式 private static DataSource ds = new ComboPooledDataSource(); /*ThreadLocal * 它为null表示没有事务 * 它不为null表示有事务 * 当事物开始时,需要给它赋值 * 当事务结束时,需要给它赋值null * 并且在开启事务时,让dao的多个方法共享这个Connection */ private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>(); public static

十九:JDBC操作事务

让人想犯罪 __ 提交于 2019-12-01 17:24:11
二、MySQL数据库中操作事务命令 2.1、开启事务(start transaction)   使用"start transaction"开启MySQL数据库的事务,如下所示:      我们首先在数据库中模拟转账失败的场景,首先执行update语句让A用户的money减少100块钱,如下图所示:      然后我们关闭当前操作的dos命令行窗口,这样就导致了刚才执行的update语句的数据库的事务没有被提交,那么我们对A用户的修改就不算是是真正的修改了,下次在查询A用户的money时,依然还是之前的1000,如下图所示:    2.2、提交事务(commit)   下面我们在数据库模拟A——B转账成功的场景      我们手动提交(commit)数据库事务之后,A——B转账100块钱的这个业务操作算是真正成功了,A账户中少了100,B账户中多了100。 2.3、回滚事务(rollback)      通过手动回滚事务,让所有的操作都失效,这样数据就会回到最初的初始状态! 三、JDBC中使用事务   当Jdbc程序向数据库获得一个Connection对象时,默认情况下这个Connection对象会自动向数据库提交在它上面发送的SQL语句。若想关闭这种默认提交方式,让多条SQL在一个事务中执行,可使用下列的JDBC控制事务语句 Connection.setAutoCommit

MySQL使用空事务解决slave从库errant问题

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-01 17:19:51
MySQL集群一般部署为主从架构,主库专门用于写入数据,从库用于读数据。 异常情况下,在从库上写入数据,就会出现主从数据不一致问题,称为errant。 如果从库上的这些数据主库上已经有了,或者主库不需要这些数据,我们就可以使用空事务解决errant问题。 接下来,本文介绍如何使用空事务解决errant问题。 首先查看主库的GTID集合: >show master status\G *************************** 1. row *************************** File: mysql-bin.000001 Position: 7685 Binlog_Do_DB: Binlog_Ignore_DB: Executed_Gtid_Set: b7a7c5c5-c2fa-11e9-8bd0-0022bf5315f2:1-17, c84e52d2-c2fa-11e9-9b19-002211f26ad8:1, dea2c515-c2fa-11e9-9eef-0022a6d40ab9:1-6 1 row in set (0.00 sec) 查看从库的GITD集合: >show master status\G *************************** 1. row *************************** File:

终于有人把分布式事务说清楚了!

↘锁芯ラ 提交于 2019-12-01 17:07:13
前言 这篇文章将给大家介绍一下对分布式事务的一些见解,并讲解分布式事务处理框架 TX-LCN 的执行原理,错误之处望各位不吝指正。 1. 什么情况下需要使用分布式事务? 使用的场景很多,先举一个常见的:在微服务系统中,如果一个业务需要使用到不同的微服务,并且不同的微服务对应不同的数据库。 打个比方:电商平台有一个客户下订单的业务逻辑,这个业务逻辑涉及到两个微服务,一个是库存服务(库存减一),另一个是订单服务(订单数加一),示意图如下: 如果在执行这个业务逻辑时没有使用分布式事务,当库存与订单其中一个出现故障时,就很可能出现这样的情况:库存数据库的值减少了 1,但是订单数据库没有变化;或是库存没变化,多了一个订单,也就是出现了数据不一致现象。 所以在类似的场合下我们要使用分布式事务,保证数据的一致性。 2. 分布式事务的解决思路 2.1引入:MySQL 中的两阶段提交策略 在谈分布式事务的解决思路之前,我们先来看看单一数据源是如何做事务处理的,我们可以从中获取一些启发。 我们以 MySQL 的 InnoDB 引擎为例,由于 MySQL 中有两套日志机制,一套是存储层的 redo log,另一套是 server 层的 binlog,每次更新数据都要对两个日志进行更新。为了防止写日志时只写了其中一个而没有写另外一个,MySQL 使用了一个叫 两阶段提交 的方式保证事务的一致性

MySQL运行机制原理&架构

谁说胖子不能爱 提交于 2019-12-01 16:48:42
1.MySQL知识普及: MySQL是一个开放源代码的关系数据库管理系统。 MySQL架构可以在多种不同场景中应用并发挥良好作用。主要体现在存储引擎的架构上,插件式的存储引擎架构将查询处理和其它的系统任务以及数据的存储提取相分离。 2.MySQL逻辑架构: 1).Connectors MySQL首先是一个网络程序,其在TCP之上定义了自己的 应用层协议 。所以要使用MySQL,我们可以编写代码,跟MySQL Server建立TCP连接,之后按照其定义好的协议进行交互。当然这样比较麻烦,比较方便的办法是调用SDK,比如Native C API、JDBC、PHP等各语言MySQL Connector,或者通过ODBC。但通过SDK来访问MySQL,本质上还是在TCP连接上通过MySQL协议跟MySQL进行交互。 2).Connection Management 每一个基于TCP的网络服务都需要管理客户端链接,MySQL也不例外。MySQL会为每一个连接绑定一个线程,之后这个连接上的所有查询都在这个线程中执行。为了避免频繁创建和销毁线程带来开销,MySQL通常会缓存线程或者使用线程池,从而避免频繁的创建和销毁线程。 客户端连接到MySQL后,在使用MySQL的功能之前,需要进行认证,认证基于用户名、主机名、密码。如果用了SSL或者TLS的方式进行连接,还会进行证书认证。 3).SQL