青蛙学Linux—MySQL
1、MySQL是什么?
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。
MySQL为什么会如此流行呢?因为它有以下特点:
- 简单易用:MySQL的使用非常简单,稍微有IT技术背景的人员都可以参照文档安装和运行MySQL
- 开源:开源意味着免费,这也是一开始很多人选择MySQL的原因
- 支持多种存储引擎:MySQL有多种存储引擎,每种存储引擎有各自的优缺点,可以择优选择使用:MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、FEDERATED、ARCHIVE、CSV、BLACKHOLE
- 支持高可用架构:MySQL自身提供的replication(主从复制)功能可以实现MySQL数据的实时备份,结合其他高可用软件可以很方便的实现高可用
MySQL官网:https://www.mysql.com。
2、基于MySQL的发行版
目前流行的MySQL分支发行版有Percona Server和MariaDB。
Percona Server
Percona Server是由领先的MySQL咨询公司Percona发布的一款基于MySQL的关系型数据库,是一款独立的数据库产品,与MySQL完全兼容。在众多MySQL分支发行版中是最为接近官方MySQL Enterprise的版本。
Percona Server使用自行开发的XtraDB引擎;Percona Server在可管理性和稳定性上较MySQL都有一定的提升;Percona Server还是开源和免费的软件,而官方的MySQL Enterprise则是收费版本。
Percona公司还提供了其他诸如高可用、数据库管理和备份等解决方案,官网:https://www.percona.com。
MariaDB
MariaDB由MySQL的创始人Michael Widenius主导开发。先前其曾将自己创建的公司MySQL AB出售给了SUN,随后SUN被Oracle收购,Michael Widenius不满于Oracle有将MySQL闭源的潜在风险所以开发了MariaDB。
MariaDB当前主要由开源社区进行维护,采用GPL授权许可;MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品;在存储引擎方面,使用XtraDB来代替MySQL的InnoDB。
MariaDB官网:https://mariadb.org。
3、MySQL的存储引擎
MySQL常用的存储引擎有MyISAM和InnoDB。
在MySQL 5.5之前的版本,默认使用的是MyISAM引擎,而从MySQL 5.5开始,已将默认存储引擎从MyISAM改为InnoDB。
两种存储引擎的大致区别在于:
- InnoDB支持事务,而MyISAM不支持。事务是一种高级的数据处理方式,可以在一些增删改查出错时进行回滚操作以还原数据
- MyISAM查询数据相对较快,适合大量的select操作,可以全文索引;InnoDB适合频繁修改以及安全性要求较高的应用
- InnoDB支持外键,支持行级锁,MyISAM不支持
- MyISAM索引和数据是分开的,且其索引是压缩的,缓存在内存的是索引,而不是数据;InnoDB缓存在内存的是数据,相对来说,服务器内存越大,InnoDB发挥的优势越大
- InnoDB可支持大并发请求,适合大量insert、update操作
3.1、InnoDB存储结构
使用InnoDB存储引擎,MySQL会将以.frm结尾的表结构文件存放于数据存储目录下以数据库命名的目录中;而数据库中的数据、索引和元数据都会被存储在数据存储目录下的ibdata1文件中;在MySQL的数据存储目录下还存在名为ib_logfile0和ib_logfile1的文件(文件大小可以设置,可设置镜像),这两个文件为事务日志(redo log),用于记录数据库操作的变化,用于事务的回滚操作,这两个文件的写入规则为:先写ib_logfile0,写满后写ib_logfile1,在ib_logfile1写满后再返回写ib_logfile0。
3.2、MyISAM存储结构
MyISAM引擎会将数据全部放置在MySQL数据存储目录中以数据库命名的目录下,名称以表名表示,通过后缀区分不同的文件:.frm为表结构文件;.myd为数据存储文件;.myi为索引文件