事务

MySQL5.7 半同步复制

不羁岁月 提交于 2020-03-18 07:53:46
一、概述 5.5与5.7的半同步复制可能存在差异,从MySQL5.5开始,MySQL以插件的形式支持半同步复制 异步 :默认情况下,MySQL复制是异步的。主库在执行完客户端提交的事务后会立即将结果返给给客户端,并不关心从库是否已经接收并处理。此时若是主若是崩溃了,那提交完成的事务可能并没有传到从上,从而导致数据不一致。 全同步 :当主库执行完接受到的事务,会等待所有从机执行此事务的返回值,当收到所有从机的返回值时才会返回给客户端。所以对性能的影响严重。 半同步 :介于以上两者之间,主库在执行完客户端的事务后,会等待至少一个从机接收到并写入relay log中才会返回给客户端。它提高了数据的安全性, 也造成了一定程度的延迟,这个延迟最少是一个TCP/IP往返的时间。所以,半同步复制最好在低延时的网络中使用。 relay log中继日志 :在salve中IO线程会拉去master的二进制到relay log中,然后SQL线程会读取relay-log日志的内容并应用到从服务器。 两个插件实现半同步功能。主端有一个插件,从端有一个插件。 半同步复制必须在主和从都有启用,否则使用异步复制。 只有事件写入中继日志并且刷新到磁盘后,从设备才会确认收到事务的事件。 如果无任何从服务器确认事务的情况下发生超时,主服务器将恢复异步复制。当至少一个半同步丛机赶上,主机将返回到半同步复制。 After

MySQL 5.7 深度解析: 半同步复制技术

不问归期 提交于 2020-03-18 07:52:56
复制架构衍生史 在谈这个特性之前,我们先来看看MySQL的复制架构衍生史。 MySQL的复制分为四种: 普通的replication,异步同步。 搭建简单,使用非常广泛,从mysql诞生之初,就产生了这种架构,性能非常好,可谓非常成熟。 但是这种架构数据是异步的,所以有丢失数据库的风险。 semi-sync replication,半同步。性能,功能都介于异步和全同步中间。从mysql5.5开始诞生,目的是为了折中上述两种架构的性能以及优缺点。 sync replication,全同步。目前官方5.7基于Group replication的全同步技术处在labs版本,离正式集成已经不远。全同步技术带来了更多的数据一致性保障。相信是未来同步技术一个重要方向,值得期待。 mysql cluster。 基于NDB引擎,搭建也简单,本身也比较稳定,是mysql里面对数据保护最靠谱的架构,也是目前唯一一个数据完全同步的架构,数据零丢失。不过对业务比较挑剔,限制也较多。 半同步复制 我们今天谈论第二种架构。我们知道,普通的replication,即mysql的异步复制,依靠mysql二进制日志也即binary log进行数据复制。比如两台机器,一台主机(master),另外一台是从机(slave)。 正常的复制为:事务一(t1)写入binlog buffer;dumper

MySQL Replication--半同步复制(Semi-Sync Replication)

↘锁芯ラ 提交于 2020-03-18 07:51:06
半同步复制 默认配置下,MYSQL主从库通过binlog来保持一致,主库事务提交后,将binlog日志写入磁盘,然后返回给用户,备库通过拉取主库的binlog来同步主库的操作,无法保证主备节点数据实时一致,只能保证最终一致,因此属于异步复制。 为保证在主备切换时,主备节点数据完全一致,MYSQL提供了半同步复制,其实现原理为:事务在主库上执行完成,生成BINLOG并推送给备库,等待备库的影响消息,备库将接受到的binlog(file,pos)信息返回给主库,主库接收到背库的确认消息后,在返回给用户,事务提交完成。 半同步复制只保证主库和备库的binlog同步,但主库无需等待备库应用这些binglog就会返回提交结果,从库异步地应用这些binlog,因此主库和从库的数据不是实时同步的,因此称为“半同步”。 半同步复制参数rpl_semi_sync_master_timeout用于控制主库等待备库响应的消息时间(单位ms),如果超过该阀值,则认为备库存在问题,将半同步复制修改为异步复制,避免主库的执行事务长时间等待。参数rpl_semi_sync_master_timeout的默认值为50ms。 rpl_semi_sync_master_enabled:表示主上是否开启半同步复制功能,可以动态修改。可选值:ON\OFF rpl_semi_sync_slave_enabled

