MySQL 逻辑架构

连接管理与安全性

每个客户端连接都会有一个线程
认证基于用户名,原始主机信息和密码

优化与执行

Mysql会解析查询并进行优化
对于select会先检查查询缓存,能够找到就直接返回结果集

并发控制

读写锁

锁在COMMIT或ROLLBACK时自动释放

读锁(共享锁)

共享,不阻塞,多个用户可以同时读同一个资源

写锁(独占锁)

保证只有一个用户写入,防止其他用户写入或读取数据

锁粒度

加锁,锁的检查,锁的解除都是要消耗系统资源的
加锁的对象大小成为锁粒度

锁策略

在锁的开销与数据的安全性中寻求平衡

行锁

最大程度支持并发,MySQL服务器层没有实现,由存储引擎实现

表锁

开销最小
MySQL服务器可以根据自己的目的加上表锁而忽略存储引擎的锁机制

事务

一组原子性的SQL语句,要么全部执行,要么全部不执行
ACID
  1. 原子性: 要么全部执行,要么全部不执行
  2. 一致性: 状态的改变是完全的,不存在改变一半就被保存的情况
  3. 隔离性: 在提交前对其他事务不可见
  4. 持久性: 数据更改会永远保存

隔离级别

未提交读(Read Uncommited)

即使事务未曾提交,数据对于其他事务也是可见的.即事务可以读取未提交的数据,也叫脏读读脏数据

可提交读

即一个事务在提交之前,改变对其他事务是不可见的,又叫不可重复读,幻读(在一个事务读取数据后还未提交时,另一个事务更改了数据)

可重复读

解决了幻读和脏读的问题

可串行化

强制事务串行执行,给每一行数据加锁

死锁

死锁指两个或多个事务在同一个资源上相互占用,并请求锁定对方占用的资源,从而造成的恶性循环
死锁发生后,只能通过部分或完全回滚事务才能解决
例子

事务日志

好处

  1. 避免频繁从内存向磁盘中写入数据(可以记录下日志操作,在后台慢慢一次写入,所以日志文件是追加写)
  2. 便于出现故障后的恢复

Mysql中的事务

自动提交(AUTOCOMMIT)

混合使用多种存储引擎

InnoDB: 支持事务
MyISAM: 不支持事务
不支持事务的表回滚不能撤销更改

隐式和显式锁定

显式: 自动加锁
隐式: 主动加锁

多版本并发控制(MVCC)

  • 一个列保存了创建时间,一个列保存删除时间(时间指版本号)
  • 每开始一个新的事务,系统版本号都会递增,并把事务开始时的版本号作为事务的版本号,供与查询到的每行版本号相匹配

MySql存储引擎

  • 表的定义存储在.frm文件中
  • 通过show table status 'tableName'查看表的相关定义信息

InnoDB

是MySql的默认事务型引擎,也是使用最广泛的存储引擎,被设计用来处理大量短期事务
  • 数据存储在表空间中
  • 采用MVCC实现并发,实现四种隔离级别,默认可重复读
  • 基于聚簇索引(第二索引必须包含主键)建立

MyISAM

缺点

  1. 不支持事务和行级锁
  2. 数据库崩溃后无法安全恢复

特性

  1. 对整张表加锁,而不是针对行,但在读取数据的时候依然可以插入新的数据(并发插入)
  2. 延迟更新索引键

其他引擎

CSV

用于转化.csv文件成数据库里的表

Memory

Archive

第三方引擎

选择合适的引擎

除非用到某些InnoDB不具备的特性,并且没有其他办法可以替代,否则都应该优先选择InnoDB引擎
最好不要混用多种存储引擎!!!

更换表的引擎

ALTER TABLE

ALTER Table name Engine = InnoDB

导入与导出

创建与查询

 
 
 
 
 
 
 

