首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Mysql中级(一):Mysql 体系结构和存储引擎

定义数据库和数据库实例

数据库:物理操作系统文件或者其他形式文件的集合,数据库中文件可以是frm,MYD,MYI,ibd结尾的文件

数据库实例:Mysql数据库由后台线程以及共享内存区组成,在系统上,数据库实例表现为一个线程。

Mysql读取配置文件的顺序 Mysql数据库是啊按照/etc/my.cnf -> /etc/mysql/my.cnf -> /usr/local/mysql/etc/mysql.cnf -> ~/.mysql.cnf顺序读取配置文件的

Mysql数据库会以读取到的最后一个配置文件中的参数为准

Mysql 体系结构

mysql由一下几部分组成:

连接池组件

管理服务和工具组件

SQL接口组件

查询分析器组件

优化器组件

缓冲组件

插件式存储引擎

物理文件 需要特别注意,存储引擎是基于表的,不是基于数据库的。

Mysql 存储引擎

InnoDB 存储引擎【5.5.8版本默认】

InnoDB 存储引擎支持事务,其设计目标主要面向在线事务的应用 特点是:

行锁设计

支持外键

支持类似于Oracle的非锁定读

InnoDB 存储引擎采用聚集的方式,每张表存储都是按照主键顺序存放

InnoDB 存储引擎是Mysql中最常见的存储引擎

MyISAM 存储引擎【5.5.8版本前默认】

MyISAM存储引擎

不支持事务

不支持表锁设计

支持全文索引

MyISAM存储引擎有MYD和MYI组成,MYD用来存储数据文件,MYI用来存储索引文件

NDB 存储引擎

NDB的特点

数据全部放在内存中

通过主键查找方式极快

Memory 存储引擎

Memroy 存储引擎将表存放在内存中,如果数据库重启,表中的数据将丢失 他非常适合用来存储临时数据的临时表 Memory存储引擎默认使用哈希索引,不是我们熟悉的B+树索引 Memory表在很多场景下都可以发挥很好的作用:

用于查找或者映射表,比如将邮编和州名映射的表

用于缓存周期性聚合的数据结果

用于保存数据分析中产生的中间数据

Archive 存储引擎

Archive存储引擎

只支持INSERT和SELECT操作

Archive存储引擎适合存储归档文件,如日志文件

Archive存储引擎用行锁来实现高并发的插入,但是本身并不是事务安全的存储引擎

设计的目标是提供高速插入和压缩功能

Maria存储引擎

Maria存储引擎是未来替换原有的MyISAM存储引擎

支持缓存文件和索引文件

用用行锁设计

支持MVCC功能

如何选择合适的引擎

这么多存储引擎,我们怎么选择?大部分情况下,InnoDB都是正确的选择,所以Oracle在Mysql5.5版本就将InnoDB作为默认的存储引擎,如何选择存储引擎,可以用一句话概况,除非需要用到某些InnoDB不具备的特性,并且没有其他办法可以代替时,否则都应该优先选择InnoDB引擎。

如果需要应用不同的存储引擎,那么需要从以下几个因素进行考虑:

事务:如果应用需要支持事务,那么InnoDB是目前最稳定的并且经过验证的选择

备份:备份需求也会影响存储迎请的选择,如果需要在线热备份,那么选择InnoDB就是最基本的要求

崩溃恢复:数据量比较大时,系统崩溃后如何快速回恢复是一个需要考虑的问题,MyISAM崩溃后的损坏率肯定要高于InnoDB,所以即使不需要事务支持,很多人也选择InnoDB

特有的特性:如果如法确定,那么就是用InnoDB,这个默认选项是安全的,尤其是在不清楚具体需求的时候。

如何转换引擎

介绍三种常见的转换表存储引擎的方法?

Alter Table

将表的存储引擎修改为另一个存储引擎最简单的方法就是Alter table语句,语法如下:

上述语法适合任何存储引擎,但是有一个问题是需要执行的时间很长。Mysql会按行将数据库从原表复制到一张新表中,在复制期间会消耗系统所有的IO能力,同时原表会加上锁,同时如果转换存储引擎,将会失去和原存储引擎相关的所有特性,例如,如果将一张InnoDB表转换为MyISAM表,然后再转为InnoDB,原来InnoDB上所有的外键将全部丢失。

导出与导入

可以使用mysqldump工具将数据库文件导出,然后修改文件中的存储引擎选项,注意需要同时修改表名,

创建与查询

第三种方法综合了第一种方法的高效和第二种方法的安全,不需要导出整张表,首先创建一张新的存储引擎表,然后利用Insert……Select语法来导出数据 语法大致如下:

如果数据量比较大的话,可以使用分批处理,每段数据执行事务提交操作

总结

Mysql 拥有分层架构,上层是服务器的服务,下层是查询执行引擎,下层是存储引擎。Mysql DBA还是Mysql开发人员,都应该从宏观上了解Mysql的体系结构,特别是Mysql独有的插件式存储引擎的概念。对于不同的存储引擎,InnoDB对于95%的用户来说是最佳选择,当然不可否认其他某些情况下某些存储引擎会更好的满足需求

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200218A070MY00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券