MySQL中InnoDB和MyISAM引擎的对比

心已入冬 提交于 2020-03-17 19:05:34
目录 索引对比 锁对比 事务对比 并发 全文索引对比 外键 其他 一.索引对比 1.B+树概念 我们这里关注B+树的两个特性: 叶子节点包含数据data(data并不特指数据库中的某一行数据,也可以是某个数值,指针等) 叶子节点均在同一层,且每个节点均可以直接找到上一个或者下一个节点(双向指针,比常规的B+树多了一个指向上一个的指针) 2.Innodb 以用户表为例, id 为主键,另外name存在索引 idx_name : CREATE TABLE `t_user` ( `id` bigint, `name` varchar(10), `age` int, PRIMARY KEY (`id`), KEY `idx_name` (`name`) ); 插入数据: insert into t_user (id,`name`,age) values (1,'n7',10), (2,'n6',20), (3,'n5',30), (4,'n4',40), (5,'n3',50), (6,'n2',60), (7,'n1',70) ①聚簇索引(聚集索引) 聚簇索引:行数据与键值(主键)紧凑地存储在一起; InnoDB中表现为:B+树叶子节点的data用于存放 行数据 (包含主键值、其他列数据、回滚指针、事务id等),物理上索引数据与行数据都放在同一个文件中( .ibd ) 如果没有定义主键

Oracle数据库:事务问题

倾然丶 夕夏残阳落幕 提交于 2020-03-17 17:06:05
文章目录 1、事务 1.1、事务的开启 1.2、关闭事务 1、事务 ​ 事务是指作为单个逻辑工作单元执行的一组相关操作。这些操作 要么全都执行,要么全都不执行 。 使用事务是为了保证数据的安全有效 。 事务有一下四个特点:(ACID) 原子性(Atomic):一个事务是一个不可分割的工作单位,事务中包括的操作要么都做,要么都不做。 一致性(Consistence):事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。 隔离性(Isolation):一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的, 并发执行的各个事务之间不能互相干扰 。 持久性(Durability):持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。 当事务之间发生并发时有几个隔离级别: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zdWOsY9a-1584423625866)(Oracle笔记图片/1584400605944.png)] 丢失更新 :两个事务同时存储, 一个存储 100 , 一个存储 200,最终可能至存储了200 或者 100,那另一个的更新就没成功,即结果不为预想的 300 脏读 :事务 T1 更新了一行数据,还没有提交所做的修改

PostgreSQL MVCC可见性判断

纵饮孤独 提交于 2020-03-17 12:14:20
1、 知识准备 1)Tuple格式头 HeapTupleHeaderData typedef struct HeapTupleFields{ TransactionId t_xmin; /* inserting xact ID */ TransactionId t_xmax; /* deleting or locking xact ID */ union{ CommandId t_cid; /* inserting or deleting command ID, or both */ TransactionId t_xvac; /* VACUUM FULL xact ID */ }t_field3; }HeapTupleFields; 其中: t_xmin:存储的是产生这个元组的事务ID,可能是insert或者update语句 t_xmax:存储的是删除或者锁定这个元组的事务ID t_cid :包含cmin和cmax两个字段,分别存储创建这个元组的Command ID和删除这个元组的Command ID t_xvac:存储的是VACUUM FULL 命令的事务ID PostgreSQL主要就是通过t_xmin,t_xmax,cmin和cmax,ctid,t_infomask来唯一定义一个元组(t_xmin,t_xmax,cmin和cmax,ctid实际上也是一个表的隐藏的标记字段)

数据库常见面试题(非DBA方向)

