Mysql技术内幕 第二版InnoDB 引擎 学习笔记第一章

Mysql技术内幕 第二版InnoDB 引擎 学习笔记第一章

    • 数据库与实例
    • mysql数据库内部体系结构
    • mysql存储引擎
    • 各存储引擎比较
    • 连接mysql

数据库与实例

  1. 数据库: 主要是指物理操作系统文件,或其他形式文件的集合
  2. 数据库实例: 主要是指操作物理操作系统文件的程序 (mysql实例被设计成单进程多线程的架构)

mysql实例启动后配置加载顺序

[root@localhost ~]# mysql --help |grep my.cnf
                      order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf 

mysql数据库内部体系结构

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

mysql区别于其他数据库最主要特点是插件式表存储引擎

mysql存储引擎

存储引擎是基于表而不是基于数据库

##  InnoDB存储引擎
	  1,支持事务,行锁设计,支持外键,支持全文索引,支持页压缩,读操作不产生锁
	  2,通过MVCC 获得高并发性能,并且实现了sql的4种隔离级别默认为REPEATABLE,DML操作缓存(select除外),二次写,自适应哈希索引,预读等特性
	  3,对表中数据存储,采用聚集的方式,因此每张表的存储都是按主建顺序进行存储,如果没有定义主键InnoDB会为每行生成
	  		1个6个字节的rowid,并以此作为主键

##  MyISAM存储引擎
	  1,不支持事务,表锁设计,不支持外键,支持全文索引,支持页压缩,适合数据仓库,查询较多的业务场景
	  2,MyISAM 缓冲池只缓存索引文件,不缓存数据文件(这点和大多数数据都不同)
	  3,表由MYD和MYI组成,MYD用了存放数据文件,MYI用来存放索引文件		  		

##  NDB存储引擎
	  1,其结构是share nothing的集群架构,能提供更高的可用性。
	  2,可以将非索引数据放在磁盘,因此主键查找速度极快
	  3,通过添加NDB数据存储节点可以线性的提供数据性能,是高可用,高性能的集群
	  4,NDB的连接操作(join)是在Mysql数据库层面完成,而不是在存储引擎,因此复杂的连接操作需要巨大的网络开销因此查询速度慢	

## Memory存储引擎
	  1,适合存储临时数据的临时表,已经数据仓库的维度表(缺点太多不在介绍)

## Archive存储引擎
	  1,只支持insert和select 操作,提供高性能的插入及压缩, 适合做日志存储归档

 ## Federated存储引擎(个人感觉没啥价值)
 	 1	,Federated不存储表数据,而是指向远程的一台mysql数据库的表

各存储引擎比较

![在这里插入图片描述](https://img-blog.csdnimg.cn/20191018113506180.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIxNDAwMjc1,size_16,color_FFFFFF,t_70)

可以通过show engines 查询当前mysql 支持的存储引擎

mysql> show engines \g;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.00 sec)

连接mysql

连接mysql通过进程之间通信,常用的进程通信有,管道,命令管道,命名字,tcp/ip,unix域套接字


通过tcp/ip连接mysql实例,mysql会先检查一张权限视图,用来判断发起请求的客户端ip是否允许连接mysql实例,该权限视图在mysql为user表
mysql> select host ,user  from user
    -> ;
+-----------+---------------+
| host      | user          |
+-----------+---------------+
| %         | root          |
| admin     | admin         |
| localhost | mysql.session |
| localhost | mysql.sys     |
| localhost | root          |
+-----------+---------------+
5 rows in set (0.00 sec)

你可能感兴趣的:(mysql,innoDB)