MySql历史与架构的更多相关文章

  1. MySQL 高可用架构在业务层面的应用分析

    MySQL 高可用架构在业务层面的应用分析 http://mp.weixin.qq.com/s?__biz=MzAxNjAzMTQyMA==&mid=208312443&idx=1&a ...

  2. MySQL 数据库主从复制架构

    前文<MySQL 数据库事务与复制>分析了 MySQL 复制过程中如何保证 binlog 和事务数据之间的一致性,本文进一步分析引入从库后需要保证主从的数据一致性需要考虑哪些方面. 原生复 ...

  3. MYSQL企业常用架构与调优经验分享

    一.选择Percona Server.MariaDB还是MYSQL  mysql应用源码:http://www.jinhusns.com/Products/Download/?type=xcj 1.M ...

  4. 下载MySQL历史版本

    下载MySQL历史版本 地址:http://downloads.mysql.com/archives/community/

  5. Mysql高可用架构(主从同步)

    做高可用的优势 1.成本低 2.解决单点故障 3.不容易遇到性能瓶颈 一 .Mysql主从同步架构搭建案例 优点如下:·在业务繁忙阶段,在从服务器上可以执行查询工作(即我们常说的读写分离),降低主服务 ...

  6. MySQL集群架构:MHA+MySQL-PROXY+LVS实现MySQL集群架构高可用/高性能-技术流ken

    MHA简介 MHA可以自动化实现主服务器故障转移,这样就可以快速将从服务器晋级为主服务器(通常在10-30s),而不影响复制的一致性,不需要花钱买更多的新服务器,不会有性能损耗,容易安装,不必更改现有 ...

  7. 【MySQL大系】《Mysql集群架构》

    原文地址(微信):[技术文章]<Mysql集群架构> 本文地址:http://www.cnblogs.com/aiweixiao/p/7258444.html 点击关注微信公众号 1.主要 ...

  8. MYSQL 企业常用架构与调优经验分享

    一.选择Percona Server.MariaDB还是MYSQL  mysql应用源码:http://www.jinhusns.com/Products/Download/?type=xcj 1.M ...

  9. mysql扩展性架构实践N库到2N 库的扩容,2变4、4变8

    mysql扩展性架构实践N库到2N 库的扩容,2变4.4变8 http://geek.csdn.net/news/detail/5207058同城 沈剑 http://www.99cankao.com ...

随机推荐

  1. Kerberos原理经典对话

    这是MIT(Massachusetts Institute of Technology)为了帮助人们理解Kerberos的原理而写的一篇对话集.里面有两个虚构的人物:Athena和Euripides, ...

  2. JavaScript事件绑定的三种方式

    (一)事件绑定的三种方式 (1)通过on的形式 <script type="text/javascript"> var div = document.getElemen ...

  3. Apple 订单系统 bug

    Apple 订单系统 bug 看不到最近的购买信息 https://secure1.www.apple.com.cn/shop/order/list refs xgqfrms 2012-2020 ww ...

  4. Bastion Host (BH)

    Bastion Host (BH) 堡垒机 堡垒主机是专门设计和构造成承受攻击网络上的专用计算机. 该计算机通常承载单个应用程序,例如代理服务器,并且所有其他服务都将被删除或限制以减少对计算机的威胁. ...

  5. Typescript & readonly property

    Typescript & readonly property https://www.typescriptlang.org/docs/handbook/classes.html#readonl ...

  6. taro scroll tabs 滚动标签 切换

    taro scroll tabs 滚动标签 切换 https://www.cnblogs.com/lml-lml/p/10954069.html https://developers.weixin.q ...

  7. js & disabled right click & disabled right menu

    js & disabled right click (() => { const log = console.log; log(`disabled copy`); document.bo ...

  8. ts 使用 keyof typeof

    传递参数 const cats = { "Coding Cat": "https://media.giphy.com/media/JIX9t2j0ZTN9S/giphy. ...

  9. Dyno-queues 分布式延迟队列 之 生产消费

    Dyno-queues 分布式延迟队列 之 生产消费 目录 Dyno-queues 分布式延迟队列 之 生产消费 0x00 摘要 0x01 前情回顾 1.1 设计目标 1.2 选型思路 0x02 产生 ...

  10. 02.Fancy Indexing

    import numpy as np x = np.arange(16) index = [3,5,8] x[index] array([3, 5, 8]) X = x.reshape(4,-1) X ...