南楼画角 提交于 2020-03-17 11:47:07
数据库面试题总结之一 1.什么是事务?以及四个特性 事务(Transaction)是并发控制的基本单位。 所谓的事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。 事务是数据库维护数据一致性的单位,在每个事务结束时,都能保持数据一致性。 ACID 原子性:要么执行,要么不执行,也就是不可再分,已经最小了。 隔离性:所有操作全部执行完以前其它会话不能看到过程。 一致性:事务前后,数据总额一致。 持久性:一旦事务提交,对数据的改变就是永久的 事物的语句: 1.开始事务:BEGIN TRANSACTION 2.提交事务:COMMIT TRANSACTION 3.回滚事务:ROLLBACK TRANSACTION 2.索引是什么?有哪些作用和优缺点 索引就一种特殊的查询表,数据库的搜索可以利用它加速对数据的检索。 它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。 索引可以是唯一的,创建索引允许指定单个列或者是多个列。 缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小 MySQL数据库几个基本的索引类型:普通索引、唯一索引、主键索引、全文索引 索引加快数据库的检索速度 索引降低了插入、删除、修改等维护任务的速度 唯一索引可以确保每一行数据的唯一性 通过使用索引,可以在查询的过程中使用优化隐藏器,提高系统的性能

2018年5月5日笔记

女生的网名这么多〃 提交于 2020-03-17 08:55:09
Python DB-API Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口 Python DB-API 使用流程: 引入API模块 获取与数据库的连接 执行SQL语句和存储过程 关闭数据库连接 MySQLdb (python2) MySQLdb是用于python连接MySQL数据库接口的,它实现了 Python 数据库 API 规范 V2.0,基于 MySQL C API 上建立的。 安装MySQLdb Windows 安装MySQLdb,请参考 http://sourceforge.net/projects/mysql-python Linux安装MytSQLdb :请参考 https://pypi.python.org/pypi/MySQL-python ) 从以上链接可选择适合您的平台的安装包,分为预编译的二进制文件和源代码安装包。 如果您选择二进制文件发行版本的话,安装过程基本安装提示即可完成。如果从源代码进行安装的话,则需要切换到MySQLdb发行版本的顶级目录,并键入下列命令: 1 $ gunzip MySQL-python-1.2.2.tar.gz 2 $ tar -xvf MySQL-python-1.2.2.tar 3 $ cd MySQL-python-1.2.2 4 $ python

mySQL基础

爷,独闯天下 提交于 2020-03-17 07:45:03
mySQL 一、为什么要学习数据库 二、数据库的相关概念 DBMS、DB、SQL 三、数据库存储数据的特点 四、初始MySQL MySQL产品的介绍 MySQL产品的安装 ★ MySQL服务的启动和停止 ★ MySQL服务的登录和退出 ★ MySQL的常见命令和语法规范 五、DQL语言的学习 ★ 基础查询 ★ 条件查询 ★ 排序查询 ★ 常见函数 ★ 分组函数 ★ 分组查询 ★ 连接查询 ★ 子查询 √ 分页查询 ★ union联合查询 √ 六、DML语言的学习 ★ 插入语句 修改语句 删除语句 七、DDL语言的学习 库和表的管理 √ 常见数据类型介绍 √ 常见约束 √ 八、TCL语言的学习 事务和事务处理 九、视图的讲解 √ 十、变量 十一、存储过程和函数 十二、流程控制结构 数据库的好处 1.持久化数据到本地 2.可以实现结构化查询,方便管理 数据库相关概念 1、DB:数据库,保存一组有组织的数据的容器 2、DBMS:数据库管理系统,又称为数据库软件(产品),用于管理DB中的数据 3、SQL:结构化查询语言,用于和DBMS通信的语言 数据库存储数据的特点 1、将数据放到表中,表再放到库中 2、一个数据库中可以有多个表,每个表都有一个的名字,用来标识自己。表名具有唯一性。 3、表具有一些特性,这些特性定义了数据在表中如何存储,类似java中 “类”的设计。 4、表由列组成