袁党生博客

  • 主页
  • linux基础
  • SHELL
  • WEB
  • 负载
  • 企业级应用
  • 数据库
  • KVM
  • Docker
  • K8S
  • 监控
  • 存储
  • 博客搭建问题
  1. 首页
  2. 数据库
  3. 正文

六、MySQL架构和存储引擎

2020年4月23日 709点热度 0人点赞 0条评论


MySql架构

术语解释:

事务:多个操作的完整集合,这几个操作必须作为一个整体出现,一次性全部做完,myisam不支持此特性

加锁:当对数据库中的表操作时,对该表或表中的内容进行加锁,防止多个人同时操作,会影响数据库的并发性,myisam支持表级锁(更改表时,对整个表加锁),innodb支持行级锁(更改表时,只对某一行加锁),innodb并发性更高,更加灵活

MVCC 多版本并发控制机制
多个事务对某个表同时进行操作时如t1事务进行写操作,t2事务进行查询操作,此时写操作尚未完成,操作过程中形成的数据我们称之为脏数据,为了防止t2事务查看到脏数据,我们可以使用表锁进行控制,但这样一来就需要等待写操作完成后才能进行查询,这样一来就降低了效率。mvcc机制是当t2事务查询表时,查询到的表的状态为写操作之前的表状态,即查看的是表的某一时间点的一个快照。这样就形成了多个版本的并存,如果有更多事务同时进行读操作,也就形成了多版本的并发控制

select查到记录的insert事务编号比当前事务编号要小(早),delete事务编号比当前事务编号要大(晚)
mysisam使用场景:速度快,存放不重要的数据,并发性差

存储引擎

  • MyISAM引擎特点:
      不支持事务
      表级锁定
      读写相互阻塞,写入不能读,读时不能写
      只缓存索引
      不支持外键约束
      不支持聚簇索引
      读取数据较快,占用资源较少
      不支持MVCC(多版本并发控制机制)高并发
      崩溃恢复性较差
      MySQL5.5.5前默认的数据库引擎

  • MyISAM存储引擎适用场景
    只读(或者写较少)、表较小(可以接受长时间进行修复操作)

  • MyISAM引擎文件
      tbl_name.frm 表格式定义
      tbl_name.MYD 数据文件
      tbl_name.MYI 索引文件

  • InnoDB引擎特点
      行级锁
      支持事务,适合处理大量短期事务
      读写阻塞与事务隔离级别相关
      可缓存数据和索引
      支持聚簇索引
      崩溃恢复性更好
      支持MVCC高并发
      从MySQL5.5后支持全文索引
      从MySQL5.5.5开始为默认的数据库引擎

  • InnoDB数据库文件
      所有InnoDB表的数据和索引放置于同一个表空间中
        表空间文件:datadir定义的目录下
        数据文件:ibddata1, ibddata2, ...
      每个表单独使用一个表空间存储表的数据和索引
        启用:innodb_file_per_table=ON
        参看:https://mariadb.com/kb/en/library/xtradbinnodb-server-system-variables/#innodb_file_per_table
          ON (>= MariaDB 5.5)
        两类文件放在数据库独立目录中
          数据文件(存储数据和索引):tb_name.ibd
          表格式定义:tb_name.frm

其他存储引擎

  • Performance_Schema:Performance_Schema数据库
  • Memory :将所有数据存储在RAM中,以便在需要快速查找参考和其他类似数据的环境中进行快速访问。适用存放临时数据。引擎以前被称为HEAP引擎
  • MRG_MyISAM:使MySQL DBA或开发人员能够对一系列相同的MyISAM表进行逻辑分组,并将它们作为一个对象引用。适用于VLDB(Very Large Data Base)环境,如数据仓库
  • Archive :为存储和检索大量很少参考的存档或安全审核信息,只支持SELECT和INSERT操作;支持行级锁和专用缓存区
  • Federated联合:用于访问其它远程MySQL服务器一个代理,它通过创建一个到远程MySQL服务器的客户端连接,并将查询传输到远程服务器执行,而后完成数据存取,提供链接单独MySQL服务器的能力,以便从多个物理服务器创建一个逻辑数据库。非常适合分布式或数据集市环境

其他数据库引擎

  • BDB:可替代InnoDB的事务引擎,支持COMMIT、ROLLBACK和其他事务特性
  • Cluster/NDB:MySQL的簇式数据库引擎,尤其适合于具有高性能查找要求的应用程序,这类查找需求还要求具有最高的正常工作时间和可用性
  • CSV:CSV存储引擎使用逗号分隔值格式将数据存储在文本文件中。可以使用CSV引擎以CSV格式导入和导出其他软件和应用程序之间的数据交换
  • BLACKHOLE :黑洞存储引擎接受但不存储数据,检索总是返回一个空集。该功能可用于分布式数据库设计,数据自动复制,但不是本地存储
  • example:“stub”引擎,它什么都不做。可以使用此引擎创建表,但不能将数据存储在其中或从中检索。目的是作为例子来说明如何开始编写新的存储引擎

其他存储引擎

  • MariaDB支持的其它存储引擎:
      OQGraph
      SphinxSE
      TokuDB
      Cassandra
      CONNECT
      SQUENCE

管理存储引擎

  • 查看mysql支持的存储引擎:
    show engines;
  • 查看当前默认的存储引擎:
    show variables like '%storage_engine%';
  • 设置默认的存储引擎:
    vim /etc/my.conf
    [mysqld]
    default_storage_engine= InnoDB;
    innodb_file_per_table=on   数据分开存放,便于管理,如果不加此项,5.5之前版本数据会集中存放,不利于管理
  • 查看库中所有表使用的存储引擎
    show table status from db_name;
  • 查看库中指定表的存储引擎
    show table status like ' tb_name ';
    show create table tb_name;
  • 设置表的存储引擎:
    CREATE TABLE tb_name(... ) ENGINE=InnoDB;
    ALTER TABLE tb_name ENGINE=InnoDB;

MySQL中的系统数据库

  • mysql数据库
    是mysql的核心数据库,类似于Sql Server中的master库,主要负责存储数据库的用户、权限设置、关键字等mysql自己需要使用的控制和管理信息
  • performance_schema数据库
    MySQL 5.5开始新增的数据库,主要用于收集数据库服务器性能参数,库里表的存储引擎均为PERFORMANCE_SCHEMA,用户不能创建存储引擎为PERFORMANCE_SCHEMA的表
  • information_schema数据库
    MySQL 5.0之后产生的,一个虚拟数据库,物理上并不存在information_schema数据库类似与“数据字典”,提供了访问数据库元数据的方式,即数据的数据。比如数据库名或表名,列类型,访问权限(更加细化的访问方式)
标签: 暂无
最后更新:2023年4月24日

袁党生

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

COPYRIGHT © 2023 linux学习. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

豫ICP备18039507号-1