观《MYSQL技术内内幕 InnoDB存储引擎 第2版》(一) —— MYSQL体系结构和存储引擎

1.定义数据库和实例

  数据库(文件的集合):物理操作系统文件或其他形式文件类型的集合。在MySQL数据库中,数据库文件可以是frm、MYD、MYI、ibd结尾的文件;当使用NDB引擎时,数据库文件是存放于内存中的文件。

  实例(程序):MySQL数据库由后台线程以及一个共享内存区组成。共享内存区可以被运行的后台线程共享。数据库实例是真正用于操作数据库文件的。

  MySQL是一个单进程多线程架构的数据库,MySQL数据库实例在系统上的表现就是一个进程。

  启动实例时,MySQL数据库会去读取配置文件,根据配置文件参数启动数据库实例。读取顺序为 /etc/my.cnf -----> /etc/mysql/my.cnf ----->  /usr/local/mysql/etc/my.cnf -----> ~/.my.cnf 

2.MySQL体系结构

 

  • 连接池组件
  • 管理服务和工具组件
  • SQL 接口组件
  • 查询分析器组件
  • 优化器组件
  • 缓冲组件
  • 插件式存储引擎
  • 物理文件

3.MySQL存储引擎(可根据预定义的存储引擎接口编写自己的存储引擎)

  InnoDB存储引擎

    支持事务,设计目标面向 在线事务处理(OLTP)应用。行锁设计、支持外键、支持非锁定读。

    数据存放在一个逻辑的表空间中,将每个表单独存放到一个 ibd 文件中,支持裸设备(row disk)创建表空间。

    使用多版本并发控制(MVCC)来获取高并发行=性,并实现 SQL 标准的4种隔离级别,默认位 REPEARABLE 级别。同时,使用 next-key-locking 的策略避免幻读(phantom)。提供插入缓冲(insert buffer)、二次写(double write)、自适应哈希索引(adaptive hash index),预读(read ahead)等高性能和高可用功能。

    使用 聚集(clustered)方式存储数据,每张表都是按主键顺序进行存放,若无显示定义主键,InnoDB为每一行生成一个6字节的 ROWID 作为主键。

  MyISAM存储引擎

    MyISAM 不支持事务、表锁设计;支持全文索引,主要面向 OLAP。缓冲池只缓存索引文件,不缓存数据文件。

    MyISAM存储引擎表由 MYD(存放数据文件) 和 MYI(存放索引文件) 组成,可以通过 myisampack 工具(赫夫曼编码静态算法) 压缩数据文件,压缩后的表只读。

  NDB存储引擎

    集群存储引擎,高性能、高可用, share nothing 的集群架构,数据可以全部放在内存中,主键查找速度极快,可以添加数据存储节点线性提高数据性能。

   连接操作(JOIN)在数据库层完成,查询很慢

  Memory 存储引擎(之前称为 HEAP 存储引擎): 

    将表中数据存放在内存中,没有持久化,适合临时表。默认使用hash索引。

    只支持表锁,并发性能差。

  Archive存储引擎

    只支持 INSERT 和 SELECT 操作,使用 zlib 算法将数据行压缩存储,压缩比 1:10,适合存储归档文件

  Federated存储引擎

    不存放数据。指向一台远程MySQL数据服务器上的表。

  Maria存储引擎

    可以看作 MyISAM 后续版。支持缓存数据和索引文件,应用行锁设计,提供MVCC功能,支持事务和非事务安全的选项,以及更好的BLOB字符类型的处理性能。

  其他存储引擎:  

    还有 Merge、 CSV、Sphinx 和 Infobright 。。。

4.各存储引擎之间的比较

  

 

     可以通过 SHOW ENGINES; 或 查找 information_schema 数据库下的ENGINES表  查看数据库支持的存储引擎。

5.连接MySQL

  TCP/IP:mysql会先去检查用户的权限

mysql -h xxx.xxx.xxx.xxx -u root -p

  命名管道和共享内存:

    在 windows 平台上,如果两个需要进程通信的进程在同一台服务器上,可以使用命名管道,配置文件中启用 --enable-named-pipe选项,若想使用共享内存,配置文件中添加 --shared-memory,连接时使用 --protocol=memory。

  UNIX 域套接字:

    在 linux 和 unix环境下,只能在 MySQL 客户端和数据库实例在一台服务器上才能使用,用户可在配置文件中指定套接字文件路径, --socket=/tmp/mysql.sock。当实例启动后, 可使用 SHOW VARIABLES LIKE 'socket' 查找套接字文件。使用套接字连接:

mysql -uroot -S /tmp/mysql.sock

 

posted @ 2021-09-23 11:13  墨梅青莲  阅读(70)  评论(0)    收藏  举报