天天看点

mysql数据库分析

作者:lT点工小橙子

使用docker安装mysql 数据库

拉取镜像:docker pull mysql:5.7 指定5.7 版本,也可以根据直接需求填写版本号

mysql数据库分析

docker images 可以看到下载好镜像

创建好三个需要挂载docker的目录

mkdir -p /var/mysql/data /var/mysql/logs /var/mysql/conf           
mysql数据库分析

创建好的目录

挂载启动mysql 服务

docker run -p 3306:3336 --name mysql5.7 \
-v /var/mysql/logs:/var/log/mysql \
-v /var/mysql/data:/var/lib/mysql \
-v /var/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7           

启动失败!!报端口被绑定,莫慌我们来排查一下。

mysql数据库分析

使用netstat 查看是哪个pid 占用了3306 ,发现是1445 的pid ,使用 kill 1445杀掉该进程

mysql数据库分析

执行又报了这个错 大概率是因为之前的服务没有退出导致

mysql数据库分析

使用docker ps -a 得到对应容器id后再使用 docker rm id 删除容器。

mysql数据库分析

再次执行 发现执行成功

mysql数据库分析

使用 docker logs --tail=100 mysql5.7 查看一下日志,发现启动成功,挂载的目录已经有对应文件

mysql数据库分析

总结下创建需要的几个步骤:

docker pull mysql:5.7 #拉取服务 1
mkdir -p /var/mysql/data /var/mysql/logs /var/mysql/conf #创建mysql挂载的目录 2
#挂载启动服务3
docker run -p 3306:3306 --name mysql \ #将容器的3306端口映射到主机的3306端口,'\'指换行符
-v /var/mysql/logs:/var/log/mysql \ #左边为Linux的目录结构,右边为docker内部
-v /var/mysql/data:/var/lib/mysql \
-v /var/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \ #初始化root用户的密码为:123456
-d mysql:5.7           

数据库存储引擎

数据库存储引擎是数据库底层软件组件,数据库管理系统使用数据引擎进行创建、查询、更新和删除数据操作。简而言之,存储引擎就是表的类型。数据库的存储引擎决定了表在计算机中的存储方式。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎还可以获得特定的功能。

show ENGINES 查看引擎

mysql数据库分析

show ENGINES 所有的存储引擎

  • ARCHIVE :用于数据存档的引擎,数据被插入后就不能在修改了,且不支持索引,行锁,占用磁盘少;常用于日志系统,大量的设备数据采集
  • CSV:在存储数据时,会以逗号作为数据项之间的分隔符,常用于数据库的快速导出导入,表格转换为CSV
  • BLACKHOLE:会丢弃写操作,该操作会返回空内容。
  • FEDERATED:将数据存储在远程数据库中,用来访问远程表的存储引擎
  • InnoDB:默认,5.5版本后新增,具备外键支持功能的事务处理引擎,事务优先,行锁,支持B树索引
  • MEMORY:置于内存的表,速度快,值查找热度较高的数据但安全没保障,只有16M,不支持大数据存储类型,表锁,常用于等
  • MRG_MYISAM:用来管理由多个MyISAM 表构成的表集合
  • MYISAM:5.5版本之前默认引擎,主要的非事务处理存储引擎,性能优先,表锁,支持B树、哈希索引
  • NDB:MySQL集群专用存储引擎
mysql数据库分析

主流引擎的比对

默认的存储引擎是Innodb

mysql数据库分析

数据库索引

索引是对数据库表中一列或多列的值进行排序的一种结构,如字典目录提高检索性能 B+Tree 索引是大多数 MySQL 存储引擎的默认索引类型。

优点:

  1. 降低IO、CPU使用率
  2. 索引列,可以保证行的唯一性
  3. 有效缩短数据检索时间
  4. 加快表与表之间的连接

缺点:

  • 占用空间,索引(保持主键和索引记录)
  • 降低了更新表的速度
  • 索引的长度,需要时间维护

索引的种类

主键索引 :是大多数 MySQL 存储引擎的默认索引类型。设定为主键后数据库会自动建立索引,innodb为聚簇索引 又被称为B+Tree 创建语句 create index 索引名称 on table(col);

单值索引:即一个索引只包含单个列,一个表可以有多个单列索引

mysql数据库分析

复合索引:一个索引包含多个列在数据库操作期间,复合索引比单值索引所需要的开销更小(对于相同的多个列建索引)当表的行数远大于索引列的数目时可以使用复合索引 创建语句:create index 索引名称 on table(col,col.....)

mysql数据库分析

id 和name 组成的复合索引

数据库的文件 ibd为表结构文件 frm表结构文件

Innodb

  • ibd文件,这个表是InnoDB存储引擎时, 数据文件
  • frm文件,就是表结构文件

MyISAM

  • frm文件,表结构文件
  • MYD文件,数据文件
  • MYI文件,索引文件
mysql数据库分析

sql语句种类

DDL(data definition language)数据定义语言

CREATE ALTER DROP 用来定义或改变表结构、数据类型、表之间的链接和约束,用在建表上

DML(data manipulation language)数据操控语言

SELECT,UPDATE,INSERT,DELETE 用来对数据库的数据进行操作的语言

DQL(data querylanguage)数据查询语言

SELECT FROM WHERE 用来查询表数据

DCL(data controllanguage)数据控制语言

GRANT DENY REVOKE 用于设置、更改数据库用户或角色权限的语句,默认状态下,只有

sysadmin、dbcreator、db owner、db securityadmin才有拥有权限执行DCL

SQL语句的执行过程

mysql数据库分析

步骤1:连接层:连接管理

步骤2:服务层:权限验证,查询缓存:命中直接返回, 语法分析,优化sql

步骤3:引擎层:操作引擎,返回结果

步骤4:存储层:把脚本转换为日志,在日志回放进行一个sql回放,数据库对应磁盘的操作都是通过日志进行

SQL语句查询的执行过程

  1. 执行 from 表,查看来源表
  2. where 条件 过滤数据 ===== 条件,影响性能
  3. group by 查询结果条件来分组 ==== 列没有变化
  4. select 字段 ====== 这一步的时候,列的数量才会变化
  5. order by 字段 ===== 排序 可能产生临时表
  6. limit 数量

继续阅读